diff --git a/driver/driver.go b/driver/driver.go index 5d28473..c3cdf7c 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -442,6 +442,22 @@ func (c *conn) CheckNamedValue(arg *driver.NamedValue) error { return nil } +// Deprecated: for Litestream use only; may be removed at any time. +func (c *conn) FileControlPersistWAL(schema string, mode int) (int, error) { + // notest + arg := make([]any, 1) + if mode >= 0 { + arg[0] = mode > 0 + } else { + arg = arg[:0] + } + res, err := c.Conn.FileControl(schema, sqlite3.FCNTL_PERSIST_WAL, arg...) + if res == true { + return 1, err + } + return 0, err +} + type stmt struct { *sqlite3.Stmt tmWrite sqlite3.TimeFormat diff --git a/embed/init.go b/embed/init.go index 5ffd695..275cdef 100644 --- a/embed/init.go +++ b/embed/init.go @@ -17,5 +17,7 @@ import ( var binary string func init() { - sqlite3.Binary = unsafe.Slice(unsafe.StringData(binary), len(binary)) + if sqlite3.Binary == nil { + sqlite3.Binary = unsafe.Slice(unsafe.StringData(binary), len(binary)) + } } diff --git a/litestream/modernc/go.mod b/litestream/modernc/go.mod new file mode 100644 index 0000000..7ea8b91 --- /dev/null +++ b/litestream/modernc/go.mod @@ -0,0 +1,3 @@ +module modernc.org/sqlite + +go 1.24.0 diff --git a/litestream/modernc/sqlite.go b/litestream/modernc/sqlite.go new file mode 100644 index 0000000..6611808 --- /dev/null +++ b/litestream/modernc/sqlite.go @@ -0,0 +1,20 @@ +// Package sqlite provides a shim that allows Litestream to work with the ncruces SQLite driver. +package sqlite + +import ( + "database/sql" + "slices" + + "github.com/ncruces/go-sqlite3/driver" + _ "github.com/ncruces/go-sqlite3/embed" +) + +func init() { + if !slices.Contains(sql.Drivers(), "sqlite") { + sql.Register("sqlite", &driver.SQLite{}) + } +} + +type FileControl interface { + FileControlPersistWAL(string, int) (int, error) +}