Результатов, возвращаемых моего QSqlQuery
всегда в том же порядке, независимо от ORDER BY
состояния:QSqlQuery игнорируя порядок сортировки для SQLite DB
void Sy_loggingModel::reload()
{
auto query = d_->buildQuery();
query.setForwardOnly(true);
if (!query.exec()) {
throw Sy_exception(QObject::tr("Failed to query logging data: ") +
query.lastError().text());
}
beginResetModel();
qDebug() << query.lastQuery()
<< d_->filter_ // First ? param
<< d_->sortedColumn_; // Second ? param
d_->entries_.clear();
while (query.next()) {
auto timestamp = query.value(1).toLongLong();
auto level = query.value(2).toInt();
d_->entries_ << Sy_loggingModel_d::Entry{
query.value(0).toLongLong(),
QDateTime::fromMSecsSinceEpoch(timestamp).toString(),
static_cast<Sy_loggerInterface::DebugLevel>(level),
query.value(3).toString() };
qDebug() << "\t" << query.value(0).toLongLong()
<< timestamp
<< level
<< query.value(3).toString();
}
endResetModel();
}
производит этот выход при чередуя порядки сортировки:
"SELECT rowid, timestamp, debugLevel, message FROM Sy_logger WHERE rowid >= ? AND debugLevel IN (0, 1, 2) ORDER BY ? DESC;" 0 1
1 1415399097350 0 "Opened database ./logs/Syren2.log"
2 1415399097382 1 "Listening on port 23000"
3 1415399418377 2 "New log rotation settings received, Metric: 0, Interval: 720"
4 1416178611851 2 "Opened database ./logs/Syren2.log"
5 1416178611852 2 "Listening on port 23000"
6 1416178612776 2 "New log rotation settings received, Metric: 0, Interval: 720"
"SELECT rowid, timestamp, debugLevel, message FROM Sy_logger WHERE rowid >= ? AND debugLevel IN (0, 1, 2) ORDER BY ? ASC;" 0 1
1 1415399097350 0 "Opened database ./logs/Syren2.log"
2 1415399097382 1 "Listening on port 23000"
3 1415399418377 2 "New log rotation settings received, Metric: 0, Interval: 720"
4 1416178611851 2 "Opened database ./logs/Syren2.log"
5 1416178611852 2 "Listening on port 23000"
6 1416178612776 2 "New log rotation settings received, Metric: 0, Interval: 720"
Оператор SQL возвращает ожидаемый результат при использовании из командной строки. Какие-либо предложения? Я использую Qt v5.3.2.
Похоже, что вы используете подготовленный запрос, но ваш примерный код не включает ту часть, где построен запрос. – MrEricSir
@MrEricSir Вы правы, я не чувствовал необходимости показывать код, поскольку я даю его вывод, возвращенный 'QSqlQuery :: lastQuery()' - это важный бит. – cmannett85