Sqlite: Add busy handler

A busy handler is much more flexible than a timeout. In most cases we can
remove the busy exception handling code.

Change-Id: I59666ccfbd380a341412e3d25e6716b07097bf3c
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2021-03-16 11:48:12 +01:00
parent a6cfbf82ac
commit baab71c073
4 changed files with 48 additions and 25 deletions

View File

@@ -41,6 +41,8 @@ class Database;
class SQLITE_EXPORT DatabaseBackend
{
public:
using BusyHandler = std::function<bool(int count)>;
DatabaseBackend(Database &database);
~DatabaseBackend();
@@ -90,15 +92,16 @@ public:
void (*callback)(void *object, int, char const *database, char const *, long long rowId));
void resetUpdateHook();
void setBusyHandler(BusyHandler &&busyHandler);
void registerBusyHandler();
protected:
bool databaseIsOpen() const;
void setPragmaValue(Utils::SmallStringView pragma, Utils::SmallStringView value);
Utils::SmallString pragmaValue(Utils::SmallStringView pragma);
void registerBusyHandler();
void registerRankingFunction();
static int busyHandlerCallback(void*, int counter);
void checkForOpenDatabaseWhichCanBeClosed();
void checkDatabaseClosing(int resultCode);
@@ -126,6 +129,7 @@ protected:
private:
Database &m_database;
sqlite3 *m_databaseHandle;
BusyHandler m_busyHandler;
};
} // namespace Sqlite