@@ -85,28 +85,23 @@ func Close(closer io.Closer) {
8585
8686// A lazy function to rollback the *sql.Tx
8787func Rollback (tx * sql.Tx ) {
88- err := tx .Rollback ()
89-
90- // roll back error is a serious error
91- if err != nil {
88+ if err := tx .Rollback (); err != nil {
89+ // roll back error is a serious error
9290 log .Error (errors .As (err ))
9391 }
9492}
9593
96- // A way implement the sql.Exec
97- func Exec (db Execer , querySql string , args ... interface {}) (sql.Result , error ) {
98- return db .Exec (querySql , args ... )
99- }
100- func ExecContext (db Execer , ctx context.Context , querySql string , args ... interface {}) (sql.Result , error ) {
101- return db .ExecContext (ctx , querySql , args ... )
102- }
103-
104- // A way to ran multiply tx
105- func ExecMultiTx (tx * sql.Tx , mTx []* MultiTx ) error {
106- return execMultiTx (tx , context .TODO (), mTx )
107- }
108- func ExecMultiTxContext (tx * sql.Tx , ctx context.Context , mTx []* MultiTx ) error {
109- return execMultiTx (tx , ctx , mTx )
94+ // A lazy function to commit the *sql.Tx
95+ // if will auto commit when the function is nil error, or do a rollback and return the function error.
96+ func Commit (tx * sql.Tx , fn func () error ) error {
97+ if err := fn (); err != nil {
98+ Rollback (tx )
99+ return err
100+ }
101+ if err := tx .Commit (); err != nil {
102+ return err
103+ }
104+ return nil
110105}
111106
112107// Reflect one db data to the struct. the struct tag format like `db:"field_title"`, reference to: http://github.com/jmoiron/sqlx
@@ -118,22 +113,6 @@ func InsertStructContext(exec Execer, ctx context.Context, obj interface{}, tbNa
118113 return insertStruct (exec , ctx , obj , tbName , drvName ... )
119114}
120115
121- // A sql.Query implements
122- func Query (db Queryer , querySql string , args ... interface {}) (* sql.Rows , error ) {
123- return db .Query (querySql , args ... )
124- }
125- func QueryContext (db Queryer , ctx context.Context , querySql string , args ... interface {}) (* sql.Rows , error ) {
126- return db .QueryContext (ctx , querySql , args ... )
127- }
128-
129- // A sql.QueryRow implements
130- func QueryRow (db Queryer , querySql string , args ... interface {}) * sql.Row {
131- return db .QueryRow (querySql , args ... )
132- }
133- func QueryRowContext (db Queryer , ctx context.Context , querySql string , args ... interface {}) * sql.Row {
134- return db .QueryRowContext (ctx , querySql , args ... )
135- }
136-
137116// Relect the sql.Rows to a struct.
138117func ScanStruct (rows Rows , obj interface {}) error {
139118 return scanStruct (rows , obj )
0 commit comments