forked from tangled.org/core
this repo has no description

*/db: actually enable foreign keys

`sql.DB` pools connections, which means that there's a good chance that
our foreign keys aren't actually being enforced, unless a goroutine
happens to be using the connection that was made when we set `pragma
foreign_keys = 1`.

Signed-off-by: Winter <winter@winter.cafe>

authored by winter.bsky.social and committed by Tangled 4e27d297 c8d76b33

Changed files
+8 -11
appview
db
cmd
punchcardPopulate
eventconsumer
cursor
knotserver
db
rbac
spindle
db
secrets
+1 -2
appview/db/db.go
··· 27 27 } 28 28 29 29 func Make(dbPath string) (*DB, error) { 30 - db, err := sql.Open("sqlite3", dbPath) 30 + db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1") 31 31 if err != nil { 32 32 return nil, err 33 33 } 34 34 _, err = db.Exec(` 35 35 pragma journal_mode = WAL; 36 36 pragma synchronous = normal; 37 - pragma foreign_keys = on; 38 37 pragma temp_store = memory; 39 38 pragma mmap_size = 30000000000; 40 39 pragma page_size = 32768;
+1 -1
cmd/punchcardPopulate/main.go
··· 11 11 ) 12 12 13 13 func main() { 14 - db, err := sql.Open("sqlite3", "./appview.db") 14 + db, err := sql.Open("sqlite3", "./appview.db?_foreign_keys=1") 15 15 if err != nil { 16 16 log.Fatal("Failed to open database:", err) 17 17 }
+1 -1
eventconsumer/cursor/sqlite.go
··· 21 21 } 22 22 23 23 func NewSQLiteStore(dbPath string, opts ...SqliteStoreOpt) (*SqliteStore, error) { 24 - db, err := sql.Open("sqlite3", dbPath) 24 + db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1") 25 25 if err != nil { 26 26 return nil, fmt.Errorf("failed to open sqlite database: %w", err) 27 27 }
+1 -2
knotserver/db/init.go
··· 11 11 } 12 12 13 13 func Setup(dbPath string) (*DB, error) { 14 - db, err := sql.Open("sqlite3", dbPath) 14 + db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1") 15 15 if err != nil { 16 16 return nil, err 17 17 } ··· 19 19 _, err = db.Exec(` 20 20 pragma journal_mode = WAL; 21 21 pragma synchronous = normal; 22 - pragma foreign_keys = on; 23 22 pragma temp_store = memory; 24 23 pragma mmap_size = 30000000000; 25 24 pragma page_size = 32768;
+1 -1
rbac/rbac.go
··· 43 43 return nil, err 44 44 } 45 45 46 - db, err := sql.Open("sqlite3", path) 46 + db, err := sql.Open("sqlite3", path+"?_foreign_keys=1") 47 47 if err != nil { 48 48 return nil, err 49 49 }
+1 -1
rbac/rbac_test.go
··· 14 14 ) 15 15 16 16 func setup(t *testing.T) *rbac.Enforcer { 17 - db, err := sql.Open("sqlite3", ":memory:") 17 + db, err := sql.Open("sqlite3", ":memory:?_foreign_keys=1") 18 18 assert.NoError(t, err) 19 19 20 20 a, err := adapter.NewAdapter(db, "sqlite3", "acl")
+1 -2
spindle/db/db.go
··· 11 11 } 12 12 13 13 func Make(dbPath string) (*DB, error) { 14 - db, err := sql.Open("sqlite3", dbPath) 14 + db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1") 15 15 if err != nil { 16 16 return nil, err 17 17 } ··· 19 19 _, err = db.Exec(` 20 20 pragma journal_mode = WAL; 21 21 pragma synchronous = normal; 22 - pragma foreign_keys = on; 23 22 pragma temp_store = memory; 24 23 pragma mmap_size = 30000000000; 25 24 pragma page_size = 32768;
+1 -1
spindle/secrets/sqlite.go
··· 24 24 } 25 25 26 26 func NewSQLiteManager(dbPath string, opts ...SqliteManagerOpt) (*SqliteManager, error) { 27 - db, err := sql.Open("sqlite3", dbPath) 27 + db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1") 28 28 if err != nil { 29 29 return nil, fmt.Errorf("failed to open sqlite database: %w", err) 30 30 }