From bb08f31e6baaee4addf658ae7af5c101eeba0ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Z=C3=ADpek?= Date: Sat, 3 Sep 2022 21:35:15 +0200 Subject: [PATCH] Run migrations in transactions --- server/database/database.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/server/database/database.go b/server/database/database.go index 8c1e290..cbebf65 100644 --- a/server/database/database.go +++ b/server/database/database.go @@ -35,17 +35,31 @@ func Initialize(databaseUrl string) (*sql.DB, error) { return nil, err } - _, err = db.Exec(migrationSource) + tx, err := db.Begin() + + if err != nil { + return nil, err + } + + defer tx.Rollback() + + _, err = tx.Exec(migrationSource) if err != nil { return nil, fmt.Errorf("failed to run migration %s: %w", migrationId, err) } - _, err = db.Exec("INSERT INTO migrations (id, run_at) VALUES (?, ?)", migrationId, time.Now().Unix()) + _, err = tx.Exec("INSERT INTO migrations (id, run_at) VALUES (?, ?)", migrationId, time.Now().Unix()) if err != nil { return nil, fmt.Errorf("failed to store run migration: %w", err) } + + err = tx.Commit() + + if err != nil { + return nil, err + } } return db, nil