File tree 2 files changed +26
-1
lines changed
2 files changed +26
-1
lines changed Original file line number Diff line number Diff line change @@ -549,7 +549,7 @@ func (cn *conn) Commit() (err error) {
549
549
// would get the same behaviour if you issued a COMMIT in a failed
550
550
// transaction, so it's also the least surprising thing to do here.
551
551
if cn .txnStatus == txnStatusInFailedTransaction {
552
- if err := cn .Rollback (); err != nil {
552
+ if err := cn .rollback (); err != nil {
553
553
return err
554
554
}
555
555
return ErrInFailedTransaction
@@ -576,7 +576,10 @@ func (cn *conn) Rollback() (err error) {
576
576
return driver .ErrBadConn
577
577
}
578
578
defer cn .errRecover (& err )
579
+ return cn .rollback ()
580
+ }
579
581
582
+ func (cn * conn ) rollback () (err error ) {
580
583
cn .checkIsInTransaction (true )
581
584
_ , commandTag , err := cn .simpleExec ("ROLLBACK" )
582
585
if err != nil {
Original file line number Diff line number Diff line change @@ -67,3 +67,25 @@ func TestPing(t *testing.T) {
67
67
t .Fatalf ("expected error %s, instead got %s" , driver .ErrBadConn , err )
68
68
}
69
69
}
70
+
71
+ func TestCommitInFailedTransactionWithCancelContext (t * testing.T ) {
72
+ db := openTestConn (t )
73
+ defer db .Close ()
74
+
75
+ ctx , cancel := context .WithCancel (context .Background ())
76
+ defer cancel ()
77
+
78
+ txn , err := db .BeginTx (ctx , nil )
79
+ if err != nil {
80
+ t .Fatal (err )
81
+ }
82
+ rows , err := txn .Query ("SELECT error" )
83
+ if err == nil {
84
+ rows .Close ()
85
+ t .Fatal ("expected failure" )
86
+ }
87
+ err = txn .Commit ()
88
+ if err != ErrInFailedTransaction {
89
+ t .Fatalf ("expected ErrInFailedTransaction; got %#v" , err )
90
+ }
91
+ }
You can’t perform that action at this time.
0 commit comments