@@ -875,14 +875,16 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []driver.Named
875875 // consume the number of arguments used in the current
876876 // statement and append all named arguments not
877877 // contained therein
878- stmtArgs = append (stmtArgs , args [start :start + na ]... )
879- for i := range args {
880- if (i < start || i >= na ) && args [i ].Name != "" {
881- stmtArgs = append (stmtArgs , args [i ])
878+ if len (args [start :start + na ]) > 0 {
879+ stmtArgs = append (stmtArgs , args [start :start + na ]... )
880+ for i := range args {
881+ if (i < start || i >= na ) && args [i ].Name != "" {
882+ stmtArgs = append (stmtArgs , args [i ])
883+ }
884+ }
885+ for i := range stmtArgs {
886+ stmtArgs [i ].Ordinal = i + 1
882887 }
883- }
884- for i := range stmtArgs {
885- stmtArgs [i ].Ordinal = i + 1
886888 }
887889 res , err = s .(* SQLiteStmt ).exec (ctx , stmtArgs )
888890 if err != nil && err != driver .ErrSkip {
@@ -1906,6 +1908,7 @@ func (s *SQLiteStmt) Close() error {
19061908 if rv != C .SQLITE_OK {
19071909 return s .c .lastError ()
19081910 }
1911+ s .c = nil
19091912 runtime .SetFinalizer (s , nil )
19101913 return nil
19111914}
@@ -2011,6 +2014,7 @@ func (s *SQLiteStmt) query(ctx context.Context, args []driver.NamedValue) (drive
20112014 closed : false ,
20122015 ctx : ctx ,
20132016 }
2017+ runtime .SetFinalizer (rows , (* SQLiteRows ).Close )
20142018
20152019 return rows , nil
20162020}
@@ -2056,6 +2060,7 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []driver.NamedValue) (driver
20562060 err error
20572061 }
20582062 resultCh := make (chan result )
2063+ defer close (resultCh )
20592064 go func () {
20602065 r , err := s .execSync (args )
20612066 resultCh <- result {r , err }
@@ -2122,6 +2127,8 @@ func (rc *SQLiteRows) Close() error {
21222127 return rc .s .c .lastError ()
21232128 }
21242129 rc .s .mu .Unlock ()
2130+ rc .s = nil
2131+ runtime .SetFinalizer (rc , nil )
21252132 return nil
21262133}
21272134
@@ -2168,6 +2175,7 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
21682175 return rc .nextSyncLocked (dest )
21692176 }
21702177 resultCh := make (chan error )
2178+ defer close (resultCh )
21712179 go func () {
21722180 resultCh <- rc .nextSyncLocked (dest )
21732181 }()
0 commit comments