@@ -3,6 +3,7 @@ package impl
3
3
import (
4
4
"context"
5
5
"database/sql"
6
+ "database/sql/driver"
6
7
"errors"
7
8
"time"
8
9
@@ -13,7 +14,7 @@ import (
13
14
// for an existing sql.DB connection.
14
15
// argFmt is the format string for argument placeholders like "?" or "$%d"
15
16
// that will be replaced error messages to format a complete query.
16
- func NewGenericConnection (ctx context.Context , db * sql.DB , config * sqldb.Config , listener sqldb.Listener , structFieldMapper sqldb.StructFieldMapper , validateColumnName func (string ) error , argFmt string ) sqldb.Connection {
17
+ func NewGenericConnection (ctx context.Context , db * sql.DB , config * sqldb.Config , listener sqldb.Listener , structFieldMapper sqldb.StructFieldMapper , validateColumnName func (string ) error , converter driver. ValueConverter , argFmt string ) sqldb.Connection {
17
18
if listener == nil {
18
19
listener = sqldb .UnsupportedListener ()
19
20
}
@@ -24,6 +25,7 @@ func NewGenericConnection(ctx context.Context, db *sql.DB, config *sqldb.Config,
24
25
listener : listener ,
25
26
structFieldMapper : structFieldMapper ,
26
27
validateColumnName : validateColumnName ,
28
+ converter : converter ,
27
29
argFmt : argFmt ,
28
30
}
29
31
}
@@ -35,6 +37,7 @@ type genericConn struct {
35
37
listener sqldb.Listener
36
38
structFieldMapper sqldb.StructFieldMapper
37
39
validateColumnName func (string ) error
40
+ converter driver.ValueConverter
38
41
argFmt string
39
42
40
43
tx * sql.Tx
@@ -109,31 +112,31 @@ func (conn *genericConn) queryer() Queryer {
109
112
}
110
113
111
114
func (conn * genericConn ) Exec (query string , args ... any ) error {
112
- return Exec (conn .ctx , conn .execer (), conn . argFmt , query , args )
115
+ return Exec (conn .ctx , conn .execer (), query , args , conn . converter , conn . argFmt )
113
116
}
114
117
115
118
func (conn * genericConn ) QueryRow (query string , args ... any ) sqldb.RowScanner {
116
- return QueryRow (conn .ctx , conn .queryer (), conn .structFieldMapper , conn .argFmt , query , args )
119
+ return QueryRow (conn .ctx , conn .queryer (), query , args , conn .converter , conn .argFmt , conn . structFieldMapper )
117
120
}
118
121
119
122
func (conn * genericConn ) QueryRows (query string , args ... any ) sqldb.RowsScanner {
120
- return QueryRows (conn .ctx , conn .queryer (), conn .structFieldMapper , conn .argFmt , query , args )
123
+ return QueryRows (conn .ctx , conn .queryer (), query , args , conn .converter , conn .argFmt , conn . structFieldMapper )
121
124
}
122
125
123
126
func (conn * genericConn ) Insert (table string , columValues sqldb.Values ) error {
124
- return Insert (conn .ctx , conn .execer (), table , conn .argFmt , columValues )
127
+ return Insert (conn .ctx , conn .execer (), table , columValues , conn .converter , conn . argFmt )
125
128
}
126
129
127
130
func (conn * genericConn ) InsertUnique (table string , values sqldb.Values , onConflict string ) (inserted bool , err error ) {
128
- return InsertUnique (conn .ctx , conn .queryer (), conn .structFieldMapper , conn .argFmt , table , values , onConflict )
131
+ return InsertUnique (conn .ctx , conn .queryer (), table , values , onConflict , conn .converter , conn .argFmt , conn . structFieldMapper )
129
132
}
130
133
131
134
func (conn * genericConn ) InsertReturning (table string , values sqldb.Values , returning string ) sqldb.RowScanner {
132
- return InsertReturning (conn .ctx , conn .queryer (), conn .structFieldMapper , conn .argFmt , table , values , returning )
135
+ return InsertReturning (conn .ctx , conn .queryer (), table , values , returning , conn .converter , conn .argFmt , conn . structFieldMapper )
133
136
}
134
137
135
138
func (conn * genericConn ) InsertStruct (table string , rowStruct any , ignoreColumns ... sqldb.ColumnFilter ) error {
136
- return InsertStruct (conn .ctx , conn .execer (), table , rowStruct , conn .structFieldMapper , conn .argFmt , ignoreColumns )
139
+ return InsertStruct (conn .ctx , conn .execer (), table , rowStruct , conn .structFieldMapper , ignoreColumns , conn .converter , conn . argFmt )
137
140
}
138
141
139
142
func (conn * genericConn ) InsertStructs (table string , rowStructs any , ignoreColumns ... sqldb.ColumnFilter ) error {
@@ -142,23 +145,23 @@ func (conn *genericConn) InsertStructs(table string, rowStructs any, ignoreColum
142
145
}
143
146
144
147
func (conn * genericConn ) InsertUniqueStruct (table string , rowStruct any , onConflict string , ignoreColumns ... sqldb.ColumnFilter ) (inserted bool , err error ) {
145
- return InsertUniqueStruct (conn .ctx , conn .queryer (), conn .structFieldMapper , conn . argFmt , table , rowStruct , onConflict , ignoreColumns )
148
+ return InsertUniqueStruct (conn .ctx , conn .queryer (), conn .structFieldMapper , table , rowStruct , onConflict , ignoreColumns , conn . converter , conn . argFmt )
146
149
}
147
150
148
151
func (conn * genericConn ) Update (table string , values sqldb.Values , where string , args ... any ) error {
149
- return Update (conn .ctx , conn .execer (), table , values , where , conn .argFmt , args )
152
+ return Update (conn .ctx , conn .execer (), table , values , where , args , conn .converter , conn . argFmt )
150
153
}
151
154
152
155
func (conn * genericConn ) UpdateReturningRow (table string , values sqldb.Values , returning , where string , args ... any ) sqldb.RowScanner {
153
- return UpdateReturningRow (conn .ctx , conn .queryer (), conn . structFieldMapper , conn . argFmt , table , values , returning , where , args )
156
+ return UpdateReturningRow (conn .ctx , conn .queryer (), table , values , returning , where , args , conn . converter , conn . argFmt , conn . structFieldMapper )
154
157
}
155
158
156
159
func (conn * genericConn ) UpdateReturningRows (table string , values sqldb.Values , returning , where string , args ... any ) sqldb.RowsScanner {
157
- return UpdateReturningRows (conn .ctx , conn .queryer (), conn . structFieldMapper , conn . argFmt , table , values , returning , where , args )
160
+ return UpdateReturningRows (conn .ctx , conn .queryer (), table , values , returning , where , args , conn . converter , conn . argFmt , conn . structFieldMapper )
158
161
}
159
162
160
163
func (conn * genericConn ) UpdateStruct (table string , rowStruct any , ignoreColumns ... sqldb.ColumnFilter ) error {
161
- return UpdateStruct (conn .ctx , conn .execer (), table , rowStruct , conn .structFieldMapper , conn .argFmt , ignoreColumns )
164
+ return UpdateStruct (conn .ctx , conn .execer (), table , rowStruct , conn .structFieldMapper , ignoreColumns , conn .converter , conn . argFmt )
162
165
}
163
166
164
167
func (conn * genericConn ) UpsertStruct (table string , rowStruct any , ignoreColumns ... sqldb.ColumnFilter ) error {
@@ -182,18 +185,11 @@ func (conn *genericConn) Begin(opts *sql.TxOptions, no uint64) (sqldb.Connection
182
185
if err != nil {
183
186
return nil , err
184
187
}
185
- return & genericConn {
186
- ctx : conn .ctx ,
187
- db : conn .db , // needed for PingContext, Stats
188
- config : conn .config ,
189
- listener : conn .listener ,
190
- structFieldMapper : conn .structFieldMapper ,
191
- argFmt : conn .argFmt ,
192
- validateColumnName : conn .validateColumnName ,
193
- tx : tx ,
194
- txOptions : opts ,
195
- txNo : no ,
196
- }, nil
188
+ txConn := conn .clone ()
189
+ txConn .tx = tx
190
+ txConn .txOptions = opts
191
+ txConn .txNo = no
192
+ return txConn , nil
197
193
}
198
194
199
195
func (conn * genericConn ) Commit () error {
0 commit comments