diff options
| author | xengineering <me@xengineering.eu> | 2026-05-31 21:20:48 +0200 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-05-31 21:37:13 +0200 |
| commit | efb324070827bd1fe713b93f80c601551d246579 (patch) | |
| tree | d90ab00d48777eb780fe1d6d729e44ca43475350 /database.go | |
| parent | 4cb6a5952f341741ef2728fb39acb7f19de61ba9 (diff) | |
| download | finserv-efb324070827bd1fe713b93f80c601551d246579.tar finserv-efb324070827bd1fe713b93f80c601551d246579.tar.zst finserv-efb324070827bd1fe713b93f80c601551d246579.zip | |
Add migration execution
This adds the execution of the embedded migrations and adds a suitable
unit test.
Diffstat (limited to 'database.go')
| -rw-r--r-- | database.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/database.go b/database.go index c2d69c1..c71ff78 100644 --- a/database.go +++ b/database.go @@ -1,6 +1,7 @@ package main import ( + "database/sql" "embed" "fmt" "io/fs" @@ -43,3 +44,25 @@ func readMigrations() { return nil }) } + +func Transaction(db *sql.DB, f func(*sql.Tx) error) error { + tx, err := db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + + err = f(tx) + if err != nil { + return err + } + + return tx.Commit() +} + +func Migrate(db *sql.DB, index int) error { + return Transaction(db, func(tx *sql.Tx) error { + _, err := tx.Exec(migrations[index]) + return err + }) +} |
