summaryrefslogtreecommitdiff
path: root/vendor/modernc.org/sqlite/sqlite.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-03-04 09:42:11 +0000
committerLibravatar GitHub <noreply@github.com>2024-03-04 09:42:11 +0000
commitadb4cdcf6c9eacd369eaaf5b21774b198d57c040 (patch)
treea4f9c8fe2ce147fa952bcb795690afb9bb2affcb /vendor/modernc.org/sqlite/sqlite.go
parent[bugfix] update postgresqlstmt to correctly use postgres err hook (#2711) (diff)
downloadgotosocial-adb4cdcf6c9eacd369eaaf5b21774b198d57c040.tar.xz
[chore]: Bump modernc.org/sqlite from 1.28.0 to 1.29.2 (#2718)
Diffstat (limited to 'vendor/modernc.org/sqlite/sqlite.go')
-rw-r--r--vendor/modernc.org/sqlite/sqlite.go36
1 files changed, 29 insertions, 7 deletions
diff --git a/vendor/modernc.org/sqlite/sqlite.go b/vendor/modernc.org/sqlite/sqlite.go
index 9763713fa..86f5eddf6 100644
--- a/vendor/modernc.org/sqlite/sqlite.go
+++ b/vendor/modernc.org/sqlite/sqlite.go
@@ -492,10 +492,23 @@ func toNamedValues(vals []driver.Value) (r []driver.NamedValue) {
func (s *stmt) exec(ctx context.Context, args []driver.NamedValue) (r driver.Result, err error) {
var pstmt uintptr
var done int32
- if ctx != nil && ctx.Done() != nil {
- defer interruptOnDone(ctx, s.c, &done)()
+ if ctx != nil {
+ if ctxDone := ctx.Done(); ctxDone != nil {
+ select {
+ case <-ctxDone:
+ return nil, ctx.Err()
+ default:
+ }
+ defer interruptOnDone(ctx, s.c, &done)()
+ }
}
+ defer func() {
+ if ctx != nil && atomic.LoadInt32(&done) != 0 {
+ r, err = nil, ctx.Err()
+ }
+ }()
+
for psql := s.psql; *(*byte)(unsafe.Pointer(psql)) != 0 && atomic.LoadInt32(&done) == 0; {
if pstmt, err = s.c.prepareV2(&psql); err != nil {
return nil, err
@@ -532,7 +545,7 @@ func (s *stmt) exec(ctx context.Context, args []driver.NamedValue) (r driver.Res
switch rc & 0xff {
case sqlite3.SQLITE_DONE, sqlite3.SQLITE_ROW:
- // nop
+ r, err = newResult(s.c)
default:
return s.c.errstr(int32(rc))
}
@@ -548,7 +561,7 @@ func (s *stmt) exec(ctx context.Context, args []driver.NamedValue) (r driver.Res
return nil, err
}
}
- return newResult(s.c)
+ return r, err
}
// NumInput returns the number of placeholder parameters.
@@ -576,14 +589,23 @@ func (s *stmt) Query(args []driver.Value) (driver.Rows, error) { //TODO StmtQuer
func (s *stmt) query(ctx context.Context, args []driver.NamedValue) (r driver.Rows, err error) {
var pstmt uintptr
var done int32
- if ctx != nil && ctx.Done() != nil {
- defer interruptOnDone(ctx, s.c, &done)()
+ if ctx != nil {
+ if ctxDone := ctx.Done(); ctxDone != nil {
+ select {
+ case <-ctxDone:
+ return nil, ctx.Err()
+ default:
+ }
+ defer interruptOnDone(ctx, s.c, &done)()
+ }
}
var allocs []uintptr
defer func() {
- if r == nil && err == nil {
+ if ctx != nil && atomic.LoadInt32(&done) != 0 {
+ r, err = nil, ctx.Err()
+ } else if r == nil && err == nil {
r, err = newRows(s.c, pstmt, allocs, true)
}
}()