summaryrefslogtreecommitdiff
path: root/database.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-05-31 21:20:48 +0200
committerxengineering <me@xengineering.eu>2026-05-31 21:37:13 +0200
commitefb324070827bd1fe713b93f80c601551d246579 (patch)
treed90ab00d48777eb780fe1d6d729e44ca43475350 /database.go
parent4cb6a5952f341741ef2728fb39acb7f19de61ba9 (diff)
downloadfinserv-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.go23
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
+ })
+}