diff options
author | EuAndreh <eu@euandre.org> | 2024-09-12 19:36:38 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-09-12 19:36:38 -0300 |
commit | 6ec63b8727eb1956b6353ba8ffc205ae7181cd57 (patch) | |
tree | 2bc5968155ecd7579bcc7a69b884d3789b1ec259 | |
parent | tests/golite.go: Remove auth-related code and tests (diff) | |
download | golite-6ec63b8727eb1956b6353ba8ffc205ae7181cd57.tar.gz golite-6ec63b8727eb1956b6353ba8ffc205ae7181cd57.tar.xz |
src/golite.go: Enforce foreign_keys=ON
-rw-r--r-- | src/golite.go | 37 | ||||
-rw-r--r-- | tests/golite.go | 30 |
2 files changed, 6 insertions, 61 deletions
diff --git a/src/golite.go b/src/golite.go index 00cbbc7..7c142df 100644 --- a/src/golite.go +++ b/src/golite.go @@ -2208,7 +2208,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { busyTimeout := 5000 caseSensitiveLike := -1 deferForeignKeys := -1 - foreignKeys := -1 ignoreCheckConstraints := -1 var journalMode string lockingMode := "NORMAL" @@ -2353,28 +2352,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { } } - // Foreign Keys (_foreign_keys | _fk) - // - // https://www.sqlite.org/pragma.html#pragma_foreign_keys - // - pkey = "" // Reset pkey - if _, ok := params["_foreign_keys"]; ok { - pkey = "_foreign_keys" - } - if _, ok := params["_fk"]; ok { - pkey = "_fk" - } - if val := params.Get(pkey); val != "" { - switch strings.ToLower(val) { - case "0", "no", "false", "off": - foreignKeys = 0 - case "1", "yes", "true", "on": - foreignKeys = 1 - default: - return nil, fmt.Errorf("Invalid _foreign_keys: %v, expecting boolean value of '0 1 false true no yes off on'", val) - } - } - // Ignore CHECK Constrains (_ignore_check_constraints) // // https://www.sqlite.org/pragma.html#pragma_ignore_check_constraints @@ -2580,11 +2557,17 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { return nil } + // FIXME: these should be compiled into SQLite // Busy timeout if err := exec(fmt.Sprintf("PRAGMA busy_timeout = %d;", busyTimeout)); err != nil { C.sqlite3_close_v2(db) return nil, err } + // Foreign Keys + if err := exec("PRAGMA foreign_keys = ON;"); err != nil { + C.sqlite3_close_v2(db) + return nil, err + } // Create connection to SQLite conn := &SQLiteConn{db: db, loc: loc, txlock: txlock} @@ -2618,14 +2601,6 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { } } - // Foreign Keys - if foreignKeys > -1 { - if err := exec(fmt.Sprintf("PRAGMA foreign_keys = %d;", foreignKeys)); err != nil { - C.sqlite3_close_v2(db) - return nil, err - } - } - // Ignore CHECK Constraints if ignoreCheckConstraints > -1 { if err := exec(fmt.Sprintf("PRAGMA ignore_check_constraints = %d;", ignoreCheckConstraints)); err != nil { diff --git a/tests/golite.go b/tests/golite.go index 7eddd58..cde5ad5 100644 --- a/tests/golite.go +++ b/tests/golite.go @@ -2590,35 +2590,6 @@ func TestReadonly(t *testing.T) { } } -func TestForeignKeys(t *testing.T) { - cases := map[string]bool{ - "?_foreign_keys=1": true, - "?_foreign_keys=0": false, - } - for option, want := range cases { - fname := TempFilename(t) - uri := "file:" + fname + option + "&mode=memory" - db, err := sql.Open("sqlite3", uri) - if err != nil { - os.Remove(fname) - t.Errorf("sql.Open(\"sqlite3\", %q): %v", uri, err) - continue - } - var enabled bool - err = db.QueryRow("PRAGMA foreign_keys;").Scan(&enabled) - db.Close() - os.Remove(fname) - if err != nil { - t.Errorf("query foreign_keys for %s: %v", uri, err) - continue - } - if enabled != want { - t.Errorf("\"PRAGMA foreign_keys;\" for %q = %t; want %t", uri, enabled, want) - continue - } - } -} - func TestDeferredForeignKey(t *testing.T) { fname := TempFilename(t) uri := "file:" + fname + "?_foreign_keys=1&mode=memory" @@ -4904,7 +4875,6 @@ func MainTest() { { "TestOpenWithVFS", TestOpenWithVFS }, { "TestOpenNoCreate", TestOpenNoCreate }, { "TestReadonly", TestReadonly }, - { "TestForeignKeys", TestForeignKeys }, { "TestDeferredForeignKey", TestDeferredForeignKey }, { "TestRecursiveTriggers", TestRecursiveTriggers }, { "TestClose", TestClose }, |