Don't AddError for Rollback on ErrTxDone (#2434)

This commit is contained in:
John Barker 2019-06-10 06:14:44 -06:00 committed by Jinzhu
parent 9127f7d86e
commit 280dd011a1
2 changed files with 19 additions and 1 deletions

View File

@ -533,7 +533,9 @@ func (s *DB) Commit() *DB {
func (s *DB) Rollback() *DB { func (s *DB) Rollback() *DB {
var emptySQLTx *sql.Tx var emptySQLTx *sql.Tx
if db, ok := s.db.(sqlTx); ok && db != nil && db != emptySQLTx { if db, ok := s.db.(sqlTx); ok && db != nil && db != emptySQLTx {
s.AddError(db.Rollback()) if err := db.Rollback(); err != nil && err != sql.ErrTxDone {
s.AddError(err)
}
} else { } else {
s.AddError(ErrInvalidTransaction) s.AddError(ErrInvalidTransaction)
} }

View File

@ -421,6 +421,22 @@ func TestTransaction(t *testing.T) {
} }
} }
func TestTransaction_NoErrorOnRollbackAfterCommit(t *testing.T) {
tx := DB.Begin()
u := User{Name: "transcation"}
if err := tx.Save(&u).Error; err != nil {
t.Errorf("No error should raise")
}
if err := tx.Commit().Error; err != nil {
t.Errorf("Commit should not raise error")
}
if err := tx.Rollback().Error; err != nil {
t.Errorf("Rollback should not raise error")
}
}
func TestRow(t *testing.T) { func TestRow(t *testing.T) {
user1 := User{Name: "RowUser1", Age: 1, Birthday: parseTime("2000-1-1")} user1 := User{Name: "RowUser1", Age: 1, Birthday: parseTime("2000-1-1")}
user2 := User{Name: "RowUser2", Age: 10, Birthday: parseTime("2010-1-1")} user2 := User{Name: "RowUser2", Age: 10, Birthday: parseTime("2010-1-1")}