From 1fbedab173ca3c57bbc0ed68193be8a7f44e566d Mon Sep 17 00:00:00 2001 From: mattn Date: Tue, 17 Nov 2020 01:54:21 +0900 Subject: Support vfs for Open (#877) Closes #876 --- sqlite3.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'sqlite3.go') diff --git a/sqlite3.go b/sqlite3.go index 63e1c4f..8cdceac 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -1041,6 +1041,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { secureDelete := "DEFAULT" synchronousMode := "NORMAL" writableSchema := -1 + vfsName := "" pos := strings.IndexRune(dsn, '?') if pos >= 1 { @@ -1364,6 +1365,10 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { } } + if val := params.Get("vfs"); val != "" { + vfsName = val + } + if !strings.HasPrefix(dsn, "file:") { dsn = dsn[:pos] } @@ -1372,9 +1377,14 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { var db *C.sqlite3 name := C.CString(dsn) defer C.free(unsafe.Pointer(name)) + var vfs *C.char + if vfsName != "" { + vfs = C.CString(vfsName) + defer C.free(unsafe.Pointer(vfs)) + } rv := C._sqlite3_open_v2(name, &db, mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE, - nil) + vfs) if rv != 0 { // Save off the error _before_ closing the database. // This is safe even if db is nil. -- cgit v1.2.3