aboutsummaryrefslogtreecommitdiff
path: root/sqlite3.go
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2018-12-07 15:47:27 +0900
committerYasuhiro Matsumoto <mattn.jp@gmail.com>2018-12-07 16:07:16 +0900
commit03b96a53baf1987fe52b653ce0d1817e549259b8 (patch)
tree5b93db19f7703f7fdb8f3a277494e4d7e921b5a6 /sqlite3.go
parentMerge pull request #670 from mattn/close-db (diff)
downloadgolite-03b96a53baf1987fe52b653ce0d1817e549259b8.tar.gz
golite-03b96a53baf1987fe52b653ce0d1817e549259b8.tar.xz
SQLITE_OPEN_CREATE should be specified for sqlite3_open_v2 if mode is not rw
Fixes #667 Fixes #669
Diffstat (limited to 'sqlite3.go')
-rw-r--r--sqlite3.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/sqlite3.go b/sqlite3.go
index f731d20..7506522 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -990,7 +990,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
authPass := ""
authCrypt := ""
authSalt := ""
- mutex := C.int(C.SQLITE_OPEN_FULLMUTEX)
txlock := "BEGIN"
// PRAGMA's
@@ -1007,6 +1006,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
secureDelete := "DEFAULT"
synchronousMode := "NORMAL"
writableSchema := -1
+ flags := C.SQLITE_OPEN_READWRITE | C.SQLITE_OPEN_CREATE | C.SQLITE_OPEN_FULLMUTEX
pos := strings.IndexRune(dsn, '?')
if pos >= 1 {
@@ -1015,6 +1015,17 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
return nil, err
}
+ if val := params.Get("mode"); val != "" {
+ switch val {
+ case "ro":
+ flags |= C.SQLITE_OPEN_READONLY
+ case "rw":
+ flags ^= C.SQLITE_OPEN_CREATE
+ case "rwc":
+ flags |= C.SQLITE_OPEN_CREATE
+ }
+ }
+
// Authentication
if _, ok := params["_auth"]; ok {
authCreate = true
@@ -1049,9 +1060,9 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
if val := params.Get("_mutex"); val != "" {
switch strings.ToLower(val) {
case "no":
- mutex = C.SQLITE_OPEN_NOMUTEX
+ flags |= C.SQLITE_OPEN_NOMUTEX
case "full":
- mutex = C.SQLITE_OPEN_FULLMUTEX
+ flags |= C.SQLITE_OPEN_FULLMUTEX
default:
return nil, fmt.Errorf("Invalid _mutex: %v", val)
}
@@ -1338,9 +1349,8 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
var db *C.sqlite3
name := C.CString(dsn)
defer C.free(unsafe.Pointer(name))
- rv := C._sqlite3_open_v2(name, &db,
- mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
- nil)
+
+ rv := C._sqlite3_open_v2(name, &db, C.int(flags), nil)
if rv != 0 {
if db != nil {
C.sqlite3_close_v2(db)