From 8b147013d862c4fe8e3cb53519f42dd63f4b4340 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 26 Aug 2026 11:14:39 +0200 Subject: [PATCH] fix: Parameter count mismatch in findByFolderIdPaginated and countByFolderId - Move query.bindValue() calls AFTER query.prepare() in both methods - Remove duplicate bindValue(':search') in findByFolderIdPaginated - This fixes 'Parameter count mismatch' error when fetching paginated emails --- src/db/dao/mailitemdao.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/db/dao/mailitemdao.cpp b/src/db/dao/mailitemdao.cpp index 1f48720..a501271 100644 --- a/src/db/dao/mailitemdao.cpp +++ b/src/db/dao/mailitemdao.cpp @@ -476,12 +476,9 @@ int MailItemDao::countByFolderId(int folderId, const QString& searchFilter, bool { QSqlDatabase db = DatabaseManager::instance().database(); QString sql = "SELECT COUNT(*) FROM MailCopy WHERE folderId = :folderId"; - QSqlQuery query(db); - query.bindValue(":folderId", folderId); if (!searchFilter.isEmpty()) { sql += " AND (subject LIKE :search OR sender LIKE :search OR recipient LIKE :search OR bodyHtml LIKE :search)"; - query.bindValue(":search", "%" + searchFilter + "%"); } if (unreadOnly) { sql += " AND read = 0"; @@ -496,7 +493,13 @@ int MailItemDao::countByFolderId(int folderId, const QString& searchFilter, bool sql += " AND isPinned = 1"; } + QSqlQuery query(db); query.prepare(sql); + query.bindValue(":folderId", folderId); + + if (!searchFilter.isEmpty()) { + query.bindValue(":search", "%" + searchFilter + "%"); + } if (!query.exec()) { qWarning() << "Failed to count mails by folder:" << query.lastError().text(); return 0; @@ -582,11 +585,8 @@ QVector MailItemDao::findByFolderIdPaginated(int folderId, int offset, QSqlDatabase db = DatabaseManager::instance().database(); QString sql = "SELECT id, folderId, messageId, subject, sender, recipient, date, read, flagged, hasAttachment, size, fileId, uid, bodyHtml, toAddr, ccAddr, bccAddr, threadId, inReplyTo, \"references\", isPinned FROM MailCopy WHERE folderId = :folderId"; - QSqlQuery query(db); - if (!searchFilter.isEmpty()) { sql += " AND (subject LIKE :search OR sender LIKE :search OR recipient LIKE :search OR bodyHtml LIKE :search)"; - query.bindValue(":search", "%" + searchFilter + "%"); } if (unreadOnly) { sql += " AND read = 0"; @@ -603,6 +603,7 @@ QVector MailItemDao::findByFolderIdPaginated(int folderId, int offset, sql += " ORDER BY date DESC LIMIT :limit OFFSET :offset"; + QSqlQuery query(db); query.prepare(sql); query.bindValue(":folderId", folderId); query.bindValue(":limit", limit);