aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-07-10 14:34:48 +0200
committerMarco Bubke <marco.bubke@qt.io>2019-07-11 09:02:23 +0000
commitd7e5935396d07de26f799e7e39987d8330916db2 (patch)
tree8a070c42cd857c0810fb372e630bbba4aaeb11fd /src/libs
parent10f3621cf1739413e9658f687a389415bce6e1a1 (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.cpp28
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