summaryrefslogtreecommitdiff
path: root/golang/pkg/database/migrations.go
diff options
context:
space:
mode:
Diffstat (limited to 'golang/pkg/database/migrations.go')
-rw-r--r--golang/pkg/database/migrations.go16
1 files changed, 9 insertions, 7 deletions
diff --git a/golang/pkg/database/migrations.go b/golang/pkg/database/migrations.go
index 94207a5..b167087 100644
--- a/golang/pkg/database/migrations.go
+++ b/golang/pkg/database/migrations.go
@@ -9,11 +9,6 @@ import (
_ "github.com/mattn/go-sqlite3"
)
-type DB struct {
- ctx context.Context
- db *sql.DB
-}
-
//go:embed sql/*.sql
var schemaFiles embed.FS
@@ -61,15 +56,22 @@ func DBInit(ctx context.Context, url string) (myDB *DB, err error) {
return nil, err
}
+ tx, err := db.Begin()
+ if err != nil {
+ return nil, err
+ }
for version < len(statements) {
- if _, err = db.ExecContext(ctx, statements[version]); err != nil {
+ if _, err = tx.ExecContext(ctx, statements[version]); err != nil {
+ tx.Rollback()
return nil, err
}
version++
}
- if _, err = db.ExecContext(ctx, `DELETE FROM schema_version; INSERT INTO schema_version (version) VALUES (?);`, version); err != nil {
+ if _, err = tx.ExecContext(ctx, `DELETE FROM schema_version; INSERT INTO schema_version (version) VALUES (?);`, version); err != nil {
+ tx.Rollback()
return nil, err
}
+ tx.Commit()
return &DB{ctx: ctx, db: db}, nil
}