Skip to content
This repository was archived by the owner on May 14, 2026. It is now read-only.

Commit 70c8f94

Browse files
committed
Rollback transaction using a function
1 parent 52b96b3 commit 70c8f94

1 file changed

Lines changed: 11 additions & 15 deletions

File tree

driver/postgres/driver.go

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -96,30 +96,26 @@ func (db *postgres) ApplyMigrations(ctx context.Context, files []file.File, up b
9696
return errors.Annotate(err, "starting database transaction failed")
9797
}
9898

99+
rollback := func(reasonErr error) error {
100+
if err := tx.Rollback(); err != nil {
101+
return errors.Annotate(err, "rolling back transaction failed")
102+
}
103+
104+
return reasonErr
105+
}
106+
99107
for _, file := range files {
100108
if _, err := tx.ExecContext(ctx, file.SQL); err != nil {
101-
if rollbackErr := tx.Rollback(); rollbackErr != nil {
102-
return errors.Annotate(err, "rolling back transaction failed")
103-
}
104-
105-
return errors.Annotate(err, "executing migration failed")
109+
return rollback(errors.Annotate(err, "executing migration failed"))
106110
}
107111

108112
if _, err := tx.ExecContext(ctx, applyMigrationSQL[up], file.Version); err != nil {
109-
if rollbackErr := tx.Rollback(); rollbackErr != nil {
110-
return errors.Annotate(err, "rolling back transaction failed")
111-
}
112-
113-
return errors.Annotate(err, "executing migration failed")
113+
return rollback(errors.Annotate(err, "executing migration failed"))
114114
}
115115
}
116116

117117
if err := tx.Commit(); err != nil {
118-
if rollbackErr := tx.Rollback(); rollbackErr != nil {
119-
return errors.Annotate(err, "rolling back transaction failed")
120-
}
121-
122-
return errors.Annotate(err, "committing migrations failed")
118+
return rollback(errors.Annotate(err, "committing migrations failed"))
123119
}
124120

125121
return nil

0 commit comments

Comments
 (0)