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
This commit is contained in:
2026-08-26 11:14:39 +02:00
parent 6f348b17f0
commit 8b147013d8
+7 -6
View File
@@ -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<MailItem> 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<MailItem> 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);