diff --git a/sqlite3.go b/sqlite3.go index 852c299..f3c1226 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -296,6 +296,12 @@ func (ai *aggInfo) Done(ctx *C.sqlite3_context) { // Commit transaction. func (tx *SQLiteTx) Commit() error { _, 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 }