From 24c9b57c56ce207ce2ac10c09539212b33450a06 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Tue, 7 Nov 2023 00:50:43 +0000 Subject: [PATCH] Pointer-passing interfaces. --- context.go | 10 +++++++ driver/driver.go | 5 +++- embed/exports.txt | 3 +++ embed/sqlite3.wasm | Bin 1464329 -> 1464789 bytes ext/blob/blob.go | 59 ++++++++++++++++++++++++++++++++++++++++ ext/blob/blob_test.go | 61 ++++++++++++++++++++++++++++++++++++++++++ pointer.go | 14 ++++++++++ sqlite.go | 6 +++++ sqlite3/func.c | 16 ++++++++++- stmt.go | 12 +++++++++ value.go | 7 +++++ 11 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 ext/blob/blob.go create mode 100644 ext/blob/blob_test.go create mode 100644 pointer.go diff --git a/context.go b/context.go index b2e1a98..b0b5563 100644 --- a/context.go +++ b/context.go @@ -148,6 +148,16 @@ func (ctx Context) resultRFC3339Nano(value time.Time) { uint64(ctx.c.api.destructor), _UTF8) } +// ResultPointer sets the result of the function to NULL, just like [Context.ResultNull], +// except that it also associates ptr with that NULL value such that it can be retrieved +// within an application-defined SQL function using [Value.Pointer]. +// +// https://www.sqlite.org/c3ref/result_blob.html +func (ctx Context) ResultPointer(ptr any) { + valPtr := util.AddHandle(ctx.c.ctx, ptr) + ctx.c.call(ctx.c.api.resultPointer, uint64(valPtr)) +} + // ResultJSON sets the result of the function to the JSON encoding of value. // // https://www.sqlite.org/c3ref/result_blob.html diff --git a/driver/driver.go b/driver/driver.go index 2b733f0..33eb740 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -380,6 +380,8 @@ func (s *stmt) setupBindings(args []driver.NamedValue) error { err = s.Stmt.BindBlob(id, a) case sqlite3.ZeroBlob: err = s.Stmt.BindZeroBlob(id, int64(a)) + case interface{ Value() any }: + err = s.Stmt.BindPointer(id, a.Value()) case time.Time: err = s.Stmt.BindTime(id, a, sqlite3.TimeFormatDefault) case json.Marshaler: @@ -400,7 +402,8 @@ func (s *stmt) setupBindings(args []driver.NamedValue) error { func (s *stmt) CheckNamedValue(arg *driver.NamedValue) error { switch arg.Value.(type) { case bool, int, int64, float64, string, []byte, - sqlite3.ZeroBlob, time.Time, json.Marshaler, nil: + sqlite3.ZeroBlob, interface{ Value() any }, + time.Time, json.Marshaler, nil: return nil default: return driver.ErrSkip diff --git a/embed/exports.txt b/embed/exports.txt index b96d40a..51a4d1c 100644 --- a/embed/exports.txt +++ b/embed/exports.txt @@ -25,6 +25,7 @@ sqlite3_bind_double sqlite3_bind_text64 sqlite3_bind_blob64 sqlite3_bind_zeroblob64 +sqlite3_bind_pointer_go sqlite3_column_count sqlite3_column_name sqlite3_column_type @@ -64,12 +65,14 @@ sqlite3_value_double sqlite3_value_text sqlite3_value_blob sqlite3_value_bytes +sqlite3_value_pointer_go sqlite3_result_null sqlite3_result_int64 sqlite3_result_double sqlite3_result_text64 sqlite3_result_blob64 sqlite3_result_zeroblob64 +sqlite3_result_pointer_go sqlite3_result_value sqlite3_result_error sqlite3_result_error_code diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 69019535486edd136d80878c185fe1a3f2634b3f..3e3ea0e00259d38f1a1b0d23b172021fab0e9321 100755 GIT binary patch delta 161480 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%0Dy>0m2T{3F=5B5xvs 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%0D~;B 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 NZ9BAPo&m{!{$F-durB}r delta 161045 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 diff --git a/ext/blob/blob.go b/ext/blob/blob.go new file mode 100644 index 0000000..e9a6e79 --- /dev/null +++ b/ext/blob/blob.go @@ -0,0 +1,59 @@ +// Package blob provides an alternative interface to incremental BLOB I/O. +package blob + +import ( + "errors" + + "github.com/ncruces/go-sqlite3" +) + +// Register registers the blob_open SQL function. +func Register(db *sqlite3.Conn) { + db.CreateFunction("blob_open", -1, + sqlite3.DETERMINISTIC|sqlite3.DIRECTONLY, openBlob) +} + +func openBlob(ctx sqlite3.Context, arg ...sqlite3.Value) { + if len(arg) < 6 { + ctx.ResultError(errors.New("wrong number of arguments to function blob_open()")) + return + } + + row := arg[3].Int64() + + var err error + blob, ok := ctx.GetAuxData(0).(*sqlite3.Blob) + if ok { + err = blob.Reopen(row) + if errors.Is(err, sqlite3.MISUSE) { + // Blob was closed (db, table or column changed). + ok = false + } + } + + if !ok { + db := arg[0].Text() + table := arg[1].Text() + column := arg[2].Text() + write := arg[4].Bool() + blob, err = ctx.Conn().OpenBlob(db, table, column, row, write) + } + if err != nil { + ctx.ResultError(err) + return + } + + fn := arg[5].Pointer().(OpenCallback) + err = fn(blob, arg[6:]...) + if err != nil { + ctx.ResultError(err) + return + } + + // This ensures the blob is closed if db, table or column change. + ctx.SetAuxData(0, blob) + ctx.SetAuxData(1, blob) + ctx.SetAuxData(2, blob) +} + +type OpenCallback func(*sqlite3.Blob, ...sqlite3.Value) error diff --git a/ext/blob/blob_test.go b/ext/blob/blob_test.go new file mode 100644 index 0000000..b2265f2 --- /dev/null +++ b/ext/blob/blob_test.go @@ -0,0 +1,61 @@ +package blob_test + +import ( + "io" + "log" + "os" + + "github.com/ncruces/go-sqlite3" + "github.com/ncruces/go-sqlite3/driver" + _ "github.com/ncruces/go-sqlite3/embed" + "github.com/ncruces/go-sqlite3/ext/blob" +) + +func Example() { + // Open the database, registering the extension. + db, err := driver.Open(":memory:", func(conn *sqlite3.Conn) error { + blob.Register(conn) + return nil + }) + + if err != nil { + log.Fatal(err) + } + defer os.Remove("demo.db") + defer db.Close() + + _, err = db.Exec(`CREATE TABLE IF NOT EXISTS test (col)`) + if err != nil { + log.Fatal(err) + } + + const message = "Hello BLOB!" + + // Create the BLOB. + _, err = db.Exec(`INSERT INTO test VALUES (?)`, sqlite3.ZeroBlob(len(message))) + if err != nil { + log.Fatal(err) + } + + // Write the BLOB. + _, err = db.Exec(`SELECT blob_open('main', 'test', 'col', last_insert_rowid(), true, ?)`, + sqlite3.Pointer[blob.OpenCallback](func(blob *sqlite3.Blob, _ ...sqlite3.Value) error { + _, err = io.WriteString(blob, message) + return err + })) + if err != nil { + log.Fatal(err) + } + + // Read the BLOB. + _, err = db.Exec(`SELECT blob_open('main', 'test', 'col', rowid, false, ?) FROM test`, + sqlite3.Pointer[blob.OpenCallback](func(blob *sqlite3.Blob, _ ...sqlite3.Value) error { + _, err = io.Copy(os.Stdout, blob) + return err + })) + if err != nil { + log.Fatal(err) + } + // Output: + // Hello BLOB! +} diff --git a/pointer.go b/pointer.go new file mode 100644 index 0000000..cf5a4d8 --- /dev/null +++ b/pointer.go @@ -0,0 +1,14 @@ +package sqlite3 + +// Pointer returns a pointer to a value +// that can be used as an argument to +// [database/sql.DB.Exec] and similar methods. +// +// https://www.sqlite.org/bindptr.html +func Pointer[T any](val T) any { + return pointer[T]{val} +} + +type pointer[T any] struct{ val T } + +func (p pointer[T]) Value() any { return p.val } diff --git a/sqlite.go b/sqlite.go index bbf900f..4dc68cd 100644 --- a/sqlite.go +++ b/sqlite.go @@ -132,6 +132,7 @@ func instantiateSQLite() (sqlt *sqlite, err error) { bindText: getFun("sqlite3_bind_text64"), bindBlob: getFun("sqlite3_bind_blob64"), bindZeroBlob: getFun("sqlite3_bind_zeroblob64"), + bindPointer: getFun("sqlite3_bind_pointer_go"), columnCount: getFun("sqlite3_column_count"), columnName: getFun("sqlite3_column_name"), columnType: getFun("sqlite3_column_type"), @@ -169,12 +170,14 @@ func instantiateSQLite() (sqlt *sqlite, err error) { valueText: getFun("sqlite3_value_text"), valueBlob: getFun("sqlite3_value_blob"), valueBytes: getFun("sqlite3_value_bytes"), + valuePointer: getFun("sqlite3_value_pointer_go"), resultNull: getFun("sqlite3_result_null"), resultInteger: getFun("sqlite3_result_int64"), resultFloat: getFun("sqlite3_result_double"), resultText: getFun("sqlite3_result_text64"), resultBlob: getFun("sqlite3_result_blob64"), resultZeroBlob: getFun("sqlite3_result_zeroblob64"), + resultPointer: getFun("sqlite3_result_pointer_go"), resultValue: getFun("sqlite3_result_value"), resultError: getFun("sqlite3_result_error"), resultErrorCode: getFun("sqlite3_result_error_code"), @@ -353,6 +356,7 @@ type sqliteAPI struct { bindText api.Function bindBlob api.Function bindZeroBlob api.Function + bindPointer api.Function columnCount api.Function columnName api.Function columnType api.Function @@ -390,12 +394,14 @@ type sqliteAPI struct { valueText api.Function valueBlob api.Function valueBytes api.Function + valuePointer api.Function resultNull api.Function resultInteger api.Function resultFloat api.Function resultText api.Function resultBlob api.Function resultZeroBlob api.Function + resultPointer api.Function resultValue api.Function resultError api.Function resultErrorCode api.Function diff --git a/sqlite3/func.c b/sqlite3/func.c index 8451033..f7241fa 100644 --- a/sqlite3/func.c +++ b/sqlite3/func.c @@ -38,4 +38,18 @@ int sqlite3_create_window_function_go(sqlite3 *db, const char *zName, int nArg, void sqlite3_set_auxdata_go(sqlite3_context *ctx, int iArg, void *pAux) { sqlite3_set_auxdata(ctx, iArg, pAux, go_destroy); -} \ No newline at end of file +} + +#define GO_POINTER_TYPE "github.com/ncruces/go-sqlite3.Pointer" + +int sqlite3_bind_pointer_go(sqlite3_stmt *stmt, int i, void *pApp) { + return sqlite3_bind_pointer(stmt, i, pApp, GO_POINTER_TYPE, go_destroy); +} + +void sqlite3_result_pointer_go(sqlite3_context *ctx, void *pApp) { + sqlite3_result_pointer(ctx, pApp, GO_POINTER_TYPE, go_destroy); +} + +void *sqlite3_value_pointer_go(sqlite3_value *val) { + return sqlite3_value_pointer(val, GO_POINTER_TYPE); +} diff --git a/stmt.go b/stmt.go index 04a91ec..67b44db 100644 --- a/stmt.go +++ b/stmt.go @@ -250,6 +250,18 @@ func (s *Stmt) bindRFC3339Nano(param int, value time.Time) error { return s.c.error(r) } +// BindPointer binds a NULL to the prepared statement, just like [Stmt.BindNull], +// but it also associates ptr with that NULL value such that it can be retrieved +// within an application-defined SQL function using [Value.Pointer]. +// +// https://www.sqlite.org/c3ref/bind_blob.html +func (s *Stmt) BindPointer(param int, ptr any) error { + valPtr := util.AddHandle(s.c.ctx, ptr) + r := s.c.call(s.c.api.bindPointer, + uint64(s.handle), uint64(param), uint64(valPtr)) + return s.c.error(r) +} + // BindJSON binds the JSON encoding of value to the prepared statement. // The leftmost SQL parameter has an index of 1. // diff --git a/value.go b/value.go index 0fcc5ef..5da5ac8 100644 --- a/value.go +++ b/value.go @@ -126,6 +126,13 @@ func (v Value) rawBytes(ptr uint32) []byte { return util.View(v.mod, ptr, r) } +// Pointer gets the pointer associated with this value, +// or nil if it has no associated pointer. +func (v Value) Pointer() any { + r := v.call(v.api.valuePointer, uint64(v.handle)) + return util.GetHandle(v.ctx, uint32(r)) +} + // JSON parses a JSON-encoded value // and stores the result in the value pointed to by ptr. func (v Value) JSON(ptr any) error {