*/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
+5 -5
cmd
punchcardPopulate
eventconsumer
cursor
rbac
spindle
secrets
+1 -1
cmd/punchcardPopulate/main.go
···
)
func main() {
-
db, err := sql.Open("sqlite3", "./appview.db")
+
db, err := sql.Open("sqlite3", "./appview.db?_foreign_keys=1")
if err != nil {
log.Fatal("Failed to open database:", err)
}
+1 -1
eventconsumer/cursor/sqlite.go
···
}
func NewSQLiteStore(dbPath string, opts ...SqliteStoreOpt) (*SqliteStore, error) {
-
db, err := sql.Open("sqlite3", dbPath)
+
db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1")
if err != nil {
return nil, fmt.Errorf("failed to open sqlite database: %w", err)
}
+1 -1
rbac/rbac.go
···
return nil, err
}
-
db, err := sql.Open("sqlite3", path)
+
db, err := sql.Open("sqlite3", path+"?_foreign_keys=1")
if err != nil {
return nil, err
}
+1 -1
rbac/rbac_test.go
···
)
func setup(t *testing.T) *rbac.Enforcer {
-
db, err := sql.Open("sqlite3", ":memory:")
+
db, err := sql.Open("sqlite3", ":memory:?_foreign_keys=1")
assert.NoError(t, err)
a, err := adapter.NewAdapter(db, "sqlite3", "acl")
+1 -1
spindle/secrets/sqlite.go
···
}
func NewSQLiteManager(dbPath string, opts ...SqliteManagerOpt) (*SqliteManager, error) {
-
db, err := sql.Open("sqlite3", dbPath)
+
db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1")
if err != nil {
return nil, fmt.Errorf("failed to open sqlite database: %w", err)
}