diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-07-10 14:34:48 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-07-11 09:02:23 +0000 |
commit | d7e5935396d07de26f799e7e39987d8330916db2 (patch) | |
tree | 8a070c42cd857c0810fb372e630bbba4aaeb11fd /src/libs | |
parent | 10f3621cf1739413e9658f687a389415bce6e1a1 (diff) |
Sqlite: Handle cases that the database is busy
This should be not be happen but better be save than sorry.
Change-Id: I7b4afe491c07f8d5da2dc13aaffd2f354384a3ae
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/sqlite/sqlitedatabasebackend.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/libs/sqlite/sqlitedatabasebackend.cpp b/src/libs/sqlite/sqlitedatabasebackend.cpp index bf9dfab6fc..91e8df1b37 100644 --- a/src/libs/sqlite/sqlitedatabasebackend.cpp +++ b/src/libs/sqlite/sqlitedatabasebackend.cpp @@ -25,10 +25,10 @@ #include "sqlitedatabasebackend.h" +#include "sqlitebasestatement.h" #include "sqliteexception.h" #include "sqlitereadstatement.h" #include "sqlitereadwritestatement.h" -#include "sqlitebasestatement.h" #include "sqlitewritestatement.h" #include <QFileInfo> @@ -177,8 +177,12 @@ void DatabaseBackend::setLastInsertedRowId(int64_t rowId) void DatabaseBackend::execute(Utils::SmallStringView sqlStatement) { - ReadWriteStatement statement(sqlStatement, m_database); - statement.execute(); + try { + ReadWriteStatement statement(sqlStatement, m_database); + statement.execute(); + } catch (StatementIsBusy &) { + execute(sqlStatement); + } } void DatabaseBackend::close() @@ -217,14 +221,14 @@ void DatabaseBackend::registerBusyHandler() void DatabaseBackend::registerRankingFunction() { - sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25", -1, SQLITE_ANY, 0, okapi_bm25, 0, 0, 0); - sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25f", -1, SQLITE_UTF8, 0, okapi_bm25f, 0, 0, 0); - sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25f_kb", -1, SQLITE_UTF8, 0, okapi_bm25f_kb, 0, 0, 0); + // sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25", -1, SQLITE_ANY, 0, okapi_bm25, 0, 0, 0); + // sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25f", -1, SQLITE_UTF8, 0, okapi_bm25f, 0, 0, 0); + // sqlite3_create_function_v2(sqliteDatabaseHandle(), "okapi_bm25f_kb", -1, SQLITE_UTF8, 0, okapi_bm25f_kb, 0, 0, 0); } int DatabaseBackend::busyHandlerCallback(void *, int counter) { - Q_UNUSED(counter); + Q_UNUSED(counter) #ifdef QT_DEBUG //qWarning() << "Busy handler invoked" << counter << "times!"; #endif @@ -453,11 +457,15 @@ void DatabaseBackend::throwDatabaseIsNotOpen(const char *whatHasHappens) const template <typename Type> Type DatabaseBackend::toValue(Utils::SmallStringView sqlStatement) { - ReadWriteStatement statement(sqlStatement, m_database); + try { + ReadWriteStatement statement(sqlStatement, m_database); - statement.next(); + statement.next(); - return statement.fetchValue<Type>(0); + return statement.fetchValue<Type>(0); + } catch (StatementIsBusy &) { + return toValue<Type>(sqlStatement); + } } } // namespace Sqlite |