diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 2b888d9a..ee5bd744 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -639,11 +639,8 @@ bool DBBrowserDB::dump(const QString& filePath, it.remove(); } else { // Otherwise get the number of records in this table - SqliteTableModel m(*this); - m.setQuery(QString("SELECT COUNT(*) FROM %1;") - .arg(sqlb::ObjectIdentifier("main", it.value()->name()).toString())); - if(m.completeCache()) - numRecordsTotal += m.data(m.index(0, 0)).toUInt(); + numRecordsTotal += querySingeValueFromDb(QString("SELECT COUNT(*) FROM %1;") + .arg(sqlb::ObjectIdentifier("main", it.value()->name()).toString())).toUInt(); } } @@ -955,6 +952,35 @@ bool DBBrowserDB::executeMultiSQL(const QString& statement, bool dirty, bool log return true; } +QVariant DBBrowserDB::querySingeValueFromDb(const QString& statement, bool log) +{ + waitForDbRelease(); + if(!_db) + return QVariant(); + + if(log) + logSQL(statement, kLogMsg_App); + + QByteArray utf8Query = statement.toUtf8(); + sqlite3_stmt* stmt; + if(sqlite3_prepare_v2(_db, utf8Query, utf8Query.size(), &stmt, nullptr) == SQLITE_OK) + { + if(sqlite3_step(stmt) == SQLITE_ROW && sqlite3_column_count(stmt) > 0) + { + if(sqlite3_column_type(stmt, 0) != SQLITE_NULL) + { + int bytes = sqlite3_column_bytes(stmt, 0); + if(bytes) + return QByteArray(static_cast(sqlite3_column_blob(stmt, 0)), bytes); + else + return ""; + } + } + } + + return QVariant(); +} + bool DBBrowserDB::getRow(const sqlb::ObjectIdentifier& table, const QString& rowid, QVector& rowdata) { waitForDbRelease(); diff --git a/src/sqlitedb.h b/src/sqlitedb.h index 5ec75ad3..573b1917 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -88,9 +88,13 @@ public: bool revertToSavepoint(const QString& pointname = "RESTOREPOINT"); bool releaseAllSavepoints(); bool revertAll(); + bool dump(const QString& filename, const QStringList& tablesToDump, bool insertColNames, bool insertNew, bool exportSchema, bool exportData, bool keepOldSchema); + bool executeSQL(QString statement, bool dirtyDB = true, bool logsql = true); bool executeMultiSQL(const QString& statement, bool dirty = true, bool log = false); + QVariant querySingeValueFromDb(const QString& statement, bool log = true); + const QString& lastError() const { return lastErrorMessage; } /**