try to use sql to display label names

This commit is contained in:
Martin Rotter 2023-06-14 10:24:30 +02:00
parent d866378dfd
commit 4c238d2e05
3 changed files with 35 additions and 11 deletions

View File

@ -12,7 +12,7 @@ MessagesModelSqlLayer::MessagesModelSqlLayer()
m_db = qApp->database()->driver()->connection(QSL("MessagesModel")); m_db = qApp->database()->driver()->connection(QSL("MessagesModel"));
// Used in <x>: SELECT <x1>, <x2> FROM ....; // Used in <x>: SELECT <x1>, <x2> FROM ....;
m_fieldNames = DatabaseQueries::messageTableAttributes(false); m_fieldNames = DatabaseQueries::messageTableAttributes(false, m_db.driverName() == QSL(APP_DB_SQLITE_DRIVER));
// Used in <x>: SELECT ... FROM ... ORDER BY <x1> DESC, <x2> ASC; // Used in <x>: SELECT ... FROM ... ORDER BY <x1> DESC, <x2> ASC;
m_orderByNames[MSG_DB_ID_INDEX] = QSL("Messages.id"); m_orderByNames[MSG_DB_ID_INDEX] = QSL("Messages.id");

View File

@ -13,7 +13,7 @@
#include <QUrl> #include <QUrl>
#include <QVariant> #include <QVariant>
QMap<int, QString> DatabaseQueries::messageTableAttributes(bool only_msg_table) { QMap<int, QString> DatabaseQueries::messageTableAttributes(bool only_msg_table, bool is_sqlite) {
QMap<int, QString> field_names; QMap<int, QString> field_names;
field_names[MSG_DB_ID_INDEX] = QSL("Messages.id"); field_names[MSG_DB_ID_INDEX] = QSL("Messages.id");
@ -38,7 +38,17 @@ QMap<int, QString> DatabaseQueries::messageTableAttributes(bool only_msg_table)
"ELSE 'false' " "ELSE 'false' "
"END AS has_enclosures"); "END AS has_enclosures");
field_names[MSG_DB_LABELS] = QSL("1 as msg_labels"); if (is_sqlite) {
field_names[MSG_DB_LABELS] =
QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE \"%.\" || "
"Labels.custom_id || \".%\") as msg_labels");
}
else {
field_names[MSG_DB_LABELS] =
QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE CONCAT(\"%.\", "
"Labels.custom_id, \".%\")) as msg_labels");
}
field_names[MSG_DB_LABELS_IDS] = QSL("Messages.labels"); field_names[MSG_DB_LABELS_IDS] = QSL("Messages.labels");
// TODO: zpomaluje zobrazení seznamu zpráv // TODO: zpomaluje zobrazení seznamu zpráv
@ -877,7 +887,9 @@ QList<Message> DatabaseQueries::getUndeletedMessagesWithLabel(const QSqlDatabase
" Messages.is_pdeleted = 0 AND " " Messages.is_pdeleted = 0 AND "
" Messages.account_id = :account_id AND " " Messages.account_id = :account_id AND "
" Messages.labels LIKE :label;") " Messages.labels LIKE :label;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId());
q.bindValue(QSL(":label"), QSL("%.%1.%").arg(label->customId())); q.bindValue(QSL(":label"), QSL("%.%1.%").arg(label->customId()));
@ -917,7 +929,9 @@ QList<Message> DatabaseQueries::getUndeletedLabelledMessages(const QSqlDatabase&
" Messages.is_pdeleted = 0 AND " " Messages.is_pdeleted = 0 AND "
" Messages.account_id = :account_id AND " " Messages.account_id = :account_id AND "
" LENGTH(Messages.labels) > 2;") " LENGTH(Messages.labels) > 2;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
if (q.exec()) { if (q.exec()) {
@ -954,7 +968,9 @@ QList<Message> DatabaseQueries::getUndeletedImportantMessages(const QSqlDatabase
"FROM Messages " "FROM Messages "
"WHERE is_important = 1 AND is_deleted = 0 AND " "WHERE is_important = 1 AND is_deleted = 0 AND "
" is_pdeleted = 0 AND account_id = :account_id;") " is_pdeleted = 0 AND account_id = :account_id;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
if (q.exec()) { if (q.exec()) {
@ -989,7 +1005,9 @@ QList<Message> DatabaseQueries::getUndeletedUnreadMessages(const QSqlDatabase& d
"FROM Messages " "FROM Messages "
"WHERE is_read = 0 AND is_deleted = 0 AND " "WHERE is_read = 0 AND is_deleted = 0 AND "
" is_pdeleted = 0 AND account_id = :account_id;") " is_pdeleted = 0 AND account_id = :account_id;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
if (q.exec()) { if (q.exec()) {
@ -1027,7 +1045,9 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForFeed(const QSqlDatabase&
"FROM Messages " "FROM Messages "
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND " "WHERE is_deleted = 0 AND is_pdeleted = 0 AND "
" feed = :feed AND account_id = :account_id;") " feed = :feed AND account_id = :account_id;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":feed"), feed_custom_id); q.bindValue(QSL(":feed"), feed_custom_id);
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
@ -1062,7 +1082,9 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForBin(const QSqlDatabase& d
q.prepare(QSL("SELECT %1 " q.prepare(QSL("SELECT %1 "
"FROM Messages " "FROM Messages "
"WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;") "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
if (q.exec()) { if (q.exec()) {
@ -1096,7 +1118,9 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForAccount(const QSqlDatabas
q.prepare(QSL("SELECT %1 " q.prepare(QSL("SELECT %1 "
"FROM Messages " "FROM Messages "
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;") "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")
.arg(messageTableAttributes(true).values().join(QSL(", ")))); .arg(messageTableAttributes(true, db.driverName() == QSL(APP_DB_SQLITE_DRIVER))
.values()
.join(QSL(", "))));
q.bindValue(QSL(":account_id"), account_id); q.bindValue(QSL(":account_id"), account_id);
if (q.exec()) { if (q.exec()) {

View File

@ -27,7 +27,7 @@ struct ArticleCounts {
class DatabaseQueries { class DatabaseQueries {
public: public:
static QMap<int, QString> messageTableAttributes(bool only_msg_table); static QMap<int, QString> messageTableAttributes(bool only_msg_table, bool is_sqlite);
// Custom data serializers. // Custom data serializers.
static QString serializeCustomData(const QVariantHash& data); static QString serializeCustomData(const QVariantHash& data);