@@ -122,6 +122,7 @@ type SQLiteStmt struct {
122
122
c * SQLiteConn
123
123
s * C.sqlite3_stmt
124
124
nv int
125
+ nn []string
125
126
t string
126
127
closed bool
127
128
cls bool
@@ -382,7 +383,14 @@ func (c *SQLiteConn) Prepare(query string) (driver.Stmt, error) {
382
383
t = strings .TrimSpace (C .GoString (tail ))
383
384
}
384
385
nv := int (C .sqlite3_bind_parameter_count (s ))
385
- ss := & SQLiteStmt {c : c , s : s , nv : nv , t : t }
386
+ var nn []string
387
+ for i := 0 ; i < nv ; i ++ {
388
+ pn := C .GoString (C .sqlite3_bind_parameter_name (s , C .int (i + 1 )))
389
+ if len (pn ) > 1 && pn [0 ] == '$' && 48 <= pn [1 ] && pn [1 ] <= 57 {
390
+ nn = append (nn , C .GoString (C .sqlite3_bind_parameter_name (s , C .int (i + 1 ))))
391
+ }
392
+ }
393
+ ss := & SQLiteStmt {c : c , s : s , nv : nv , nn : nn , t : t }
386
394
runtime .SetFinalizer (ss , (* SQLiteStmt ).Close )
387
395
return ss , nil
388
396
}
@@ -423,8 +431,16 @@ func (s *SQLiteStmt) bind(args []driver.Value) error {
423
431
var vargs []bindArg
424
432
narg := len (args )
425
433
vargs = make ([]bindArg , narg )
426
- for i , v := range args {
427
- vargs [i ] = bindArg {i + 1 , v }
434
+ if len (s .nn ) > 0 {
435
+ for i , v := range s .nn {
436
+ if pi , err := strconv .Atoi (v [1 :]); err == nil {
437
+ vargs [i ] = bindArg {pi , args [i ]}
438
+ }
439
+ }
440
+ } else {
441
+ for i , v := range args {
442
+ vargs [i ] = bindArg {i + 1 , v }
443
+ }
428
444
}
429
445
430
446
for _ , varg := range vargs {
0 commit comments