Skip to content

Commit 4f85a48

Browse files
author
Philio
committed
added auto-reconnect functionality to Prepare and Execute
1 parent 9211f07 commit 4f85a48

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

statement.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type Statement struct {
1818

1919
// Statement status flags
2020
prepared bool
21+
preparedSql string
2122
paramsBound bool
2223
paramsRebound bool
2324

@@ -42,6 +43,17 @@ type Statement struct {
4243

4344
// Prepare new statement
4445
func (s *Statement) Prepare(sql string) (err os.Error) {
46+
// Auto reconnect
47+
defer func() {
48+
if err != nil && s.c.checkNet(err) && s.c.Reconnect {
49+
s.c.log(1, "!!! Lost connection to server !!!")
50+
s.c.connected = false
51+
err = s.c.reconnect()
52+
if err == nil {
53+
err = s.Prepare(sql)
54+
}
55+
}
56+
}()
4557
// Log prepare
4658
s.c.log(1, "=== Begin prepare '%s' ===", sql)
4759
// Pre-run checks
@@ -83,6 +95,7 @@ func (s *Statement) Prepare(sql string) (err os.Error) {
8395
}
8496
// Statement is preapred
8597
s.prepared = true
98+
s.preparedSql = sql
8699
return
87100
}
88101

@@ -248,6 +261,20 @@ func (s *Statement) SendLongData(num int, data []byte) (err os.Error) {
248261

249262
// Execute
250263
func (s *Statement) Execute() (err os.Error) {
264+
// Auto reconnect
265+
defer func() {
266+
if err != nil && s.c.checkNet(err) && s.c.Reconnect {
267+
s.c.log(1, "!!! Lost connection to server !!!")
268+
s.c.connected = false
269+
err = s.c.reconnect()
270+
if err == nil {
271+
err = s.Prepare(s.preparedSql)
272+
if err == nil {
273+
err = s.Execute()
274+
}
275+
}
276+
}
277+
}()
251278
// Log execute
252279
s.c.log(1, "=== Begin execute ===")
253280
// Check prepared

0 commit comments

Comments
 (0)