Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit 788b330

Browse files
committed
Add sqlutil
1 parent c2b61ac commit 788b330

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

sqlutil/db.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package sqlutil
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
7+
"github.com/pkg/errors"
8+
9+
"github.com/ProgrammingLab/prolab-accounts/app/util"
10+
)
11+
12+
// DB is database with util
13+
type DB struct {
14+
*sql.DB
15+
}
16+
17+
// New creates new db
18+
func New(db *sql.DB) *DB {
19+
return &DB{
20+
DB: db,
21+
}
22+
}
23+
24+
// Watch calls f with transaction
25+
func (d *DB) Watch(ctx context.Context, f func(ctx context.Context, tx *sql.Tx) error) (err error) {
26+
tx, err := d.Begin()
27+
if err != nil {
28+
return errors.WithStack(err)
29+
}
30+
31+
defer func() {
32+
if e := util.ErrorFromRecover(recover()); e != nil {
33+
err = e
34+
_ = tx.Rollback()
35+
}
36+
}()
37+
38+
err = f(ctx, tx)
39+
if err != nil {
40+
_ = tx.Rollback()
41+
return err
42+
}
43+
44+
err = tx.Commit()
45+
if err != nil {
46+
_ = tx.Rollback()
47+
return errors.WithStack(err)
48+
}
49+
50+
return nil
51+
}

0 commit comments

Comments
 (0)