good morning!!!!

Skip to content
Snippets Groups Projects
Commit c77c62e8 authored by José Carlos Nieto's avatar José Carlos Nieto
Browse files

Move Tx logic to sqladapter.

parent 6f9a2619
No related branches found
No related tags found
No related merge requests found
...@@ -94,6 +94,19 @@ func (t *txWrapper) Rollback() error { ...@@ -94,6 +94,19 @@ func (t *txWrapper) Rollback() error {
return t.BaseTx.Rollback() return t.BaseTx.Rollback()
} }
func RunTx(d db.SQLDatabase, fn func(tx db.SQLTx) error) error {
tx, err := d.NewTx()
if err != nil {
return err
}
defer tx.Close()
if err := fn(tx); err != nil {
tx.Rollback()
return err
}
return tx.Commit()
}
var ( var (
_ = BaseTx(&sqlTx{}) _ = BaseTx(&sqlTx{})
) )
...@@ -38,9 +38,8 @@ type database struct { ...@@ -38,9 +38,8 @@ type database struct {
sqladapter.BaseDatabase // Leveraged by sqladapter sqladapter.BaseDatabase // Leveraged by sqladapter
db.SQLBuilder db.SQLBuilder
txMu sync.Mutex
connURL db.ConnectionURL connURL db.ConnectionURL
txMu sync.Mutex
} }
var ( var (
...@@ -55,7 +54,7 @@ func newDatabase(settings db.ConnectionURL) (*database, error) { ...@@ -55,7 +54,7 @@ func newDatabase(settings db.ConnectionURL) (*database, error) {
return d, nil return d, nil
} }
// Open stablishes a new connection to a SQL server. // Open stablishes a new connection with the SQL server.
func Open(settings db.ConnectionURL) (db.SQLDatabase, error) { func Open(settings db.ConnectionURL) (db.SQLDatabase, error) {
d, err := newDatabase(settings) d, err := newDatabase(settings)
if err != nil { if err != nil {
...@@ -219,19 +218,10 @@ func (d *database) NewLocalCollection(name string) db.Collection { ...@@ -219,19 +218,10 @@ func (d *database) NewLocalCollection(name string) db.Collection {
return newTable(d, name) return newTable(d, name)
} }
// Transaction creates a transaction and passes it to the given function, if // Tx creates a transaction and passes it to the given function, if if the
// if the function returns no error then the transaction is commited. // function returns no error then the transaction is commited.
func (d *database) Tx(fn func(tx db.SQLTx) error) error { func (d *database) Tx(fn func(tx db.SQLTx) error) error {
tx, err := d.NewTx() return sqladapter.RunTx(d, fn)
if err != nil {
return err
}
defer tx.Close()
if err := fn(tx); err != nil {
tx.Rollback()
return err
}
return tx.Commit()
} }
// NewLocalTransaction allows sqladapter start a transaction block. // NewLocalTransaction allows sqladapter start a transaction block.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment