Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge upstream #27

Merged
merged 10 commits into from
Jan 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,5 @@ jobs:

- name: Run example - simple
run: |
cd ./_example/simple
docker build -t simple .
docker build -t simple -f ./_example/simple/Dockerfile .
docker run simple | grep 99\ こんにちは世界099
81 changes: 81 additions & 0 deletions _example/json/json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package main

import (
"database/sql"
"database/sql/driver"
"encoding/json"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)

type Tag struct {
Name string `json:"name"`
Country string `json:"country"`
}

func (t *Tag) Scan(value interface{}) error {
return json.Unmarshal([]byte(value.(string)), t)
}

func (t *Tag) Value() (driver.Value, error) {
b, err := json.Marshal(t)
return string(b), err
}

func main() {
os.Remove("./foo.db")

db, err := sql.Open("sqlite3", "./foo.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()

_, err = db.Exec(`create table foo (tag jsonb)`)
if err != nil {
log.Fatal(err)
}

stmt, err := db.Prepare("insert into foo(tag) values(?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
_, err = stmt.Exec(`{"name": "mattn", "country": "japan"}`)
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(`{"name": "michael", "country": "usa"}`)
if err != nil {
log.Fatal(err)
}

var country string
err = db.QueryRow("select tag->>'country' from foo where tag->>'name' = 'mattn'").Scan(&country)
if err != nil {
log.Fatal(err)
}
fmt.Println(country)

var tag Tag
err = db.QueryRow("select tag from foo where tag->>'name' = 'mattn'").Scan(&tag)
if err != nil {
log.Fatal(err)
}

fmt.Println(tag.Name)

tag.Country = "日本"
_, err = db.Exec(`update foo set tag = ? where tag->>'name' == 'mattn'`, &tag)
if err != nil {
log.Fatal(err)
}

err = db.QueryRow("select tag->>'country' from foo where tag->>'name' = 'mattn'").Scan(&country)
if err != nil {
log.Fatal(err)
}
fmt.Println(country)
}
6 changes: 3 additions & 3 deletions _example/limit/limit.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import (
"github.com/mattn/go-sqlite3"
)

func createBulkInsertQuery(n int, start int) (query string, args []interface{}) {
func createBulkInsertQuery(n int, start int) (query string, args []any) {
values := make([]string, n)
args = make([]interface{}, n*2)
args = make([]any, n*2)
pos := 0
for i := 0; i < n; i++ {
values[i] = "(?, ?)"
Expand All @@ -27,7 +27,7 @@ func createBulkInsertQuery(n int, start int) (query string, args []interface{})
return
}

func bulkInsert(db *sql.DB, query string, args []interface{}) (err error) {
func bulkInsert(db *sql.DB, query string, args []any) (err error) {
stmt, err := db.Prepare(query)
if err != nil {
return
Expand Down
4 changes: 3 additions & 1 deletion _example/simple/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# -----------------------------------------------------------------------------
# Build Stage
# -----------------------------------------------------------------------------
FROM golang:alpine AS build
FROM golang:alpine3.18 AS build

# Important:
# Because this is a CGO enabled package, you are required to set it as 1.
Expand All @@ -26,7 +26,9 @@ WORKDIR /workspace
COPY . /workspace/

RUN \
cd _example/simple && \
go mod init github.com/mattn/sample && \
go mod edit -replace=github.com/mattn/go-sqlite3=../.. && \
go mod tidy && \
go install -ldflags='-s -w -extldflags "-static"' ./simple.go

Expand Down
2 changes: 1 addition & 1 deletion _example/vtable/vtable.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (vc *ghRepoCursor) Column(c *sqlite3.SQLiteContext, col int) error {
return nil
}

func (vc *ghRepoCursor) Filter(idxNum int, idxStr string, vals []interface{}) error {
func (vc *ghRepoCursor) Filter(idxNum int, idxStr string, vals []any) error {
vc.index = 0
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion _example/vtable_eponymous_only/vtable.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ func (vc *seriesCursor) Column(c *sqlite3.SQLiteContext, col int) error {
return nil
}

func (vc *seriesCursor) Filter(idxNum int, idxStr string, vals []interface{}) error {
func (vc *seriesCursor) Filter(idxNum int, idxStr string, vals []any) error {
switch {
case len(vals) < 1:
vc.seriesTable.start = 0
Expand Down
1 change: 1 addition & 0 deletions backup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

//go:build cgo
// +build cgo

package sqlite3
Expand Down
16 changes: 8 additions & 8 deletions callback.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,13 @@ func preUpdateHookTrampoline(handle unsafe.Pointer, dbHandle uintptr, op int, db
// Use handles to avoid passing Go pointers to C.
type handleVal struct {
db *SQLiteConn
val interface{}
val any
}

var handleLock sync.Mutex
var handleVals = make(map[unsafe.Pointer]handleVal)

func newHandle(db *SQLiteConn, v interface{}) unsafe.Pointer {
func newHandle(db *SQLiteConn, v any) unsafe.Pointer {
handleLock.Lock()
defer handleLock.Unlock()
val := handleVal{db: db, val: v}
Expand All @@ -124,7 +124,7 @@ func lookupHandleVal(handle unsafe.Pointer) handleVal {
return handleVals[handle]
}

func lookupHandle(handle unsafe.Pointer) interface{} {
func lookupHandle(handle unsafe.Pointer) any {
return lookupHandleVal(handle).val
}

Expand Down Expand Up @@ -238,7 +238,7 @@ func callbackArg(typ reflect.Type) (callbackArgConverter, error) {
switch typ.Kind() {
case reflect.Interface:
if typ.NumMethod() != 0 {
return nil, errors.New("the only supported interface type is interface{}")
return nil, errors.New("the only supported interface type is any")
}
return callbackArgGeneric, nil
case reflect.Slice:
Expand Down Expand Up @@ -360,11 +360,11 @@ func callbackRetGeneric(ctx *C.sqlite3_context, v reflect.Value) error {
}

cb, err := callbackRet(v.Elem().Type())
if err != nil {
return err
}
if err != nil {
return err
}

return cb(ctx, v.Elem())
return cb(ctx, v.Elem())
}

func callbackRet(typ reflect.Type) (callbackRetConverter, error) {
Expand Down
5 changes: 3 additions & 2 deletions callback_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

//go:build cgo
// +build cgo

package sqlite3
Expand Down Expand Up @@ -53,7 +54,7 @@ func TestCallbackArgCast(t *testing.T) {

func TestCallbackConverters(t *testing.T) {
tests := []struct {
v interface{}
v any
err bool
}{
// Unfortunately, we can't tell which converter was returned,
Expand Down Expand Up @@ -104,7 +105,7 @@ func TestCallbackConverters(t *testing.T) {
}

func TestCallbackReturnAny(t *testing.T) {
udf := func() interface{} {
udf := func() any {
return 1
}

Expand Down
10 changes: 5 additions & 5 deletions convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ var errNilPtr = errors.New("destination pointer is nil") // embedded in descript
// convertAssign copies to dest the value in src, converting it if possible.
// An error is returned if the copy would result in loss of information.
// dest should be a pointer type.
func convertAssign(dest, src interface{}) error {
func convertAssign(dest, src any) error {
// Common cases, without reflect.
switch s := src.(type) {
case string:
Expand Down Expand Up @@ -55,7 +55,7 @@ func convertAssign(dest, src interface{}) error {
}
*d = string(s)
return nil
case *interface{}:
case *any:
if d == nil {
return errNilPtr
}
Expand Down Expand Up @@ -97,7 +97,7 @@ func convertAssign(dest, src interface{}) error {
}
case nil:
switch d := dest.(type) {
case *interface{}:
case *any:
if d == nil {
return errNilPtr
}
Expand Down Expand Up @@ -149,7 +149,7 @@ func convertAssign(dest, src interface{}) error {
*d = bv.(bool)
}
return err
case *interface{}:
case *any:
*d = src
return nil
}
Expand Down Expand Up @@ -256,7 +256,7 @@ func cloneBytes(b []byte) []byte {
return c
}

func asString(src interface{}) string {
func asString(src any) string {
switch v := src.(type) {
case string:
return v
Expand Down
Loading
Loading