From 314f877d784e4bd5c1333c50c800715441308d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=AB=E3=83=B3?= Date: Tue, 28 Apr 2026 10:57:53 +0900 Subject: [PATCH] fix(database): address Copilot review comments - Remove _synchronous=NORMAL from DSN to preserve SQLite's default durability guarantees; WAL mode alone is sufficient for the fix - Add error handling for db.Exec and db.DB() in openTestDB helper - Use context.WithTimeout(5s) in with_fix sub-test to prevent hang on connection-never-released regression Co-Authored-By: Claude Sonnet 4.6 --- database/concurrent_test.go | 14 ++++++++++---- database/db.go | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/database/concurrent_test.go b/database/concurrent_test.go index 48b25ddb..e162114b 100644 --- a/database/concurrent_test.go +++ b/database/concurrent_test.go @@ -89,9 +89,14 @@ func TestConcurrentWrites(t *testing.T) { if err != nil { t.Fatalf("gorm.Open: %v", err) } - db.Exec("CREATE TABLE IF NOT EXISTS settings " + - "(id INTEGER PRIMARY KEY AUTOINCREMENT, key TEXT, value TEXT)") - sqlDB, _ := db.DB() + if err := db.Exec("CREATE TABLE IF NOT EXISTS settings " + + "(id INTEGER PRIMARY KEY AUTOINCREMENT, key TEXT, value TEXT)").Error; err != nil { + t.Fatalf("create settings table: %v", err) + } + sqlDB, err := db.DB() + if err != nil { + t.Fatalf("db.DB: %v", err) + } sqlDB.SetMaxOpenConns(maxConns) t.Cleanup(func() { sqlDB.Close() }) return sqlDB @@ -147,7 +152,8 @@ func TestConcurrentWrites(t *testing.T) { // writes successfully, regardless of busy_timeout. t.Run("with_fix_pool_serialises_writes", func(t *testing.T) { sqlDB := openTestDB(t, 1) - ctx := context.Background() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() conn1, err := sqlDB.Conn(ctx) if err != nil { diff --git a/database/db.go b/database/db.go index 6fc1767f..316a5bce 100644 --- a/database/db.go +++ b/database/db.go @@ -139,7 +139,7 @@ func InitDB(dbPath string) error { c := &gorm.Config{ Logger: gormLogger, } - db, err = gorm.Open(sqlite.Open(dbPath+"?_journal_mode=WAL&_synchronous=NORMAL"), c) + db, err = gorm.Open(sqlite.Open(dbPath+"?_journal_mode=WAL"), c) if err != nil { return err }