aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite/sqlitedatabasebackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/sqlite/sqlitedatabasebackend.cpp')
-rw-r--r--src/libs/sqlite/sqlitedatabasebackend.cpp116
1 files changed, 51 insertions, 65 deletions
diff --git a/src/libs/sqlite/sqlitedatabasebackend.cpp b/src/libs/sqlite/sqlitedatabasebackend.cpp
index 4d5b350801..cad3ed879b 100644
--- a/src/libs/sqlite/sqlitedatabasebackend.cpp
+++ b/src/libs/sqlite/sqlitedatabasebackend.cpp
@@ -37,12 +37,15 @@
#include "sqlite3.h"
+extern "C" {
+int sqlite3_carray_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi);
+}
+
namespace Sqlite {
DatabaseBackend::DatabaseBackend(Database &database)
- : m_database(database),
- m_databaseHandle(nullptr),
- m_cachedTextEncoding(Utf8)
+ : m_database(database)
+ , m_databaseHandle(nullptr)
{
}
@@ -65,13 +68,15 @@ void DatabaseBackend::activateMultiThreading()
static void sqliteLog(void*,int errorCode,const char *errorMessage)
{
- qWarning() << sqlite3_errstr(errorCode) << errorMessage;
+ std::cout << "Sqlite " << sqlite3_errstr(errorCode) << ": " << errorMessage << std::endl;
}
void DatabaseBackend::activateLogging()
{
- int resultCode = sqlite3_config(SQLITE_CONFIG_LOG, sqliteLog, nullptr);
- checkIfLoogingIsActivated(resultCode);
+ if (qEnvironmentVariableIsSet("QTC_SQLITE_LOGGING")) {
+ int resultCode = sqlite3_config(SQLITE_CONFIG_LOG, sqliteLog, nullptr);
+ checkIfLoogingIsActivated(resultCode);
+ }
}
void DatabaseBackend::initializeSqliteLibrary()
@@ -103,7 +108,9 @@ void DatabaseBackend::open(Utils::SmallStringView databaseFilePath, OpenMode mod
checkDatabaseCouldBeOpened(resultCode);
- cacheTextEncoding();
+ resultCode = sqlite3_carray_init(m_databaseHandle, nullptr, nullptr);
+
+ checkCarrayCannotBeIntialized(resultCode);
}
sqlite3 *DatabaseBackend::sqliteDatabaseHandle() const
@@ -135,24 +142,6 @@ JournalMode DatabaseBackend::journalMode()
return pragmaToJournalMode(pragmaValue("journal_mode"));
}
-void DatabaseBackend::setTextEncoding(TextEncoding textEncoding)
-{
- setPragmaValue("encoding", textEncodingToPragma(textEncoding));
- cacheTextEncoding();
-}
-
-TextEncoding DatabaseBackend::textEncoding()
-{
- return m_cachedTextEncoding;
-}
-
-
-Utils::SmallStringVector DatabaseBackend::columnNames(Utils::SmallStringView tableName)
-{
- ReadWriteStatement statement("SELECT * FROM " + tableName, m_database);
- return statement.columnNames();
-}
-
int DatabaseBackend::changesCount() const
{
return sqlite3_changes(sqliteDatabaseHandle());
@@ -232,11 +221,6 @@ int DatabaseBackend::busyHandlerCallback(void *, int counter)
return true;
}
-void DatabaseBackend::cacheTextEncoding()
-{
- m_cachedTextEncoding = pragmaToTextEncoding(pragmaValue("encoding"));
-}
-
void DatabaseBackend::checkForOpenDatabaseWhichCanBeClosed()
{
if (m_databaseHandle == nullptr)
@@ -272,8 +256,17 @@ void DatabaseBackend::checkDatabaseCouldBeOpened(int resultCode)
return;
default:
closeWithoutException();
- throw Exception("SqliteDatabaseBackend::SqliteDatabaseBackend: database cannot be opened:", sqlite3_errmsg(sqliteDatabaseHandle()));
- }
+ throw Exception(
+ "SqliteDatabaseBackend::SqliteDatabaseBackend: database cannot be opened:",
+ sqlite3_errmsg(sqliteDatabaseHandle()));
+ }
+}
+
+void DatabaseBackend::checkCarrayCannotBeIntialized(int resultCode)
+{
+ if (resultCode != SQLITE_OK)
+ throwDatabaseIsNotOpen(
+ "SqliteDatabaseBackend: database cannot be opened because carray failed!");
}
void DatabaseBackend::checkPragmaValue(Utils::SmallStringView databaseValue,
@@ -292,31 +285,35 @@ void DatabaseBackend::checkDatabaseHandleIsNotNull() const
void DatabaseBackend::checkIfMultithreadingIsActivated(int resultCode)
{
if (resultCode != SQLITE_OK)
- throwException("SqliteDatabaseBackend::activateMultiThreading: multithreading can't be activated!");
+ throwExceptionStatic(
+ "SqliteDatabaseBackend::activateMultiThreading: multithreading can't be activated!");
}
void DatabaseBackend::checkIfLoogingIsActivated(int resultCode)
{
if (resultCode != SQLITE_OK)
- throwException("SqliteDatabaseBackend::activateLogging: logging can't be activated!");
+ throwExceptionStatic("SqliteDatabaseBackend::activateLogging: logging can't be activated!");
}
void DatabaseBackend::checkMmapSizeIsSet(int resultCode)
{
if (resultCode != SQLITE_OK)
- throwException("SqliteDatabaseBackend::checkMmapSizeIsSet: mmap size can't be changed!");
+ throwExceptionStatic(
+ "SqliteDatabaseBackend::checkMmapSizeIsSet: mmap size can't be changed!");
}
void DatabaseBackend::checkInitializeSqliteLibraryWasSuccesful(int resultCode)
{
if (resultCode != SQLITE_OK)
- throwException("SqliteDatabaseBackend::initializeSqliteLibrary: SqliteLibrary cannot initialized!");
+ throwExceptionStatic(
+ "SqliteDatabaseBackend::initializeSqliteLibrary: SqliteLibrary cannot initialized!");
}
void DatabaseBackend::checkShutdownSqliteLibraryWasSuccesful(int resultCode)
{
if (resultCode != SQLITE_OK)
- throwException("SqliteDatabaseBackend::shutdownSqliteLibrary: SqliteLibrary cannot be shutdowned!");
+ throwExceptionStatic(
+ "SqliteDatabaseBackend::shutdownSqliteLibrary: SqliteLibrary cannot be shutdowned!");
}
void DatabaseBackend::checkIfLogCouldBeCheckpointed(int resultCode)
@@ -344,13 +341,11 @@ int indexOfPragma(Utils::SmallStringView pragma, const Utils::SmallStringView (&
}
}
-constexpr const Utils::SmallStringView journalModeStrings[] = {
- "delete",
- "truncate",
- "persist",
- "memory",
- "wal"
-};
+const Utils::SmallStringView journalModeStrings[] = {"delete",
+ "truncate",
+ "persist",
+ "memory",
+ "wal"};
Utils::SmallStringView DatabaseBackend::journalModeToPragma(JournalMode journalMode)
{
@@ -367,27 +362,6 @@ JournalMode DatabaseBackend::pragmaToJournalMode(Utils::SmallStringView pragma)
return static_cast<JournalMode>(index);
}
-constexpr const Utils::SmallStringView textEncodingStrings[] = {
- "UTF-8",
- "UTF-16le",
- "UTF-16be"
-};
-
-Utils::SmallStringView DatabaseBackend::textEncodingToPragma(TextEncoding textEncoding)
-{
- return textEncodingStrings[textEncoding];
-}
-
-TextEncoding DatabaseBackend::pragmaToTextEncoding(Utils::SmallStringView pragma)
-{
- int index = indexOfPragma(pragma, textEncodingStrings);
-
- if (index < 0)
- throwExceptionStatic("SqliteDatabaseBackend::pragmaToTextEncoding: pragma can't be transformed in a text encoding enumeration!");
-
- return static_cast<TextEncoding>(index);
-}
-
int DatabaseBackend::openMode(OpenMode mode)
{
int sqliteMode = SQLITE_OPEN_CREATE;
@@ -426,6 +400,18 @@ void DatabaseBackend::walCheckpointFull()
}
}
+void DatabaseBackend::setUpdateHook(
+ void *object,
+ void (*callback)(void *object, int, char const *database, char const *, long long rowId))
+{
+ sqlite3_update_hook(m_databaseHandle, callback, object);
+}
+
+void DatabaseBackend::resetUpdateHook()
+{
+ sqlite3_update_hook(m_databaseHandle, nullptr, nullptr);
+}
+
void DatabaseBackend::throwExceptionStatic(const char *whatHasHappens)
{
throw Exception(whatHasHappens);