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:
Daniel Hammerschmid 2024-02-21 18:07:47 +01:00 committed by lukasbash
parent 4c50b3f67a
commit 375f824e76
2 changed files with 19 additions and 1 deletions

View File

@ -1,6 +1,9 @@
package gorm
import "database/sql"
import (
"context"
"database/sql"
)
// SQLCommon is the minimal database connection functionality gorm requires. Implemented by *sql.DB.
type SQLCommon interface {
@ -12,6 +15,7 @@ type SQLCommon interface {
type sqlDb interface {
Begin() (*sql.Tx, error)
BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
}
type sqlTx interface {

14
main.go
View File

@ -1,6 +1,7 @@
package gorm
import (
"context"
"database/sql"
"errors"
"fmt"
@ -520,6 +521,19 @@ func (s *DB) Begin() *DB {
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
func (s *DB) Commit() *DB {
if db, ok := s.db.(sqlTx); ok && db != nil {