@@ -875,14 +875,16 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []driver.Named
875
875
// consume the number of arguments used in the current
876
876
// statement and append all named arguments not
877
877
// 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
882
887
}
883
- }
884
- for i := range stmtArgs {
885
- stmtArgs [i ].Ordinal = i + 1
886
888
}
887
889
res , err = s .(* SQLiteStmt ).exec (ctx , stmtArgs )
888
890
if err != nil && err != driver .ErrSkip {
@@ -1906,6 +1908,7 @@ func (s *SQLiteStmt) Close() error {
1906
1908
if rv != C .SQLITE_OK {
1907
1909
return s .c .lastError ()
1908
1910
}
1911
+ s .c = nil
1909
1912
runtime .SetFinalizer (s , nil )
1910
1913
return nil
1911
1914
}
@@ -2011,6 +2014,7 @@ func (s *SQLiteStmt) query(ctx context.Context, args []driver.NamedValue) (drive
2011
2014
closed : false ,
2012
2015
ctx : ctx ,
2013
2016
}
2017
+ runtime .SetFinalizer (rows , (* SQLiteRows ).Close )
2014
2018
2015
2019
return rows , nil
2016
2020
}
@@ -2056,6 +2060,7 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []driver.NamedValue) (driver
2056
2060
err error
2057
2061
}
2058
2062
resultCh := make (chan result )
2063
+ defer close (resultCh )
2059
2064
go func () {
2060
2065
r , err := s .execSync (args )
2061
2066
resultCh <- result {r , err }
@@ -2122,6 +2127,8 @@ func (rc *SQLiteRows) Close() error {
2122
2127
return rc .s .c .lastError ()
2123
2128
}
2124
2129
rc .s .mu .Unlock ()
2130
+ rc .s = nil
2131
+ runtime .SetFinalizer (rc , nil )
2125
2132
return nil
2126
2133
}
2127
2134
@@ -2168,6 +2175,7 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
2168
2175
return rc .nextSyncLocked (dest )
2169
2176
}
2170
2177
resultCh := make (chan error )
2178
+ defer close (resultCh )
2171
2179
go func () {
2172
2180
resultCh <- rc .nextSyncLocked (dest )
2173
2181
}()
0 commit comments