@@ -990,7 +990,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
990
990
authPass := ""
991
991
authCrypt := ""
992
992
authSalt := ""
993
- mutex := C .int (C .SQLITE_OPEN_FULLMUTEX )
994
993
txlock := "BEGIN"
995
994
996
995
// PRAGMA's
@@ -1007,6 +1006,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
1007
1006
secureDelete := "DEFAULT"
1008
1007
synchronousMode := "NORMAL"
1009
1008
writableSchema := - 1
1009
+ flags := C .SQLITE_OPEN_READWRITE | C .SQLITE_OPEN_CREATE | C .SQLITE_OPEN_FULLMUTEX
1010
1010
1011
1011
pos := strings .IndexRune (dsn , '?' )
1012
1012
if pos >= 1 {
@@ -1015,6 +1015,17 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
1015
1015
return nil , err
1016
1016
}
1017
1017
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
+
1018
1029
// Authentication
1019
1030
if _ , ok := params ["_auth" ]; ok {
1020
1031
authCreate = true
@@ -1049,9 +1060,9 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
1049
1060
if val := params .Get ("_mutex" ); val != "" {
1050
1061
switch strings .ToLower (val ) {
1051
1062
case "no" :
1052
- mutex = C .SQLITE_OPEN_NOMUTEX
1063
+ flags | = C .SQLITE_OPEN_NOMUTEX
1053
1064
case "full" :
1054
- mutex = C .SQLITE_OPEN_FULLMUTEX
1065
+ flags | = C .SQLITE_OPEN_FULLMUTEX
1055
1066
default :
1056
1067
return nil , fmt .Errorf ("Invalid _mutex: %v" , val )
1057
1068
}
@@ -1338,9 +1349,8 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
1338
1349
var db * C.sqlite3
1339
1350
name := C .CString (dsn )
1340
1351
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 )
1344
1354
if rv != 0 {
1345
1355
if db != nil {
1346
1356
C .sqlite3_close_v2 (db )
0 commit comments