From 56a8a0e78903dc1878985eb66ae27dc30e28dc71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sun, 12 Apr 2026 18:23:39 +0200 Subject: [PATCH] Special handling of COUNT aggregate function --- src/databasetree.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/databasetree.cpp b/src/databasetree.cpp index 698499e..6a55fb8 100644 --- a/src/databasetree.cpp +++ b/src/databasetree.cpp @@ -13,7 +13,7 @@ DatabaseTreeSettings::DatabaseTreeSettings(const QStringList &data, QStringList keywords, QWidget *parent) : QDialog(parent) { - setWindowTitle(tr("Add tree filter")); + setWindowTitle(tr("Add tree grouping")); QVBoxLayout *vlayout = new QVBoxLayout(this); setLayout(vlayout); @@ -324,13 +324,16 @@ QSqlQuery DatabaseTree::getGroupQuery(const QString &aggregateFunc) const if(i == _keys.size() - 1) { QString tmp = aggregateFunc + "(" + cols.last() + ")"; - cols.last() = tmp; + if(aggregateFunc == "COUNT") + cols.append("COUNT(*)"); + else + cols.last() = tmp; } } QStringList group = cols; group.removeLast(); - QString sql = "SELECT " + cols.join(',') + " FROM fits_files AS f" + join + " GROUP BY " + group.join(','); + QString sql = "SELECT " + cols.join(',') + " FROM fits_files AS f" + join + " GROUP BY " + group.join(',') + " ORDER BY " + cols.join(" NULLS LAST,") + " NULLS LAST"; QSqlQuery query(sql, _database->db()); for(auto &val : _keys) @@ -371,7 +374,7 @@ void DatabaseTree::prepareQueries() else if(_keys[i] == "DATE-OBS_YEAR-MONTH-DAY") col = QString("STRFTIME('%Y-%m-%d', h%1.value)").arg(i); - sql = QString("SELECT %1 FROM fits_files AS f").arg(col) + join + where + QString(" GROUP BY %1 ORDER BY %1").arg(col); + sql = QString("SELECT %1 FROM fits_files AS f").arg(col) + join + where + QString(" GROUP BY %1 ORDER BY %1 NULLS LAST").arg(col); qDebug() << "Tree query for" << _keys[i] << sql; QSqlQuery query(sql, _database->db()); @@ -576,7 +579,10 @@ void DatabaseTreeView::setQuery(const QString &func) if(!func.isEmpty()) { QString tmp = func + "(" + keys.last() + ")"; - keys.last() = tmp; + if(func == "COUNT") + keys.append("COUNT"); + else + keys.last() = tmp; } for(auto &key : keys) _sqlModel->setHeaderData(i++, Qt::Horizontal, key);