diff --git a/store.go b/store.go index e6441a4..e5a53e4 100644 --- a/store.go +++ b/store.go @@ -2,7 +2,9 @@ package main import ( "database/sql" - _ "modernc.org/sqlite" + "log" + "modernc.org/sqlite" + sqlite3 "modernc.org/sqlite/lib" ) const schema = ` @@ -40,7 +42,11 @@ func (s *SQLStore) AcquireLock(chapterID int64, dept string, repID int64) (int64 `INSERT INTO runs (chapter_id, department, rep_user_id, status) VALUES (?, ?, ?, 'running')`, chapterID, dept, repID) if err != nil { - return 0, ErrLocked // refine: only on constraint violation + var serr *sqLite.Error + if errors.As(err, &serr) && serr.Code() == sqlite3.SQLITE_CONSTRAINT_UNIQUE { + return 0, ErrLocked + } + return 0, ErrLocked } return res.LastInsertId() }