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