aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2024-02-03 01:43:10 +0900
committermattn <mattn.jp@gmail.com>2024-02-03 02:00:28 +0900
commit6ee3e6746e6b5a0f4099d0553120ceead9f9fc38 (patch)
tree561ce954f449d05a2d7c921c4348b3f5f7286d4d
parentUpdate amalgamation code to 3.45.1 (diff)
downloadgolite-6ee3e6746e6b5a0f4099d0553120ceead9f9fc38.tar.gz
golite-6ee3e6746e6b5a0f4099d0553120ceead9f9fc38.tar.xz
close channel
-rw-r--r--sqlite3.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/sqlite3.go b/sqlite3.go
index a16d8ab..4b3b6ca 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -875,14 +875,16 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []driver.Named
// consume the number of arguments used in the current
// statement and append all named arguments not
// contained therein
- stmtArgs = append(stmtArgs, args[start:start+na]...)
- for i := range args {
- if (i < start || i >= na) && args[i].Name != "" {
- stmtArgs = append(stmtArgs, args[i])
+ if len(args[start:start+na]) > 0 {
+ stmtArgs = append(stmtArgs, args[start:start+na]...)
+ for i := range args {
+ if (i < start || i >= na) && args[i].Name != "" {
+ stmtArgs = append(stmtArgs, args[i])
+ }
+ }
+ for i := range stmtArgs {
+ stmtArgs[i].Ordinal = i + 1
}
- }
- for i := range stmtArgs {
- stmtArgs[i].Ordinal = i + 1
}
res, err = s.(*SQLiteStmt).exec(ctx, stmtArgs)
if err != nil && err != driver.ErrSkip {
@@ -1906,6 +1908,7 @@ func (s *SQLiteStmt) Close() error {
if rv != C.SQLITE_OK {
return s.c.lastError()
}
+ s.c = nil
runtime.SetFinalizer(s, nil)
return nil
}
@@ -2011,6 +2014,7 @@ func (s *SQLiteStmt) query(ctx context.Context, args []driver.NamedValue) (drive
closed: false,
ctx: ctx,
}
+ runtime.SetFinalizer(rows, (*SQLiteRows).Close)
return rows, nil
}
@@ -2056,6 +2060,7 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []driver.NamedValue) (driver
err error
}
resultCh := make(chan result)
+ defer close(resultCh)
go func() {
r, err := s.execSync(args)
resultCh <- result{r, err}
@@ -2122,6 +2127,8 @@ func (rc *SQLiteRows) Close() error {
return rc.s.c.lastError()
}
rc.s.mu.Unlock()
+ rc.s = nil
+ runtime.SetFinalizer(rc, nil)
return nil
}
@@ -2168,6 +2175,7 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
return rc.nextSyncLocked(dest)
}
resultCh := make(chan error)
+ defer close(resultCh)
go func() {
resultCh <- rc.nextSyncLocked(dest)
}()