From ebf1693a7c27da2c272bd573ed2d113b64626a4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 18 Sep 2024 16:49:01 +0200 Subject: [PATCH] Manager: convert busy-timeout query to sqlc Ref: #104305 --- internal/manager/persistence/db.go | 2 +- internal/manager/persistence/sqlc/integrity.go | 8 ++++++++ internal/manager/persistence/sqlite_busy.go | 11 ++++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/internal/manager/persistence/db.go b/internal/manager/persistence/db.go index fb3325b8..2cd34262 100644 --- a/internal/manager/persistence/db.go +++ b/internal/manager/persistence/db.go @@ -54,7 +54,7 @@ func OpenDB(ctx context.Context, dsn string) (*DB, error) { } }() - if err := setBusyTimeout(db.gormDB, 5*time.Second); err != nil { + if err := db.setBusyTimeout(ctx, 5*time.Second); err != nil { return nil, err } diff --git a/internal/manager/persistence/sqlc/integrity.go b/internal/manager/persistence/sqlc/integrity.go index 0ec345ed..570998ba 100644 --- a/internal/manager/persistence/sqlc/integrity.go +++ b/internal/manager/persistence/sqlc/integrity.go @@ -6,6 +6,8 @@ package sqlc import ( "context" + "fmt" + "time" ) const pragmaIntegrityCheck = `PRAGMA integrity_check` @@ -100,3 +102,9 @@ func (q *Queries) PragmaForeignKeyCheck(ctx context.Context) ([]PragmaForeignKey } return items, nil } + +func (q *Queries) PragmaBusyTimeout(ctx context.Context, busyTimeout time.Duration) error { + sql := fmt.Sprintf("PRAGMA busy_timeout = %d", busyTimeout.Milliseconds()) + _, err := q.db.ExecContext(ctx, sql) + return err +} diff --git a/internal/manager/persistence/sqlite_busy.go b/internal/manager/persistence/sqlite_busy.go index 52ae4757..1c202000 100644 --- a/internal/manager/persistence/sqlite_busy.go +++ b/internal/manager/persistence/sqlite_busy.go @@ -2,12 +2,11 @@ package persistence import ( + "context" "errors" "fmt" "strings" "time" - - "gorm.io/gorm" ) var ( @@ -40,9 +39,11 @@ func isDatabaseBusyError(err error) bool { // setBusyTimeout sets the SQLite busy_timeout busy handler. // See https://sqlite.org/pragma.html#pragma_busy_timeout -func setBusyTimeout(gormDB *gorm.DB, busyTimeout time.Duration) error { - if tx := gormDB.Exec(fmt.Sprintf("PRAGMA busy_timeout = %d", busyTimeout.Milliseconds())); tx.Error != nil { - return fmt.Errorf("setting busy_timeout: %w", tx.Error) +func (db *DB) setBusyTimeout(ctx context.Context, busyTimeout time.Duration) error { + queries := db.queries() + err := queries.PragmaBusyTimeout(ctx, busyTimeout) + if err != nil { + return fmt.Errorf("setting busy_timeout: %w", err) } return nil }