diff options
Diffstat (limited to 'vendor/modernc.org/sqlite/sqlite.go')
| -rw-r--r-- | vendor/modernc.org/sqlite/sqlite.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/vendor/modernc.org/sqlite/sqlite.go b/vendor/modernc.org/sqlite/sqlite.go index 728e1870e..39675a68b 100644 --- a/vendor/modernc.org/sqlite/sqlite.go +++ b/vendor/modernc.org/sqlite/sqlite.go @@ -603,6 +603,10 @@ func (s *stmt) query(ctx context.Context, args []driver.NamedValue) (r driver.Ro var allocs []uintptr defer func() { + if r == nil && err == nil { + r, err = newRows(s.c, pstmt, allocs, true) + } + if pstmt != 0 { // ensure stmt finalized. e := s.c.finalize(pstmt) @@ -613,10 +617,6 @@ func (s *stmt) query(ctx context.Context, args []driver.NamedValue) (r driver.Ro err = e } } - - if r == nil && err == nil { - r, err = newRows(s.c, pstmt, allocs, true) - } }() for psql := s.psql; *(*byte)(unsafe.Pointer(psql)) != 0; { @@ -2154,7 +2154,9 @@ func functionArgs(tls *libc.TLS, argc int32, argv uintptr) []driver.Value { size := sqlite3.Xsqlite3_value_bytes(tls, valPtr) blobPtr := sqlite3.Xsqlite3_value_blob(tls, valPtr) v := make([]byte, size) - copy(v, (*libc.RawMem)(unsafe.Pointer(blobPtr))[:size:size]) + if size != 0 { + copy(v, (*libc.RawMem)(unsafe.Pointer(blobPtr))[:size:size]) + } args[i] = v default: panic(fmt.Sprintf("unexpected argument type %q passed by sqlite", valType)) |
