Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
|
4b1b1e7f8b | |
|
08743191fe |
24
db.go
24
db.go
|
@ -1,6 +1,7 @@
|
||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
@ -108,6 +109,29 @@ func (dbc *DBC) Transaction(txFunc func(dbc *DBC) error) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dbc *DBC) TransactionContext(
|
||||||
|
ctx context.Context,
|
||||||
|
txFunc func(ctx context.Context, dbc *DBC) error,
|
||||||
|
) (err error) {
|
||||||
|
|
||||||
|
err = dbc.Begin()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if p := recover(); p != nil {
|
||||||
|
dbc.Rollback()
|
||||||
|
panic(p) // re-throw panic after Rollback
|
||||||
|
} else if err != nil {
|
||||||
|
dbc.Rollback() // err is non-nil; don't change it
|
||||||
|
} else {
|
||||||
|
err = dbc.Commit() // err is nil; if Commit returns error update err
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
err = txFunc(ctx, dbc)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (dbc *DBC) Begin() error {
|
func (dbc *DBC) Begin() error {
|
||||||
//check if we are already in a transaction
|
//check if we are already in a transaction
|
||||||
if dbc.trx != nil {
|
if dbc.trx != nil {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -3,7 +3,7 @@ module git.bit5.ru/backend/db
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.bit5.ru/backend/dbr v1.3.0
|
git.bit5.ru/backend/dbr v1.3.1
|
||||||
git.bit5.ru/backend/errors v1.0.0
|
git.bit5.ru/backend/errors v1.0.0
|
||||||
git.bit5.ru/backend/mysql v1.0.0
|
git.bit5.ru/backend/mysql v1.0.0
|
||||||
github.com/go-logr/logr v1.2.3
|
github.com/go-logr/logr v1.2.3
|
||||||
|
|
7
go.sum
7
go.sum
|
@ -1,7 +1,5 @@
|
||||||
git.bit5.ru/backend/dbr v1.2.0 h1:SQndOC9KW/jPGRSFSPYRqmMd+EHEyZHWDO9B+imEEzU=
|
git.bit5.ru/backend/dbr v1.3.1 h1:O3fy+aztnNVzto/nMcydd9BVahAJTXPE8VuGY3dC1NY=
|
||||||
git.bit5.ru/backend/dbr v1.2.0/go.mod h1:3iCyHEkyj2M+lx3fSlv3lC1r5cLZZz+6QLVCml7ZAy8=
|
git.bit5.ru/backend/dbr v1.3.1/go.mod h1:oVVFv6hIzFkO4Wy0KcS4CYqkBjW1kFHYNLcmKmDlPow=
|
||||||
git.bit5.ru/backend/dbr v1.3.0 h1:1mpzmSuZ5Mt4wL7cqjtuWOADq9kWdFY3Iet9mctC8pw=
|
|
||||||
git.bit5.ru/backend/dbr v1.3.0/go.mod h1:oVVFv6hIzFkO4Wy0KcS4CYqkBjW1kFHYNLcmKmDlPow=
|
|
||||||
git.bit5.ru/backend/errors v1.0.0 h1:WWJ0sly44q1HQjN01X75ZAGKZwwY5Ml+XVDXMjCkToA=
|
git.bit5.ru/backend/errors v1.0.0 h1:WWJ0sly44q1HQjN01X75ZAGKZwwY5Ml+XVDXMjCkToA=
|
||||||
git.bit5.ru/backend/errors v1.0.0/go.mod h1:75faRwsnpM0Se00/Bh7fysWQXV8oMjNJFQ6f7+r9k3Y=
|
git.bit5.ru/backend/errors v1.0.0/go.mod h1:75faRwsnpM0Se00/Bh7fysWQXV8oMjNJFQ6f7+r9k3Y=
|
||||||
git.bit5.ru/backend/mysql v1.0.0 h1:NKxTr5p7vti/qrig6zZtWaDeiLRRgPkMB0Nz7AGGlIY=
|
git.bit5.ru/backend/mysql v1.0.0 h1:NKxTr5p7vti/qrig6zZtWaDeiLRRgPkMB0Nz7AGGlIY=
|
||||||
|
@ -14,6 +12,7 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
|
Loading…
Reference in New Issue