From feda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Fri, 27 Jul 2018 23:51:12 -0400 Subject: New upstream version 3.2.1+dfsg1 --- SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h | 40 ++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) (limited to 'SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h') diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h index db9bc02..f45e475 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h @@ -44,6 +44,9 @@ class AbstractDb3 : public AbstractDb AbstractDb3(const QString& name, const QString& path, const QHash& connOptions); ~AbstractDb3(); + bool loadExtension(const QString& filePath, const QString& initFunc = QString()); + bool isComplete(const QString& sql) const; + protected: bool isOpenInternal(); void interruptExecution(); @@ -315,6 +318,31 @@ AbstractDb3::~AbstractDb3() closeInternal(); } +template +bool AbstractDb3::loadExtension(const QString& filePath, const QString& initFunc) +{ + char* errMsg = nullptr; + int res = T::load_extension(dbHandle, filePath.toUtf8().constData(), initFunc.isEmpty() ? nullptr : initFunc.toUtf8().constData(), &errMsg); + if (res != T::OK) + { + dbErrorMessage = QObject::tr("Could not load extension %1: %2").arg(filePath, extractLastError()); + dbErrorCode = res; + if (errMsg) + { + dbErrorMessage = QObject::tr("Could not load extension %1: %2").arg(filePath, QString::fromUtf8(errMsg)); + T::free(errMsg); + } + return false; + } + return true; +} + +template +bool AbstractDb3::isComplete(const QString& sql) const +{ + return T::complete(sql.toUtf8().constData()); +} + template bool AbstractDb3::isOpenInternal() { @@ -358,6 +386,7 @@ bool AbstractDb3::openInternal() return false; } dbHandle = handle; + T::enable_load_extension(dbHandle, 1); return true; } @@ -392,7 +421,6 @@ bool AbstractDb3::initAfterCreated() template void AbstractDb3::initAfterOpen() { - T::enable_load_extension(dbHandle, true); registerDefaultCollationRequestHandler();; exec("PRAGMA foreign_keys = 1;", Flag::NO_LOCK); exec("PRAGMA recursive_triggers = 1;", Flag::NO_LOCK); @@ -864,8 +892,6 @@ bool AbstractDb3::Query::execInternal(const QList& args) ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite3, flags.testFlag(Db::Flag::NO_LOCK)); logSql(db.data(), query, args, flags); - QueryWithParamCount queryWithParams = getQueryWithParamCount(query, Dialect::Sqlite3); - int res; if (stmt) res = resetStmt(); @@ -875,8 +901,14 @@ bool AbstractDb3::Query::execInternal(const QList& args) if (res != T::OK) return false; + int maxParamIdx = args.size(); + if (!flags.testFlag(Db::Flag::SKIP_PARAM_COUNTING)) + { + QueryWithParamCount queryWithParams = getQueryWithParamCount(query, Dialect::Sqlite3); + maxParamIdx = qMin(maxParamIdx, queryWithParams.second); + } - for (int paramIdx = 1, argCount = args.size(); paramIdx <= queryWithParams.second && paramIdx <= argCount; paramIdx++) + for (int paramIdx = 1; paramIdx <= maxParamIdx; paramIdx++) { res = bindParam(paramIdx, args[paramIdx-1]); if (res != T::OK) -- cgit v1.2.3