From 6835429a28996239c0cac29f751a9a5a271cceaa Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 21 Dec 2016 11:09:24 +0100 Subject: [PATCH] Sql: Allow prepare fail for PRAGMA quick_check #5357 This actually happens in low-disk situations. --- src/libsync/ownsql.cpp | 8 +++++--- src/libsync/ownsql.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libsync/ownsql.cpp b/src/libsync/ownsql.cpp index 81d910f1c..69c40d004 100644 --- a/src/libsync/ownsql.cpp +++ b/src/libsync/ownsql.cpp @@ -70,7 +70,9 @@ bool SqlDatabase::openHelper( const QString& filename, int sqliteFlags ) bool SqlDatabase::checkDb() { - SqlQuery quick_check("PRAGMA quick_check;", *this); + // quick_check can fail with a disk IO error when diskspace is low + SqlQuery quick_check(*this); + quick_check.prepare("PRAGMA quick_check;", /*allow_failure=*/true); if( !quick_check.exec() ) { qDebug() << "Error running quick_check on database"; return false; @@ -199,7 +201,7 @@ SqlQuery::SqlQuery(const QString& sql, SqlDatabase& db) prepare(sql); } -int SqlQuery::prepare( const QString& sql) +int SqlQuery::prepare( const QString& sql, bool allow_failure ) { QString s(sql); _sql = s.trimmed(); @@ -221,7 +223,7 @@ int SqlQuery::prepare( const QString& sql) if( _errId != SQLITE_OK ) { _error = QString::fromUtf8(sqlite3_errmsg(_db)); qWarning() << "Sqlite prepare statement error:" << _error << "in" <<_sql; - Q_ASSERT(!"SQLITE Prepare error"); + Q_ASSERT(allow_failure || !"SQLITE Prepare error"); } } return _errId; diff --git a/src/libsync/ownsql.h b/src/libsync/ownsql.h index c957e3996..211e77fdd 100644 --- a/src/libsync/ownsql.h +++ b/src/libsync/ownsql.h @@ -80,7 +80,7 @@ public: bool isSelect(); bool isPragma(); bool exec(); - int prepare( const QString& sql ); + int prepare( const QString& sql, bool allow_failure = false ); bool next(); void bindValue(int pos, const QVariant& value); QString lastQuery() const; -- 2.30.2