@@ -881,14 +881,16 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []driver.Named
881
881
// consume the number of arguments used in the current
882
882
// statement and append all named arguments not
883
883
// contained therein
884
- stmtArgs = append (stmtArgs , args [start :start + na ]... )
885
- for i := range args {
886
- if (i < start || i >= na ) && args [i ].Name != "" {
887
- stmtArgs = append (stmtArgs , args [i ])
884
+ if len (args [start :start + na ]) > 0 {
885
+ stmtArgs = append (stmtArgs , args [start :start + na ]... )
886
+ for i := range args {
887
+ if (i < start || i >= na ) && args [i ].Name != "" {
888
+ stmtArgs = append (stmtArgs , args [i ])
889
+ }
890
+ }
891
+ for i := range stmtArgs {
892
+ stmtArgs [i ].Ordinal = i + 1
888
893
}
889
- }
890
- for i := range stmtArgs {
891
- stmtArgs [i ].Ordinal = i + 1
892
894
}
893
895
res , err = s .(* SQLiteStmt ).exec (ctx , stmtArgs )
894
896
if err != nil && err != driver .ErrSkip {
@@ -1683,7 +1685,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
1683
1685
}
1684
1686
}
1685
1687
1686
- // Forgein Keys
1688
+ // Foreign Keys
1687
1689
if foreignKeys > - 1 {
1688
1690
if err := exec (fmt .Sprintf ("PRAGMA foreign_keys = %d;" , foreignKeys )); err != nil {
1689
1691
C .sqlite3_close_v2 (db )
@@ -1912,6 +1914,7 @@ func (s *SQLiteStmt) Close() error {
1912
1914
if rv != C .SQLITE_OK {
1913
1915
return s .c .lastError ()
1914
1916
}
1917
+ s .c = nil
1915
1918
runtime .SetFinalizer (s , nil )
1916
1919
return nil
1917
1920
}
@@ -2017,6 +2020,7 @@ func (s *SQLiteStmt) query(ctx context.Context, args []driver.NamedValue) (drive
2017
2020
closed : false ,
2018
2021
ctx : ctx ,
2019
2022
}
2023
+ runtime .SetFinalizer (rows , (* SQLiteRows ).Close )
2020
2024
2021
2025
return rows , nil
2022
2026
}
@@ -2062,6 +2066,7 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []driver.NamedValue) (driver
2062
2066
err error
2063
2067
}
2064
2068
resultCh := make (chan result )
2069
+ defer close (resultCh )
2065
2070
go func () {
2066
2071
r , err := s .execSync (args )
2067
2072
resultCh <- result {r , err }
@@ -2128,6 +2133,8 @@ func (rc *SQLiteRows) Close() error {
2128
2133
return rc .s .c .lastError ()
2129
2134
}
2130
2135
rc .s .mu .Unlock ()
2136
+ rc .s = nil
2137
+ runtime .SetFinalizer (rc , nil )
2131
2138
return nil
2132
2139
}
2133
2140
@@ -2174,6 +2181,7 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
2174
2181
return rc .nextSyncLocked (dest )
2175
2182
}
2176
2183
resultCh := make (chan error )
2184
+ defer close (resultCh )
2177
2185
go func () {
2178
2186
resultCh <- rc .nextSyncLocked (dest )
2179
2187
}()
0 commit comments