/* ** Rollback all database files. */ static void sqlite3RollbackAll( sqlite3 db ) { int i; int inTrans = 0; Debug.Assert( sqlite3_mutex_held( db.mutex ) ); sqlite3BeginBenignMalloc(); for ( i = 0; i < db.nDb; i++ ) { if ( db.aDb[i].pBt != null ) { if ( sqlite3BtreeIsInTrans( db.aDb[i].pBt ) ) { inTrans = 1; } sqlite3BtreeRollback( db.aDb[i].pBt ); db.aDb[i].inTrans = 0; } } sqlite3VtabRollback( db ); sqlite3EndBenignMalloc(); if ( ( db.flags & SQLITE_InternChanges ) != 0 ) { sqlite3ExpirePreparedStatements( db ); sqlite3ResetInternalSchema( db, -1 ); } /* Any deferred constraint violations have now been resolved. */ db.nDeferredCons = 0; /* If one has been configured, invoke the rollback-hook callback */ if ( db.xRollbackCallback != null && ( inTrans != 0 || 0 == db.autoCommit ) ) { db.xRollbackCallback( db.pRollbackArg ); } }