mirror of
https://github.com/ncruces/go-sqlite3.git
synced 2026-01-11 21:49:13 +00:00
Text as byte slices.
This commit is contained in:
17
context.go
17
context.go
@@ -89,6 +89,16 @@ func (ctx Context) ResultText(value string) {
|
|||||||
uint64(ctx.c.api.destructor), _UTF8)
|
uint64(ctx.c.api.destructor), _UTF8)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResultRawText sets the text result of the function to a []byte.
|
||||||
|
//
|
||||||
|
// https://sqlite.org/c3ref/result_blob.html
|
||||||
|
func (ctx Context) ResultRawText(value []byte) {
|
||||||
|
ptr := ctx.c.newBytes(value)
|
||||||
|
ctx.c.call(ctx.c.api.resultText,
|
||||||
|
uint64(ctx.handle), uint64(ptr), uint64(len(value)),
|
||||||
|
uint64(ctx.c.api.destructor), _UTF8)
|
||||||
|
}
|
||||||
|
|
||||||
// ResultBlob sets the result of the function to a []byte.
|
// ResultBlob sets the result of the function to a []byte.
|
||||||
// Returning a nil slice is the same as calling [Context.ResultNull].
|
// Returning a nil slice is the same as calling [Context.ResultNull].
|
||||||
//
|
//
|
||||||
@@ -100,7 +110,7 @@ func (ctx Context) ResultBlob(value []byte) {
|
|||||||
uint64(ctx.c.api.destructor))
|
uint64(ctx.c.api.destructor))
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindZeroBlob sets the result of the function to a zero-filled, length n BLOB.
|
// ResultZeroBlob sets the result of the function to a zero-filled, length n BLOB.
|
||||||
//
|
//
|
||||||
// https://sqlite.org/c3ref/result_blob.html
|
// https://sqlite.org/c3ref/result_blob.html
|
||||||
func (ctx Context) ResultZeroBlob(n int64) {
|
func (ctx Context) ResultZeroBlob(n int64) {
|
||||||
@@ -166,10 +176,7 @@ func (ctx Context) ResultJSON(value any) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ResultError(err)
|
ctx.ResultError(err)
|
||||||
}
|
}
|
||||||
ptr := ctx.c.newBytes(data)
|
ctx.ResultRawText(data)
|
||||||
ctx.c.call(ctx.c.api.resultText,
|
|
||||||
uint64(ctx.handle), uint64(ptr), uint64(len(data)),
|
|
||||||
uint64(ctx.c.api.destructor))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResultValue sets the result of the function a copy of [Value].
|
// ResultValue sets the result of the function a copy of [Value].
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ func RegisterCollation(db *sqlite3.Conn, locale, name string) error {
|
|||||||
|
|
||||||
func upper(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
func upper(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
ctx.ResultBlob(bytes.ToUpper(arg[0].RawBlob()))
|
ctx.ResultRawText(bytes.ToUpper(arg[0].RawText()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cs, ok := ctx.GetAuxData(1).(cases.Caser)
|
cs, ok := ctx.GetAuxData(1).(cases.Caser)
|
||||||
@@ -80,12 +80,12 @@ func upper(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
|||||||
ctx.SetAuxData(1, c)
|
ctx.SetAuxData(1, c)
|
||||||
cs = c
|
cs = c
|
||||||
}
|
}
|
||||||
ctx.ResultBlob(cs.Bytes(arg[0].RawBlob()))
|
ctx.ResultRawText(cs.Bytes(arg[0].RawText()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func lower(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
func lower(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
ctx.ResultBlob(bytes.ToLower(arg[0].RawBlob()))
|
ctx.ResultRawText(bytes.ToLower(arg[0].RawText()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cs, ok := ctx.GetAuxData(1).(cases.Caser)
|
cs, ok := ctx.GetAuxData(1).(cases.Caser)
|
||||||
@@ -99,7 +99,7 @@ func lower(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
|||||||
ctx.SetAuxData(1, c)
|
ctx.SetAuxData(1, c)
|
||||||
cs = c
|
cs = c
|
||||||
}
|
}
|
||||||
ctx.ResultBlob(cs.Bytes(arg[0].RawBlob()))
|
ctx.ResultRawText(cs.Bytes(arg[0].RawText()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func regex(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
func regex(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ func ExampleConn_CreateFunction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
err = db.CreateFunction("upper", 1, sqlite3.DETERMINISTIC|sqlite3.INNOCUOUS, func(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
err = db.CreateFunction("upper", 1, sqlite3.DETERMINISTIC|sqlite3.INNOCUOUS, func(ctx sqlite3.Context, arg ...sqlite3.Value) {
|
||||||
ctx.ResultBlob(bytes.ToUpper(arg[0].RawBlob()))
|
ctx.ResultRawText(bytes.ToUpper(arg[0].RawText()))
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
20
stmt.go
20
stmt.go
@@ -181,6 +181,19 @@ func (s *Stmt) BindText(param int, value string) error {
|
|||||||
return s.c.error(r)
|
return s.c.error(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BindRawText binds a []byte to the prepared statement as text.
|
||||||
|
// The leftmost SQL parameter has an index of 1.
|
||||||
|
//
|
||||||
|
// https://sqlite.org/c3ref/bind_blob.html
|
||||||
|
func (s *Stmt) BindRawText(param int, value []byte) error {
|
||||||
|
ptr := s.c.newBytes(value)
|
||||||
|
r := s.c.call(s.c.api.bindText,
|
||||||
|
uint64(s.handle), uint64(param),
|
||||||
|
uint64(ptr), uint64(len(value)),
|
||||||
|
uint64(s.c.api.destructor), _UTF8)
|
||||||
|
return s.c.error(r)
|
||||||
|
}
|
||||||
|
|
||||||
// BindBlob binds a []byte to the prepared statement.
|
// BindBlob binds a []byte to the prepared statement.
|
||||||
// The leftmost SQL parameter has an index of 1.
|
// The leftmost SQL parameter has an index of 1.
|
||||||
// Binding a nil slice is the same as calling [Stmt.BindNull].
|
// Binding a nil slice is the same as calling [Stmt.BindNull].
|
||||||
@@ -271,12 +284,7 @@ func (s *Stmt) BindJSON(param int, value any) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ptr := s.c.newBytes(data)
|
return s.BindRawText(param, data)
|
||||||
r := s.c.call(s.c.api.bindText,
|
|
||||||
uint64(s.handle), uint64(param),
|
|
||||||
uint64(ptr), uint64(len(data)),
|
|
||||||
uint64(s.c.api.destructor), _UTF8)
|
|
||||||
return s.c.error(r)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ColumnCount returns the number of columns in a result set.
|
// ColumnCount returns the number of columns in a result set.
|
||||||
|
|||||||
Reference in New Issue
Block a user