Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
|
4b1b1e7f8b | |
|
08743191fe |
30
db.go
30
db.go
|
@ -1,6 +1,7 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"reflect"
|
||||
"time"
|
||||
|
@ -75,7 +76,7 @@ func OpenPool(s Settings) *Pool {
|
|||
func GetDBC(p *Pool, logger logr.Logger) *DBC {
|
||||
if len(p.S.Prefix) > 0 {
|
||||
logger = logger.WithValues("db", p.S.Prefix)
|
||||
}
|
||||
}
|
||||
|
||||
con := dbr.NewConnection(p.DB, nil)
|
||||
sess := con.NewSession(&EventReceiver{logger: logger, s: p.S})
|
||||
|
@ -108,6 +109,29 @@ func (dbc *DBC) Transaction(txFunc func(dbc *DBC) error) (err error) {
|
|||
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 {
|
||||
//check if we are already in a transaction
|
||||
if dbc.trx != nil {
|
||||
|
@ -247,8 +271,8 @@ func (dbc *DBC) SelectBySQL(sql string, args ...interface{}) *dbr.SelectBuilder
|
|||
}
|
||||
}
|
||||
|
||||
//Note: Creates a new slice of dbr.SelectBuilder for the given SQL string
|
||||
//Supported chunking only for first IN-list
|
||||
// Note: Creates a new slice of dbr.SelectBuilder for the given SQL string
|
||||
// Supported chunking only for first IN-list
|
||||
func (dbc *DBC) SelectBySQLWithChunkedIN(sql string, chunkSize int, args ...interface{}) []*dbr.SelectBuilder {
|
||||
var builders []*dbr.SelectBuilder
|
||||
listsForIN := make(map[int]reflect.Value)
|
||||
|
|
2
go.mod
2
go.mod
|
@ -3,7 +3,7 @@ module git.bit5.ru/backend/db
|
|||
go 1.13
|
||||
|
||||
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/mysql v1.0.0
|
||||
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.2.0/go.mod h1:3iCyHEkyj2M+lx3fSlv3lC1r5cLZZz+6QLVCml7ZAy8=
|
||||
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/dbr v1.3.1 h1:O3fy+aztnNVzto/nMcydd9BVahAJTXPE8VuGY3dC1NY=
|
||||
git.bit5.ru/backend/dbr v1.3.1/go.mod h1:oVVFv6hIzFkO4Wy0KcS4CYqkBjW1kFHYNLcmKmDlPow=
|
||||
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/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/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
|
|
Loading…
Reference in New Issue