summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/context.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/context.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/context.go228
1 files changed, 0 insertions, 228 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/context.go b/vendor/github.com/ncruces/go-sqlite3/context.go
deleted file mode 100644
index 637ddc282..000000000
--- a/vendor/github.com/ncruces/go-sqlite3/context.go
+++ /dev/null
@@ -1,228 +0,0 @@
-package sqlite3
-
-import (
- "encoding/json"
- "errors"
- "math"
- "time"
-
- "github.com/ncruces/go-sqlite3/internal/util"
-)
-
-// Context is the context in which an SQL function executes.
-// An SQLite [Context] is in no way related to a Go [context.Context].
-//
-// https://sqlite.org/c3ref/context.html
-type Context struct {
- c *Conn
- handle ptr_t
-}
-
-// Conn returns the database connection of the
-// [Conn.CreateFunction] or [Conn.CreateWindowFunction]
-// routines that originally registered the application defined function.
-//
-// https://sqlite.org/c3ref/context_db_handle.html
-func (ctx Context) Conn() *Conn {
- return ctx.c
-}
-
-// SetAuxData saves metadata for argument n of the function.
-//
-// https://sqlite.org/c3ref/get_auxdata.html
-func (ctx Context) SetAuxData(n int, data any) {
- ptr := util.AddHandle(ctx.c.ctx, data)
- ctx.c.call("sqlite3_set_auxdata_go", stk_t(ctx.handle), stk_t(n), stk_t(ptr))
-}
-
-// GetAuxData returns metadata for argument n of the function.
-//
-// https://sqlite.org/c3ref/get_auxdata.html
-func (ctx Context) GetAuxData(n int) any {
- ptr := ptr_t(ctx.c.call("sqlite3_get_auxdata", stk_t(ctx.handle), stk_t(n)))
- return util.GetHandle(ctx.c.ctx, ptr)
-}
-
-// ResultBool sets the result of the function to a bool.
-// SQLite does not have a separate boolean storage class.
-// Instead, boolean values are stored as integers 0 (false) and 1 (true).
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultBool(value bool) {
- var i int64
- if value {
- i = 1
- }
- ctx.ResultInt64(i)
-}
-
-// ResultInt sets the result of the function to an int.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultInt(value int) {
- ctx.ResultInt64(int64(value))
-}
-
-// ResultInt64 sets the result of the function to an int64.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultInt64(value int64) {
- ctx.c.call("sqlite3_result_int64",
- stk_t(ctx.handle), stk_t(value))
-}
-
-// ResultFloat sets the result of the function to a float64.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultFloat(value float64) {
- ctx.c.call("sqlite3_result_double",
- stk_t(ctx.handle), stk_t(math.Float64bits(value)))
-}
-
-// ResultText sets the result of the function to a string.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultText(value string) {
- ptr := ctx.c.newString(value)
- ctx.c.call("sqlite3_result_text_go",
- stk_t(ctx.handle), stk_t(ptr), stk_t(len(value)))
-}
-
-// ResultRawText sets the text result of the function to a []byte.
-// Returning a nil slice is the same as calling [Context.ResultNull].
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultRawText(value []byte) {
- ptr := ctx.c.newBytes(value)
- ctx.c.call("sqlite3_result_text_go",
- stk_t(ctx.handle), stk_t(ptr), stk_t(len(value)))
-}
-
-// ResultBlob sets the result of the function to a []byte.
-// Returning a nil slice is the same as calling [Context.ResultNull].
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultBlob(value []byte) {
- ptr := ctx.c.newBytes(value)
- ctx.c.call("sqlite3_result_blob_go",
- stk_t(ctx.handle), stk_t(ptr), stk_t(len(value)))
-}
-
-// ResultZeroBlob sets the result of the function to a zero-filled, length n BLOB.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultZeroBlob(n int64) {
- ctx.c.call("sqlite3_result_zeroblob64",
- stk_t(ctx.handle), stk_t(n))
-}
-
-// ResultNull sets the result of the function to NULL.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultNull() {
- ctx.c.call("sqlite3_result_null",
- stk_t(ctx.handle))
-}
-
-// ResultTime sets the result of the function to a [time.Time].
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultTime(value time.Time, format TimeFormat) {
- switch format {
- case TimeFormatDefault, TimeFormatAuto, time.RFC3339Nano:
- ctx.resultRFC3339Nano(value)
- return
- }
- switch v := format.Encode(value).(type) {
- case string:
- ctx.ResultText(v)
- case int64:
- ctx.ResultInt64(v)
- case float64:
- ctx.ResultFloat(v)
- default:
- panic(util.AssertErr())
- }
-}
-
-func (ctx Context) resultRFC3339Nano(value time.Time) {
- const maxlen = int64(len(time.RFC3339Nano)) + 5
-
- ptr := ctx.c.new(maxlen)
- buf := util.View(ctx.c.mod, ptr, maxlen)
- buf = value.AppendFormat(buf[:0], time.RFC3339Nano)
-
- ctx.c.call("sqlite3_result_text_go",
- stk_t(ctx.handle), stk_t(ptr), stk_t(len(buf)))
-}
-
-// 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://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultPointer(ptr any) {
- valPtr := util.AddHandle(ctx.c.ctx, ptr)
- ctx.c.call("sqlite3_result_pointer_go",
- stk_t(ctx.handle), stk_t(valPtr))
-}
-
-// ResultJSON sets the result of the function to the JSON encoding of value.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultJSON(value any) {
- data, err := json.Marshal(value)
- if err != nil {
- ctx.ResultError(err)
- return // notest
- }
- ctx.ResultRawText(data)
-}
-
-// ResultValue sets the result of the function to a copy of [Value].
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultValue(value Value) {
- if value.c != ctx.c {
- ctx.ResultError(MISUSE)
- return
- }
- ctx.c.call("sqlite3_result_value",
- stk_t(ctx.handle), stk_t(value.handle))
-}
-
-// ResultError sets the result of the function an error.
-//
-// https://sqlite.org/c3ref/result_blob.html
-func (ctx Context) ResultError(err error) {
- if errors.Is(err, NOMEM) {
- ctx.c.call("sqlite3_result_error_nomem", stk_t(ctx.handle))
- return
- }
-
- if errors.Is(err, TOOBIG) {
- ctx.c.call("sqlite3_result_error_toobig", stk_t(ctx.handle))
- return
- }
-
- msg, code := errorCode(err, _OK)
- if msg != "" {
- defer ctx.c.arena.mark()()
- ptr := ctx.c.arena.string(msg)
- ctx.c.call("sqlite3_result_error",
- stk_t(ctx.handle), stk_t(ptr), stk_t(len(msg)))
- }
- if code != _OK {
- ctx.c.call("sqlite3_result_error_code",
- stk_t(ctx.handle), stk_t(code))
- }
-}
-
-// VTabNoChange may return true if a column is being fetched as part
-// of an update during which the column value will not change.
-//
-// https://sqlite.org/c3ref/vtab_nochange.html
-func (ctx Context) VTabNoChange() bool {
- b := int32(ctx.c.call("sqlite3_vtab_nochange", stk_t(ctx.handle)))
- return b != 0
-}