Files
sqlite3/api.go

115 lines
3.4 KiB
Go
Raw Normal View History

2023-02-18 03:43:17 +00:00
// Package sqlite3 wraps the C SQLite API.
2023-01-17 13:43:16 +00:00
package sqlite3
2023-02-10 16:42:49 +00:00
import (
"context"
2023-01-17 13:43:16 +00:00
2023-02-10 16:42:49 +00:00
"github.com/tetratelabs/wazero/api"
)
func newConn(ctx context.Context, module api.Module) (_ *Conn, err error) {
2023-01-17 13:43:16 +00:00
getFun := func(name string) api.Function {
f := module.ExportedFunction(name)
if f == nil {
2023-02-10 16:42:49 +00:00
err = noFuncErr + errorString(name)
return nil
2023-01-17 13:43:16 +00:00
}
return f
}
2023-02-10 16:42:49 +00:00
getPtr := func(name string) uint32 {
global := module.ExportedGlobal(name)
if global == nil {
err = noGlobalErr + errorString(name)
return 0
}
return memory{module}.readUint32(uint32(global.Get()))
2023-01-17 13:43:16 +00:00
}
2023-02-10 16:42:49 +00:00
c := Conn{
ctx: ctx,
2023-01-28 12:47:39 +00:00
mem: memory{module},
2023-01-17 13:43:16 +00:00
api: sqliteAPI{
malloc: getFun("malloc"),
free: getFun("free"),
2023-02-10 16:42:49 +00:00
destructor: uint64(getPtr("malloc_destructor")),
2023-01-21 12:09:54 +00:00
errcode: getFun("sqlite3_errcode"),
2023-01-17 13:43:16 +00:00
errstr: getFun("sqlite3_errstr"),
errmsg: getFun("sqlite3_errmsg"),
erroff: getFun("sqlite3_error_offset"),
open: getFun("sqlite3_open_v2"),
close: getFun("sqlite3_close"),
prepare: getFun("sqlite3_prepare_v3"),
finalize: getFun("sqlite3_finalize"),
2023-01-17 15:01:30 +00:00
reset: getFun("sqlite3_reset"),
2023-01-17 13:43:16 +00:00
step: getFun("sqlite3_step"),
2023-01-17 15:01:30 +00:00
exec: getFun("sqlite3_exec"),
clearBindings: getFun("sqlite3_clear_bindings"),
2023-02-14 18:21:18 +00:00
bindCount: getFun("sqlite3_bind_parameter_count"),
2023-02-18 00:47:56 +00:00
bindIndex: getFun("sqlite3_bind_parameter_index"),
bindName: getFun("sqlite3_bind_parameter_name"),
bindNull: getFun("sqlite3_bind_null"),
2023-01-17 13:43:16 +00:00
bindInteger: getFun("sqlite3_bind_int64"),
bindFloat: getFun("sqlite3_bind_double"),
bindText: getFun("sqlite3_bind_text64"),
bindBlob: getFun("sqlite3_bind_blob64"),
bindZeroBlob: getFun("sqlite3_bind_zeroblob64"),
2023-02-14 18:21:18 +00:00
columnCount: getFun("sqlite3_column_count"),
columnName: getFun("sqlite3_column_name"),
columnType: getFun("sqlite3_column_type"),
2023-01-17 13:43:16 +00:00
columnInteger: getFun("sqlite3_column_int64"),
columnFloat: getFun("sqlite3_column_double"),
columnText: getFun("sqlite3_column_text"),
columnBlob: getFun("sqlite3_column_blob"),
columnBytes: getFun("sqlite3_column_bytes"),
2023-02-24 14:31:41 +00:00
autocommit: getFun("sqlite3_get_autocommit"),
2023-02-14 18:21:18 +00:00
lastRowid: getFun("sqlite3_last_insert_rowid"),
changes: getFun("sqlite3_changes64"),
interrupt: getFun("sqlite3_interrupt"),
2023-01-17 13:43:16 +00:00
},
}
2023-02-10 16:42:49 +00:00
if err != nil {
return nil, err
}
return &c, nil
2023-01-17 13:43:16 +00:00
}
type sqliteAPI struct {
malloc api.Function
free api.Function
destructor uint64
2023-01-21 12:09:54 +00:00
errcode api.Function
2023-01-17 13:43:16 +00:00
errstr api.Function
errmsg api.Function
erroff api.Function
open api.Function
close api.Function
prepare api.Function
finalize api.Function
2023-01-17 15:01:30 +00:00
reset api.Function
2023-01-17 13:43:16 +00:00
step api.Function
2023-01-17 15:01:30 +00:00
exec api.Function
clearBindings api.Function
2023-02-18 00:47:56 +00:00
bindNull api.Function
2023-02-14 18:21:18 +00:00
bindCount api.Function
2023-02-18 00:47:56 +00:00
bindIndex api.Function
bindName api.Function
2023-01-17 13:43:16 +00:00
bindInteger api.Function
bindFloat api.Function
bindText api.Function
bindBlob api.Function
bindZeroBlob api.Function
2023-02-14 18:21:18 +00:00
columnCount api.Function
columnName api.Function
columnType api.Function
2023-01-17 13:43:16 +00:00
columnInteger api.Function
columnFloat api.Function
columnText api.Function
columnBlob api.Function
columnBytes api.Function
2023-02-24 14:31:41 +00:00
autocommit api.Function
2023-02-14 18:21:18 +00:00
lastRowid api.Function
changes api.Function
interrupt api.Function
2023-01-17 13:43:16 +00:00
}