aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-09-12 19:36:38 -0300
committerEuAndreh <eu@euandre.org>2024-09-12 19:36:38 -0300
commit6ec63b8727eb1956b6353ba8ffc205ae7181cd57 (patch)
tree2bc5968155ecd7579bcc7a69b884d3789b1ec259
parenttests/golite.go: Remove auth-related code and tests (diff)
downloadgolite-6ec63b8727eb1956b6353ba8ffc205ae7181cd57.tar.gz
golite-6ec63b8727eb1956b6353ba8ffc205ae7181cd57.tar.xz
src/golite.go: Enforce foreign_keys=ON
-rw-r--r--src/golite.go37
-rw-r--r--tests/golite.go30
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 },