mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 11:00:44 -06:00
get setQuery without setTable working again
This commit is contained in:
@@ -23,26 +23,35 @@ void SqliteTableModel::setTable(const QString& table)
|
|||||||
{
|
{
|
||||||
m_sTable = table;
|
m_sTable = table;
|
||||||
|
|
||||||
m_headers.clear();
|
|
||||||
m_headers.push_back("rowid");
|
|
||||||
m_headers.append(m_db->getTableFields(table));
|
|
||||||
|
|
||||||
m_mWhere.clear();
|
m_mWhere.clear();
|
||||||
|
|
||||||
buildQuery();
|
buildQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
QString rtrimChar(const QString& s, QChar c) {
|
||||||
|
QString r = s.trimmed();
|
||||||
|
int i = r.length() - 1;
|
||||||
|
for(; i >= 0 && r.at(i) != c; --i);
|
||||||
|
return r.left(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SqliteTableModel::setQuery(const QString& sQuery)
|
void SqliteTableModel::setQuery(const QString& sQuery)
|
||||||
{
|
{
|
||||||
|
// clear
|
||||||
|
m_mWhere.clear();
|
||||||
|
m_headers.clear();
|
||||||
|
|
||||||
if(!m_db->isOpen())
|
if(!m_db->isOpen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sqlite3_stmt *stmt;
|
sqlite3_stmt *stmt;
|
||||||
m_rowCount = 0;
|
m_rowCount = 0;
|
||||||
m_sQuery = sQuery;
|
m_sQuery = rtrimChar(sQuery, ';');
|
||||||
|
|
||||||
// do a count query to get the full row count in a fast manner
|
// do a count query to get the full row count in a fast manner
|
||||||
QString sCountQuery = QString("SELECT COUNT(*) FROM (%1);").arg(sQuery);
|
QString sCountQuery = QString("SELECT COUNT(*) FROM (%1);").arg(m_sQuery);
|
||||||
m_db->logSQL(sCountQuery, kLogMsg_App);
|
m_db->logSQL(sCountQuery, kLogMsg_App);
|
||||||
QByteArray utf8Query = sCountQuery.toUtf8();
|
QByteArray utf8Query = sCountQuery.toUtf8();
|
||||||
int status = sqlite3_prepare_v2(m_db->_db, utf8Query, utf8Query.size(), &stmt, NULL);
|
int status = sqlite3_prepare_v2(m_db->_db, utf8Query, utf8Query.size(), &stmt, NULL);
|
||||||
@@ -55,6 +64,7 @@ void SqliteTableModel::setQuery(const QString& sQuery)
|
|||||||
QString sCount = QString::fromUtf8((const char *) sqlite3_column_text(stmt, 0));
|
QString sCount = QString::fromUtf8((const char *) sqlite3_column_text(stmt, 0));
|
||||||
m_rowCount = sCount.toInt();
|
m_rowCount = sCount.toInt();
|
||||||
}
|
}
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -63,6 +73,16 @@ void SqliteTableModel::setQuery(const QString& sQuery)
|
|||||||
m_valid = false;
|
m_valid = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// headers
|
||||||
|
utf8Query = sQuery.toUtf8();
|
||||||
|
status = sqlite3_prepare_v2(m_db->_db, utf8Query, utf8Query.size(), &stmt, NULL);
|
||||||
|
if(SQLITE_OK == status)
|
||||||
|
{
|
||||||
|
status = sqlite3_step(stmt);
|
||||||
|
int columns = sqlite3_data_count(stmt);
|
||||||
|
for(int i = 0; i < columns; ++i)
|
||||||
|
m_headers.append(QString::fromUtf8((const char*)sqlite3_column_name(stmt, i)));
|
||||||
}
|
}
|
||||||
sqlite3_finalize(stmt);
|
sqlite3_finalize(stmt);
|
||||||
|
|
||||||
@@ -235,14 +255,19 @@ void SqliteTableModel::fetchData(unsigned int from, unsigned to)
|
|||||||
void SqliteTableModel::buildQuery()
|
void SqliteTableModel::buildQuery()
|
||||||
{
|
{
|
||||||
QString where;
|
QString where;
|
||||||
|
QStringList headers;
|
||||||
|
headers.push_back("rowid");
|
||||||
|
headers.append(m_db->getTableFields(m_sTable));
|
||||||
|
|
||||||
if(m_mWhere.size())
|
if(m_mWhere.size())
|
||||||
{
|
{
|
||||||
where = "WHERE 1=1";
|
where = "WHERE 1=1";
|
||||||
|
|
||||||
for(QMap<int, QString>::const_iterator i=m_mWhere.constBegin();i!=m_mWhere.constEnd();++i)
|
for(QMap<int, QString>::const_iterator i=m_mWhere.constBegin();i!=m_mWhere.constEnd();++i)
|
||||||
where.append(QString(" AND `%1` %2").arg(m_headers.at(i.key())).arg(i.value()));
|
where.append(QString(" AND `%1` %2").arg(headers.at(i.key())).arg(i.value()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString sql = QString("SELECT rowid,* FROM `%1` %2 ORDER BY `%3` %4").arg(m_sTable).arg(where).arg(m_headers.at(m_iSortColumn)).arg(m_sSortOrder);
|
QString sql = QString("SELECT rowid,* FROM `%1` %2 ORDER BY `%3` %4").arg(m_sTable).arg(where).arg(headers.at(m_iSortColumn)).arg(m_sSortOrder);
|
||||||
setQuery(sql);
|
setQuery(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user