Merge pull request #300 from sqweek/issue184

Fix inconsistent tx state with database/sql.
This commit is contained in:
mattn 2016-07-15 22:38:49 +09:00 committed by GitHub
commit e118d44513
1 changed files with 6 additions and 0 deletions

View File

@ -296,6 +296,12 @@ func (ai *aggInfo) Done(ctx *C.sqlite3_context) {
// Commit transaction. // Commit transaction.
func (tx *SQLiteTx) Commit() error { func (tx *SQLiteTx) Commit() error {
_, err := tx.c.exec("COMMIT") _, err := tx.c.exec("COMMIT")
if err != nil && err.(Error).Code == C.SQLITE_BUSY {
// sqlite3 will leave the transaction open in this scenario.
// However, database/sql considers the transaction complete once we
// return from Commit() - we must clean up to honour its semantics.
tx.c.exec("ROLLBACK")
}
return err return err
} }