diff options
Diffstat (limited to 'sql/recovery.cc')
-rw-r--r-- | sql/recovery.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sql/recovery.cc b/sql/recovery.cc index 7b9ca9f..b79fe08 100644 --- a/sql/recovery.cc +++ b/sql/recovery.cc @@ -98,7 +98,11 @@ void RecordRecoveryEvent(RecoveryEventType recovery_event) { // static bool Recovery::FullRecoverySupported() { // TODO(shess): See comment in Init(). +#if defined(USE_SYSTEM_SQLITE) + return false; +#else return true; +#endif } // static @@ -199,7 +203,16 @@ bool Recovery::Init(const base::FilePath& db_path) { return false; } - // Enable the recover virtual table for this connection. + // TODO(shess): Figure out a story for USE_SYSTEM_SQLITE. The + // virtual table implementation relies on SQLite internals for some + // types and functions, which could be copied inline to make it + // standalone. Or an alternate implementation could try to read + // through errors entirely at the SQLite level. + // + // For now, defer to the caller. The setup will succeed, but the + // later CREATE VIRTUAL TABLE call will fail, at which point the + // caller can fire Unrecoverable(). +#if !defined(USE_SYSTEM_SQLITE) int rc = recoverVtableInit(recover_db_.db_); if (rc != SQLITE_OK) { RecordRecoveryEvent(RECOVERY_FAILED_VIRTUAL_TABLE_INIT); @@ -207,6 +220,10 @@ bool Recovery::Init(const base::FilePath& db_path) { << recover_db_.GetErrorMessage(); return false; } +#else + // If this is infrequent enough, just wire it to Raze(). + RecordRecoveryEvent(RECOVERY_FAILED_VIRTUAL_TABLE_SYSTEM_SQLITE); +#endif // Turn on |SQLITE_RecoveryMode| for the handle, which allows // reading certain broken databases. |