diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 23b722b..b61ece3 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -630,6 +630,8 @@ void MainWindow::saveSettings() "Failed to remove old database. Settings not saved."); return; } + QFile::remove(Common::databasePath() + "-shm"); + QFile::remove(Common::databasePath() + "-wal"); } QSettings settings; diff --git a/shared/databasefactory.cpp b/shared/databasefactory.cpp index 4c3b4e3..c183419 100644 --- a/shared/databasefactory.cpp +++ b/shared/databasefactory.cpp @@ -1,4 +1,5 @@ #include +#include #include "databasefactory.h" #include "logger.h" #include "looqsgeneralexception.h" @@ -31,11 +32,23 @@ QSqlDatabase DatabaseFactory::forCurrentThread() QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "LOOQS" + QString::number((quint64)QThread::currentThread(), 16)); db.setDatabaseName(this->connectionString); + db.setConnectOptions("QSQLITE_BUSY_TIMEOUT=30000"); if(!db.open()) { Logger::error() << "Failed to open the database: " << this->connectionString << Qt::endl; throw LooqsGeneralException("Failed to create open new connection"); } + QSqlQuery q(db); + if(!q.exec("PRAGMA journal_mode=WAL;")) + { + Logger::error() << "Failed to set WAL mode: " << this->connectionString << Qt::endl; + throw LooqsGeneralException("Failed to set WAL mode on sqlite database"); + } + if(!q.exec("PRAGMA wal_autocheckpoint=250;")) + { + Logger::error() << "Failed to set WAL autocheckpoint: " << this->connectionString << Qt::endl; + throw LooqsGeneralException("Failed to set WAL autocheckpoint on sqlite database"); + } dbStore.setLocalData(db); return db; }