mirror of
https://github.com/ncruces/go-sqlite3.git
synced 2026-01-11 21:49:13 +00:00
Tweaks.
This commit is contained in:
@@ -128,12 +128,12 @@ func getAuxBlob(ctx sqlite3.Context, arg []sqlite3.Value, write bool) (*sqlite3.
|
|||||||
return ctx.Conn().OpenBlob(db, table, column, row, write)
|
return ctx.Conn().OpenBlob(db, table, column, row, write)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setAuxBlob(ctx sqlite3.Context, blob *sqlite3.Blob, writer bool) {
|
func setAuxBlob(ctx sqlite3.Context, blob *sqlite3.Blob, open bool) {
|
||||||
// This ensures the blob is closed if db, table, column or write change.
|
// This ensures the blob is closed if db, table, column or write change.
|
||||||
ctx.SetAuxData(0, blob) // db
|
ctx.SetAuxData(0, blob) // db
|
||||||
ctx.SetAuxData(1, blob) // table
|
ctx.SetAuxData(1, blob) // table
|
||||||
ctx.SetAuxData(2, blob) // column
|
ctx.SetAuxData(2, blob) // column
|
||||||
if writer {
|
if open {
|
||||||
ctx.SetAuxData(4, blob) // write
|
ctx.SetAuxData(4, blob) // write
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
|
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
|
|||||||
@@ -218,6 +218,7 @@ int sqlite3_vtab_config_go(sqlite3 *db, int op, int constraint) {
|
|||||||
return sqlite3_vtab_config(db, op, constraint);
|
return sqlite3_vtab_config(db, op, constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static_assert(offsetof(struct sqlite3_vtab, zErrMsg) == 8, "Unexpected offset");
|
||||||
static_assert(offsetof(struct go_module, base) == 4, "Unexpected offset");
|
static_assert(offsetof(struct go_module, base) == 4, "Unexpected offset");
|
||||||
static_assert(offsetof(struct go_vtab, base) == 4, "Unexpected offset");
|
static_assert(offsetof(struct go_vtab, base) == 4, "Unexpected offset");
|
||||||
static_assert(offsetof(struct go_cursor, base) == 4, "Unexpected offset");
|
static_assert(offsetof(struct go_cursor, base) == 4, "Unexpected offset");
|
||||||
|
|||||||
5
vtab.go
5
vtab.go
@@ -628,13 +628,14 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func vtabError(ctx context.Context, mod api.Module, ptr, kind uint32, err error) uint32 {
|
func vtabError(ctx context.Context, mod api.Module, ptr, kind uint32, err error) uint32 {
|
||||||
|
const zErrMsgOffset = 8
|
||||||
msg, code := errorCode(err, ERROR)
|
msg, code := errorCode(err, ERROR)
|
||||||
if msg != "" && ptr != 0 {
|
if msg != "" && ptr != 0 {
|
||||||
switch kind {
|
switch kind {
|
||||||
case _VTAB_ERROR:
|
case _VTAB_ERROR:
|
||||||
ptr = ptr + 8 // zErrMsg
|
ptr = ptr + zErrMsgOffset // zErrMsg
|
||||||
case _CURSOR_ERROR:
|
case _CURSOR_ERROR:
|
||||||
ptr = util.ReadUint32(mod, ptr) + 8 // pVTab->zErrMsg
|
ptr = util.ReadUint32(mod, ptr) + zErrMsgOffset // pVTab->zErrMsg
|
||||||
}
|
}
|
||||||
db := ctx.Value(connKey{}).(*Conn)
|
db := ctx.Value(connKey{}).(*Conn)
|
||||||
if ptr := util.ReadUint32(mod, ptr); ptr != 0 {
|
if ptr := util.ReadUint32(mod, ptr); ptr != 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user