From 2996e7742036657ee8674d3fd0ffd3c34bd6c924 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Wed, 24 Jul 2024 12:37:35 +0100 Subject: [PATCH] Implement file control. (#123) --- .github/workflows/test.yml | 2 +- config.go | 94 ++++++++++++++++++++++++ conn.go | 1 - const.go | 18 +++++ embed/exports.txt | 1 + embed/sqlite3.wasm | Bin 1364460 -> 1364858 bytes tests/conn_test.go | 142 +++++++++++++++++++++++++++++++++++++ 7 files changed, 256 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c5751bc..14590d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -59,7 +59,7 @@ jobs: - name: Test GORM run: gormlite/test.sh - - name: Test coverage + - name: Collect coverage run: | go install github.com/dave/courtney@latest courtney diff --git a/config.go b/config.go index 0342be7..84f0881 100644 --- a/config.go +++ b/config.go @@ -4,6 +4,7 @@ import ( "context" "github.com/ncruces/go-sqlite3/internal/util" + "github.com/ncruces/go-sqlite3/vfs" "github.com/tetratelabs/wazero/api" ) @@ -56,6 +57,99 @@ func logCallback(ctx context.Context, mod api.Module, _, iCode, zMsg uint32) { } } +// FileControl allows low-level control of database files. +// Only a subset of opcodes are supported. +// +// https://sqlite.org/c3ref/file_control.html +func (c *Conn) FileControl(schema string, op FcntlOpcode, arg ...any) (any, error) { + defer c.arena.mark()() + + var schemaPtr uint32 + if schema != "" { + schemaPtr = c.arena.string(schema) + } + + switch op { + case FCNTL_RESET_CACHE: + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), 0) + return nil, c.error(r) + + case FCNTL_PERSIST_WAL, FCNTL_POWERSAFE_OVERWRITE: + var flag int + switch { + case len(arg) == 0: + flag = -1 + case arg[0]: + flag = 1 + } + ptr := c.arena.new(4) + util.WriteUint32(c.mod, ptr, uint32(flag)) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + return util.ReadUint32(c.mod, ptr) != 0, c.error(r) + + case FCNTL_CHUNK_SIZE: + ptr := c.arena.new(4) + util.WriteUint32(c.mod, ptr, uint32(arg[0].(int))) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + return nil, c.error(r) + + case FCNTL_RESERVE_BYTES: + bytes := -1 + if len(arg) > 0 { + bytes = arg[0].(int) + } + ptr := c.arena.new(4) + util.WriteUint32(c.mod, ptr, uint32(bytes)) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + return int(util.ReadUint32(c.mod, ptr)), c.error(r) + + case FCNTL_DATA_VERSION: + ptr := c.arena.new(4) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + return util.ReadUint32(c.mod, ptr), c.error(r) + + case FCNTL_LOCKSTATE: + ptr := c.arena.new(4) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + return vfs.LockLevel(util.ReadUint32(c.mod, ptr)), c.error(r) + + case FCNTL_VFS_POINTER: + ptr := c.arena.new(4) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + const zNameOffset = 16 + ptr = util.ReadUint32(c.mod, ptr) + ptr = util.ReadUint32(c.mod, ptr+zNameOffset) + name := util.ReadString(c.mod, ptr, _MAX_NAME) + return vfs.Find(name), c.error(r) + + case FCNTL_FILE_POINTER, FCNTL_JOURNAL_POINTER: + ptr := c.arena.new(4) + r := c.call("sqlite3_file_control", + uint64(c.handle), uint64(schemaPtr), + uint64(op), uint64(ptr)) + const fileHandleOffset = 4 + ptr = util.ReadUint32(c.mod, ptr) + ptr = util.ReadUint32(c.mod, ptr+fileHandleOffset) + return util.GetHandle(c.ctx, ptr), c.error(r) + } + + return nil, MISUSE +} + // Limit allows the size of various constructs to be // limited on a connection by connection basis. // diff --git a/conn.go b/conn.go index 39870b1..78efc0a 100644 --- a/conn.go +++ b/conn.go @@ -227,7 +227,6 @@ func (c *Conn) Filename(schema string) *vfs.Filename { defer c.arena.mark()() ptr = c.arena.string(schema) } - r := c.call("sqlite3_db_filename", uint64(c.handle), uint64(ptr)) return vfs.OpenFilename(c.ctx, c.mod, uint32(r), vfs.OPEN_MAIN_DB) } diff --git a/const.go b/const.go index 2bb5365..a3bd395 100644 --- a/const.go +++ b/const.go @@ -229,6 +229,24 @@ const ( DBCONFIG_REVERSE_SCANORDER DBConfig = 1019 ) +// FcntlOpcode are the available opcodes for [Conn.FileControl]. +// +// https://sqlite.org/c3ref/c_fcntl_begin_atomic_write.html +type FcntlOpcode uint32 + +const ( + FCNTL_LOCKSTATE FcntlOpcode = 1 + FCNTL_CHUNK_SIZE FcntlOpcode = 6 + FCNTL_FILE_POINTER FcntlOpcode = 7 + FCNTL_PERSIST_WAL FcntlOpcode = 10 + FCNTL_POWERSAFE_OVERWRITE FcntlOpcode = 13 + FCNTL_VFS_POINTER FcntlOpcode = 27 + FCNTL_JOURNAL_POINTER FcntlOpcode = 28 + FCNTL_DATA_VERSION FcntlOpcode = 35 + FCNTL_RESERVE_BYTES FcntlOpcode = 38 + FCNTL_RESET_CACHE FcntlOpcode = 42 +) + // LimitCategory are the available run-time limit categories. // // https://sqlite.org/c3ref/c_limit_attached.html diff --git a/embed/exports.txt b/embed/exports.txt index b3cb158..f9c4761 100644 --- a/embed/exports.txt +++ b/embed/exports.txt @@ -66,6 +66,7 @@ sqlite3_errmsg sqlite3_error_offset sqlite3_errstr sqlite3_exec +sqlite3_file_control sqlite3_filename_database sqlite3_filename_journal sqlite3_filename_wal diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index cc5776733fc4ef3492a9c35ce1077855adda3abf..4700bbf9171a2fc54a9fc6acef83ec408a3dacd7 100755 GIT binary patch delta 60242 zcmbrmb%0gX{s(&2?wr}v!{j-K?vN5t*notJfQo`5Js`u-a20EY5QdHeEV{cx*@U#x z-6=zNr{w#reP#gf{k`|k!+U3)y?TB7`(59?Z%qH}>8#I|RF?S%`n}~<Yf3lIZ6!LVqGei2 z^Da$WwC&IelXUgmQNnXt{?k0IdrH$5X&qa5u8RLv+b!k$Zk`*$>#b(@?ICtc>FT)~ z=ou0dd+*Ibf~{>kbSqohGcvFwBr5*Fn+*gTJ9KRMZSxLoQald>Ss{_d*UA62VCya^ zDV|44RL)yUY5b(dMkvS{nRQF&Yz9PPcM0S0vj@?_NrFi-VURW`?`u)#rF2c@>bm_>* zsE<6E|J&Z9Q;Mhm|5SHq-af@MK#lpYO|(jBnbwVs7#J8FmP`f(7KSB|!GRrNiLpc8 z%)y8%2SY;xufn1Wk5FHu)ol!tL_iJ8ncuB-kwo{8ij0o+jQXz;F12_@2Reku5gO

ewNzhi80%L`2d_qa&kv&qS4W>=zjy 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 Z(AGvvXs^_pFHqk*YMpU>v;J<<{{aeUhIs%0 diff --git a/tests/conn_test.go b/tests/conn_test.go index aba68c1..0b85f79 100644 --- a/tests/conn_test.go +++ b/tests/conn_test.go @@ -12,6 +12,7 @@ import ( "github.com/ncruces/go-sqlite3" _ "github.com/ncruces/go-sqlite3/embed" _ "github.com/ncruces/go-sqlite3/internal/testcfg" + "github.com/ncruces/go-sqlite3/vfs" _ "github.com/ncruces/go-sqlite3/vfs/memdb" ) @@ -337,6 +338,147 @@ func TestConn_ConfigLog(t *testing.T) { } } +func TestConn_FileControl(t *testing.T) { + t.Parallel() + + file := filepath.Join(t.TempDir(), "test.db") + db, err := sqlite3.Open(file) + if err != nil { + t.Fatal(err) + } + defer db.Close() + + t.Run("MISUSE", func(t *testing.T) { + _, err := db.FileControl("main", 0) + if !errors.Is(err, sqlite3.MISUSE) { + t.Errorf("got %v, want MISUSE", err) + } + }) + t.Run("FCNTL_RESET_CACHE", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_RESET_CACHE) + if err != nil { + t.Fatal(err) + } + if o != nil { + t.Errorf("got %v, want nil", o) + } + }) + + t.Run("FCNTL_PERSIST_WAL", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_PERSIST_WAL) + if err != nil { + t.Fatal(err) + } + if o != false { + t.Errorf("got %v, want false", o) + } + + o, err = db.FileControl("", sqlite3.FCNTL_PERSIST_WAL, true) + if err != nil { + t.Fatal(err) + } + if o != true { + t.Errorf("got %v, want true", o) + } + + o, err = db.FileControl("", sqlite3.FCNTL_PERSIST_WAL) + if err != nil { + t.Fatal(err) + } + if o != true { + t.Errorf("got %v, want true", o) + } + }) + + t.Run("FCNTL_CHUNK_SIZE", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_CHUNK_SIZE, 1024*1024) + if !errors.Is(err, sqlite3.NOTFOUND) { + t.Errorf("got %v, want NOTFOUND", err) + } + if o != nil { + t.Errorf("got %v, want nil", o) + } + }) + + t.Run("FCNTL_RESERVE_BYTES", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_RESERVE_BYTES, 4) + if err != nil { + t.Fatal(err) + } + if o != 0 { + t.Errorf("got %v, want 0", o) + } + + o, err = db.FileControl("", sqlite3.FCNTL_RESERVE_BYTES) + if err != nil { + t.Fatal(err) + } + if o != 4 { + t.Errorf("got %v, want 4", o) + } + }) + + t.Run("FCNTL_DATA_VERSION", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_DATA_VERSION) + if err != nil { + t.Fatal(err) + } + if o != uint32(2) { + t.Errorf("got %v, want 2", o) + } + }) + + t.Run("FCNTL_VFS_POINTER", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_VFS_POINTER) + if err != nil { + t.Fatal(err) + } + if o != vfs.Find("os") { + t.Errorf("got %v, want os", o) + } + }) + + t.Run("FCNTL_FILE_POINTER", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_FILE_POINTER) + if err != nil { + t.Fatal(err) + } + if _, ok := o.(vfs.File); !ok { + t.Errorf("got %v, want File", o) + } + }) + + t.Run("FCNTL_JOURNAL_POINTER", func(t *testing.T) { + o, err := db.FileControl("", sqlite3.FCNTL_JOURNAL_POINTER) + if err != nil { + t.Fatal(err) + } + if o != nil { + t.Errorf("got %v, want nil", o) + } + }) + + t.Run("FCNTL_LOCKSTATE", func(t *testing.T) { + if !vfs.SupportsFileLocking { + t.Skip("skipping without locks") + } + + txn, err := db.BeginExclusive() + if err != nil { + t.Fatal(err) + } + defer txn.End(&err) + + o, err := db.FileControl("", sqlite3.FCNTL_LOCKSTATE) + if err != nil { + t.Fatal(err) + } + if o != vfs.LOCK_EXCLUSIVE { + t.Errorf("got %v, want LOCK_EXCLUSIVE", o) + } + }) +} + func TestConn_Limit(t *testing.T) { t.Parallel()