Added BeginTx
Allows the use of sql.DB.BeginTx and with it the option to specify the transaction isolation level.
This commit is contained in:
parent
4c50b3f67a
commit
375f824e76
@ -1,6 +1,9 @@
|
|||||||
package gorm
|
package gorm
|
||||||
|
|
||||||
import "database/sql"
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql"
|
||||||
|
)
|
||||||
|
|
||||||
// SQLCommon is the minimal database connection functionality gorm requires. Implemented by *sql.DB.
|
// SQLCommon is the minimal database connection functionality gorm requires. Implemented by *sql.DB.
|
||||||
type SQLCommon interface {
|
type SQLCommon interface {
|
||||||
@ -12,6 +15,7 @@ type SQLCommon interface {
|
|||||||
|
|
||||||
type sqlDb interface {
|
type sqlDb interface {
|
||||||
Begin() (*sql.Tx, error)
|
Begin() (*sql.Tx, error)
|
||||||
|
BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type sqlTx interface {
|
type sqlTx interface {
|
||||||
|
|||||||
14
main.go
14
main.go
@ -1,6 +1,7 @@
|
|||||||
package gorm
|
package gorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -520,6 +521,19 @@ func (s *DB) Begin() *DB {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BeginTx begins a transaction with options
|
||||||
|
func (s *DB) BeginTx(ctx context.Context, opts *sql.TxOptions) *DB {
|
||||||
|
c := s.clone()
|
||||||
|
if db, ok := c.db.(sqlDb); ok && db != nil {
|
||||||
|
tx, err := db.BeginTx(ctx, opts)
|
||||||
|
c.db = interface{}(tx).(SQLCommon)
|
||||||
|
c.AddError(err)
|
||||||
|
} else {
|
||||||
|
c.AddError(ErrCantStartTransaction)
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// Commit commit a transaction
|
// Commit commit a transaction
|
||||||
func (s *DB) Commit() *DB {
|
func (s *DB) Commit() *DB {
|
||||||
if db, ok := s.db.(sqlTx); ok && db != nil {
|
if db, ok := s.db.(sqlTx); ok && db != nil {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user