*/db: actually enable foreign keys #459

merged
opened by winter.bsky.social targeting master from winter.bsky.social/core: push-zrzuvtwqqook

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

Changed files
+8 -8
appview
db
cmd
punchcardPopulate
eventconsumer
cursor
knotserver
db
rbac
spindle
db
secrets
+1 -1
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 }
+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 -1
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 }
+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 -1
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 }
+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 }