summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/func.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-10-08 09:15:09 +0000
committerLibravatar GitHub <noreply@github.com>2024-10-08 11:15:09 +0200
commit2c3f1f4ddb3b91c9a70b929aed51b4bffcc6d6ee (patch)
tree35af97aa89abc9d6f0f73d8a4c554ac55a052e46 /vendor/github.com/ncruces/go-sqlite3/func.go
parent[feature] Distribute + ingest Accepts to followers (#3404) (diff)
downloadgotosocial-2c3f1f4ddb3b91c9a70b929aed51b4bffcc6d6ee.tar.xz
[chore] update go-sqlite3 to v0.19.0 (#3406)v0.17.0-rc2
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/func.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/func.go28
1 files changed, 21 insertions, 7 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/func.go b/vendor/github.com/ncruces/go-sqlite3/func.go
index ab486e79a..7ff740df2 100644
--- a/vendor/github.com/ncruces/go-sqlite3/func.go
+++ b/vendor/github.com/ncruces/go-sqlite3/func.go
@@ -33,16 +33,23 @@ func (c *Conn) CollationNeeded(cb func(db *Conn, name string)) error {
// one or more unknown collating sequences.
func (c Conn) AnyCollationNeeded() error {
r := c.call("sqlite3_anycollseq_init", uint64(c.handle), 0, 0)
- return c.error(r)
+ if err := c.error(r); err != nil {
+ return err
+ }
+ c.collation = nil
+ return nil
}
// CreateCollation defines a new collating sequence.
//
// https://sqlite.org/c3ref/create_collation.html
func (c *Conn) CreateCollation(name string, fn func(a, b []byte) int) error {
+ var funcPtr uint32
defer c.arena.mark()()
namePtr := c.arena.string(name)
- funcPtr := util.AddHandle(c.ctx, fn)
+ if fn != nil {
+ funcPtr = util.AddHandle(c.ctx, fn)
+ }
r := c.call("sqlite3_create_collation_go",
uint64(c.handle), uint64(namePtr), uint64(funcPtr))
return c.error(r)
@@ -52,9 +59,12 @@ func (c *Conn) CreateCollation(name string, fn func(a, b []byte) int) error {
//
// https://sqlite.org/c3ref/create_function.html
func (c *Conn) CreateFunction(name string, nArg int, flag FunctionFlag, fn ScalarFunction) error {
+ var funcPtr uint32
defer c.arena.mark()()
namePtr := c.arena.string(name)
- funcPtr := util.AddHandle(c.ctx, fn)
+ if fn != nil {
+ funcPtr = util.AddHandle(c.ctx, fn)
+ }
r := c.call("sqlite3_create_function_go",
uint64(c.handle), uint64(namePtr), uint64(nArg),
uint64(flag), uint64(funcPtr))
@@ -71,10 +81,13 @@ type ScalarFunction func(ctx Context, arg ...Value)
//
// https://sqlite.org/c3ref/create_function.html
func (c *Conn) CreateWindowFunction(name string, nArg int, flag FunctionFlag, fn func() AggregateFunction) error {
+ var funcPtr uint32
defer c.arena.mark()()
- call := "sqlite3_create_aggregate_function_go"
namePtr := c.arena.string(name)
- funcPtr := util.AddHandle(c.ctx, fn)
+ if fn != nil {
+ funcPtr = util.AddHandle(c.ctx, fn)
+ }
+ call := "sqlite3_create_aggregate_function_go"
if _, ok := fn().(WindowFunction); ok {
call = "sqlite3_create_window_function_go"
}
@@ -184,11 +197,12 @@ func callbackAggregate(db *Conn, pAgg, pApp uint32) (AggregateFunction, uint32)
// We need to create the aggregate.
fn := util.GetHandle(db.ctx, pApp).(func() AggregateFunction)()
- handle := util.AddHandle(db.ctx, fn)
if pAgg != 0 {
+ handle := util.AddHandle(db.ctx, fn)
util.WriteUint32(db.mod, pAgg, handle)
+ return fn, handle
}
- return fn, handle
+ return fn, 0
}
func callbackArgs(db *Conn, arg []Value, pArg uint32) {