@@ -17,12 +17,13 @@ type Conn struct {
17
17
// It will trigger PrePing, Ping, PostPing hooks.
18
18
//
19
19
// If the original connection does not satisfy "database/sql/driver".Pinger, it does nothing.
20
- func (conn * Conn ) Ping (c context.Context ) (err error ) {
20
+ func (conn * Conn ) Ping (c context.Context ) error {
21
+ var err error
21
22
var ctx interface {}
22
23
hooks := conn .Proxy .getHooks (c )
23
24
24
25
if hooks != nil {
25
- defer func () { err = hooks .postPing (c , ctx , conn , err ) }()
26
+ defer func () { hooks .postPing (c , ctx , conn , err ) }()
26
27
if ctx , err = hooks .prePing (c , conn ); err != nil {
27
28
return err
28
29
}
@@ -48,30 +49,31 @@ func (conn *Conn) Prepare(query string) (driver.Stmt, error) {
48
49
}
49
50
50
51
// PrepareContext returns a prepared statement which is wrapped by Stmt.
51
- func (conn * Conn ) PrepareContext (c context.Context , query string ) (stmt driver.Stmt , err error ) {
52
+ func (conn * Conn ) PrepareContext (c context.Context , query string ) (driver.Stmt , error ) {
52
53
var ctx interface {}
53
- var stmtAux = & Stmt {
54
+ var stmt = & Stmt {
54
55
QueryString : query ,
55
56
Proxy : conn .Proxy ,
56
57
Conn : conn ,
57
58
}
59
+ var err error
58
60
hooks := conn .Proxy .getHooks (c )
59
61
if hooks != nil {
60
- defer func () { err = hooks .postPrepare (c , ctx , stmtAux , err ) }()
61
- if ctx , err = hooks .prePrepare (c , stmtAux ); err != nil {
62
+ defer func () { hooks .postPrepare (c , ctx , stmt , err ) }()
63
+ if ctx , err = hooks .prePrepare (c , stmt ); err != nil {
62
64
return nil , err
63
65
}
64
66
}
65
67
66
68
if connCtx , ok := conn .Conn .(driver.ConnPrepareContext ); ok {
67
- stmtAux .Stmt , err = connCtx .PrepareContext (c , stmtAux .QueryString )
69
+ stmt .Stmt , err = connCtx .PrepareContext (c , stmt .QueryString )
68
70
} else {
69
- stmtAux .Stmt , err = conn .Conn .Prepare (stmtAux .QueryString )
71
+ stmt .Stmt , err = conn .Conn .Prepare (stmt .QueryString )
70
72
if err == nil {
71
73
select {
72
74
default :
73
75
case <- c .Done ():
74
- stmtAux .Stmt .Close ()
76
+ stmt .Stmt .Close ()
75
77
return nil , c .Err ()
76
78
}
77
79
}
@@ -81,20 +83,21 @@ func (conn *Conn) PrepareContext(c context.Context, query string) (stmt driver.S
81
83
}
82
84
83
85
if hooks != nil {
84
- if err = hooks .prepare (c , ctx , stmtAux ); err != nil {
86
+ if err = hooks .prepare (c , ctx , stmt ); err != nil {
85
87
return nil , err
86
88
}
87
89
}
88
- return stmtAux , nil
90
+ return stmt , nil
89
91
}
90
92
91
93
// Close calls the original Close method.
92
- func (conn * Conn ) Close () ( err error ) {
94
+ func (conn * Conn ) Close () error {
93
95
ctx := context .Background ()
96
+ var err error
94
97
var myctx interface {}
95
98
96
99
if hooks := conn .Proxy .hooks ; hooks != nil {
97
- defer func () { err = hooks .postClose (ctx , myctx , conn , err ) }()
100
+ defer func () { hooks .postClose (ctx , myctx , conn , err ) }()
98
101
if myctx , err = hooks .preClose (ctx , conn ); err != nil {
99
102
return err
100
103
}
@@ -120,12 +123,14 @@ func (conn *Conn) Begin() (driver.Tx, error) {
120
123
121
124
// BeginTx starts and returns a new transaction which is wrapped by Tx.
122
125
// It will trigger PreBegin, Begin, PostBegin hooks.
123
- func (conn * Conn ) BeginTx (c context.Context , opts driver.TxOptions ) (tx driver.Tx , err error ) {
126
+ func (conn * Conn ) BeginTx (c context.Context , opts driver.TxOptions ) (driver.Tx , error ) {
124
127
// set the hooks.
128
+ var err error
125
129
var ctx interface {}
130
+ var tx driver.Tx
126
131
hooks := conn .Proxy .getHooks (c )
127
132
if hooks != nil {
128
- defer func () { err = hooks .postBegin (c , ctx , conn , err ) }()
133
+ defer func () { hooks .postBegin (c , ctx , conn , err ) }()
129
134
if ctx , err = hooks .preBegin (c , conn ); err != nil {
130
135
return nil , err
131
136
}
@@ -188,7 +193,7 @@ func (conn *Conn) Exec(query string, args []driver.Value) (driver.Result, error)
188
193
// It will trigger PreExec, Exec, PostExec hooks.
189
194
//
190
195
// If the original connection does not satisfy "database/sql/driver".ExecerContext nor "database/sql/driver".Execer, it return ErrSkip error.
191
- func (conn * Conn ) ExecContext (c context.Context , query string , args []driver.NamedValue ) (drv driver.Result , err error ) {
196
+ func (conn * Conn ) ExecContext (c context.Context , query string , args []driver.NamedValue ) (driver.Result , error ) {
192
197
execer , exOk := conn .Conn .(driver.Execer )
193
198
execerCtx , exCtxOk := conn .Conn .(driver.ExecerContext )
194
199
if ! exOk && ! exCtxOk {
@@ -202,17 +207,19 @@ func (conn *Conn) ExecContext(c context.Context, query string, args []driver.Nam
202
207
Conn : conn ,
203
208
}
204
209
var ctx interface {}
210
+ var err error
211
+ var result driver.Result
205
212
hooks := conn .Proxy .getHooks (c )
206
213
if hooks != nil {
207
- defer func () { err = hooks .postExec (c , ctx , stmt , args , drv , err ) }()
214
+ defer func () { hooks .postExec (c , ctx , stmt , args , result , err ) }()
208
215
if ctx , err = hooks .preExec (c , stmt , args ); err != nil {
209
216
return nil , err
210
217
}
211
218
}
212
219
213
220
// call the original method.
214
221
if execerCtx != nil {
215
- drv , err = execerCtx .ExecContext (c , stmt .QueryString , args )
222
+ result , err = execerCtx .ExecContext (c , stmt .QueryString , args )
216
223
} else {
217
224
select {
218
225
default :
@@ -223,18 +230,19 @@ func (conn *Conn) ExecContext(c context.Context, query string, args []driver.Nam
223
230
if err0 != nil {
224
231
return nil , err0
225
232
}
226
- drv , err = execer .Exec (stmt .QueryString , dargs )
233
+ result , err = execer .Exec (stmt .QueryString , dargs )
227
234
}
228
235
if err != nil {
229
236
return nil , err
230
237
}
231
238
232
239
if hooks != nil {
233
- if err = hooks .exec (c , ctx , stmt , args , drv ); err != nil {
240
+ if err = hooks .exec (c , ctx , stmt , args , result ); err != nil {
234
241
return nil , err
235
242
}
236
243
}
237
- return drv , err
244
+
245
+ return result , nil
238
246
}
239
247
240
248
// Query executes a query that may return rows.
@@ -250,7 +258,7 @@ func (conn *Conn) Query(query string, args []driver.Value) (driver.Rows, error)
250
258
// It wil trigger PreQuery, Query, PostQuery hooks.
251
259
//
252
260
// If the original connection does not satisfy "database/sql/driver".QueryerContext nor "database/sql/driver".Queryer, it return ErrSkip error.
253
- func (conn * Conn ) QueryContext (c context.Context , query string , args []driver.NamedValue ) (rows driver.Rows , err error ) {
261
+ func (conn * Conn ) QueryContext (c context.Context , query string , args []driver.NamedValue ) (driver.Rows , error ) {
254
262
queryer , qok := conn .Conn .(driver.Queryer )
255
263
queryerCtx , qCtxOk := conn .Conn .(driver.QueryerContext )
256
264
if ! qok && ! qCtxOk {
@@ -263,9 +271,11 @@ func (conn *Conn) QueryContext(c context.Context, query string, args []driver.Na
263
271
Conn : conn ,
264
272
}
265
273
var ctx interface {}
274
+ var err error
275
+ var rows driver.Rows
266
276
hooks := conn .Proxy .getHooks (c )
267
277
if hooks != nil {
268
- defer func () { err = hooks .postQuery (c , ctx , stmt , args , rows , err ) }()
278
+ defer func () { hooks .postQuery (c , ctx , stmt , args , rows , err ) }()
269
279
if ctx , err = hooks .preQuery (c , stmt , args ); err != nil {
270
280
return nil , err
271
281
}
@@ -333,12 +343,13 @@ type sessionResetter interface {
333
343
}
334
344
335
345
// ResetSession resets the state of Conn.
336
- func (conn * Conn ) ResetSession (ctx context.Context ) (err error ) {
346
+ func (conn * Conn ) ResetSession (ctx context.Context ) error {
347
+ var err error
337
348
var myctx interface {}
338
349
hooks := conn .Proxy .getHooks (ctx )
339
350
340
351
if hooks != nil {
341
- defer func () { err = hooks .postResetSession (ctx , myctx , conn , err ) }()
352
+ defer func () { hooks .postResetSession (ctx , myctx , conn , err ) }()
342
353
if myctx , err = hooks .preResetSession (ctx , conn ); err != nil {
343
354
return err
344
355
}
0 commit comments