Skip to content

Commit 3fffc66

Browse files
committed
fix: set foreign key constraints for every connection
1 parent 0822f03 commit 3fffc66

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

backend/cmd/data/datasource.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ func InitDataSource(dataSourceName string) error {
1919
if err = os.MkdirAll(dir, 0o755); err != nil {
2020
return err
2121
}
22-
DB, err = sql.Open("sqlite", dataSourceName)
22+
// Add _pragma=foreign_keys(1) to ensure foreign keys are enabled on every connection
23+
// This is critical for modernc.org/sqlite with connection pooling
24+
dsn := dataSourceName + "?_pragma=foreign_keys(1)"
25+
DB, err = sql.Open("sqlite", dsn)
2326
if err != nil {
2427
return err
2528
}
@@ -30,11 +33,17 @@ func InitDataSource(dataSourceName string) error {
3033
return err
3134
}
3235

36+
// Set connection pool settings first
37+
DB.SetMaxOpenConns(10)
38+
DB.SetMaxIdleConns(5)
39+
DB.SetConnMaxLifetime(0)
40+
41+
// Enable foreign keys - CRITICAL: Must be executed to take effect
3342
if _, err = DB.Exec(`PRAGMA foreign_keys = ON;`); err != nil {
3443
return err
3544
}
3645

37-
// standard optimizations
46+
// Standard optimizations (these are persistent per database file)
3847
if _, err = DB.Exec(`PRAGMA journal_mode = WAL;`); err != nil {
3948
return err
4049
}
@@ -43,10 +52,6 @@ func InitDataSource(dataSourceName string) error {
4352
return err
4453
}
4554

46-
DB.SetMaxOpenConns(10)
47-
DB.SetMaxIdleConns(5)
48-
DB.SetConnMaxLifetime(0)
49-
5055
schema := `
5156
CREATE TABLE IF NOT EXISTS Users (
5257
id INTEGER PRIMARY KEY AUTOINCREMENT,

backend/cmd/provider/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (repo *Repo) saveModels(models []Model) error {
109109
args = append(args, m.ID, m.ProviderID, m.Name, m.IsEnabled)
110110
}
111111

112-
// on conflict, replace
112+
// on conflict, only update the enabled status
113113
sb.WriteString(" ON CONFLICT(id) DO UPDATE SET is_enabled=excluded.is_enabled")
114114

115115
_, err := repo.db.Exec(sb.String(), args...)

0 commit comments

Comments
 (0)