Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 248a1e6

Browse files
authored
Merge pull request mattn#671 from mattn/fix667
SQLITE_OPEN_CREATE should be specified for sqlite3_open_v2 if mode is...
2 parents e924752 + 03b96a5 commit 248a1e6

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

‎sqlite3.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
990990
authPass := ""
991991
authCrypt := ""
992992
authSalt := ""
993-
mutex := C.int(C.SQLITE_OPEN_FULLMUTEX)
994993
txlock := "BEGIN"
995994

996995
// PRAGMA's
@@ -1007,6 +1006,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
10071006
secureDelete := "DEFAULT"
10081007
synchronousMode := "NORMAL"
10091008
writableSchema := -1
1009+
flags := C.SQLITE_OPEN_READWRITE | C.SQLITE_OPEN_CREATE | C.SQLITE_OPEN_FULLMUTEX
10101010

10111011
pos := strings.IndexRune(dsn, '?')
10121012
if pos >= 1 {
@@ -1015,6 +1015,17 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
10151015
return nil, err
10161016
}
10171017

1018+
if val := params.Get("mode"); val != "" {
1019+
switch val {
1020+
case "ro":
1021+
flags |= C.SQLITE_OPEN_READONLY
1022+
case "rw":
1023+
flags ^= C.SQLITE_OPEN_CREATE
1024+
case "rwc":
1025+
flags |= C.SQLITE_OPEN_CREATE
1026+
}
1027+
}
1028+
10181029
// Authentication
10191030
if _, ok := params["_auth"]; ok {
10201031
authCreate = true
@@ -1049,9 +1060,9 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
10491060
if val := params.Get("_mutex"); val != "" {
10501061
switch strings.ToLower(val) {
10511062
case "no":
1052-
mutex= C.SQLITE_OPEN_NOMUTEX
1063+
flags|= C.SQLITE_OPEN_NOMUTEX
10531064
case "full":
1054-
mutex= C.SQLITE_OPEN_FULLMUTEX
1065+
flags|= C.SQLITE_OPEN_FULLMUTEX
10551066
default:
10561067
return nil, fmt.Errorf("Invalid _mutex: %v", val)
10571068
}
@@ -1338,9 +1349,8 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
13381349
var db *C.sqlite3
13391350
name := C.CString(dsn)
13401351
defer C.free(unsafe.Pointer(name))
1341-
rv := C._sqlite3_open_v2(name, &db,
1342-
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
1343-
nil)
1352+
1353+
rv := C._sqlite3_open_v2(name, &db, C.int(flags), nil)
13441354
if rv != 0 {
13451355
if db != nil {
13461356
C.sqlite3_close_v2(db)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /