Properly force checkpoint at end of conversion

// FREEBIE
This commit is contained in:
Michael Kirk 2018-01-23 13:33:39 -05:00 committed by Matthew Chen
parent 468dedf581
commit acc97b197b
2 changed files with 9 additions and 2 deletions

View File

@ -206,6 +206,8 @@ NS_ASSUME_NONNULL_BEGIN
return databaseFilePath;
}
#pragma mark - Tests
- (void)testDoesDatabaseNeedToBeConverted_Unconverted
{
NSData *databasePassword = [self randomDatabasePassword];

View File

@ -302,8 +302,13 @@ const NSUInteger kSQLCipherSaltLength = 16;
}
// Force a checkpoint so that the plaintext is written to the actual DB file, not just living in the WAL.
// TODO do we need/want the earlier checkpoint if we're checkpointing here?
sqlite3_wal_autocheckpoint(db, 0);
int log, ckpt;
status = sqlite3_wal_checkpoint_v2(db, NULL, SQLITE_CHECKPOINT_FULL, &log, &ckpt);
if (status != SQLITE_OK) {
DDLogError(@"%@ Error forcing checkpoint. status: %d, log: %d, ckpt: %d, error: %s", self.logTag, status, log, ckpt, sqlite3_errmsg(db));
return OWSErrorWithCodeDescription(
OWSErrorCodeDatabaseConversionFatalError, @"Error forcing checkpoint.");
}
sqlite3_close(db);
}