SQL refactoring.
This commit is contained in:
parent
74194ea6a6
commit
78d6301f35
@ -26,10 +26,6 @@
|
||||
#include "services/abstract/serviceroot.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
|
||||
#include <QSqlRecord>
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
|
||||
|
||||
MessagesModel::MessagesModel(QObject *parent)
|
||||
: QSqlTableModel(parent, qApp->database()->connection(QSL("MessagesModel"), DatabaseFactory::FromSettings)),
|
||||
@ -259,7 +255,7 @@ bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DatabaseQueries::markMessageRead(database(), message.m_id, read)) {
|
||||
if (DatabaseQueries::markMessagesRead(database(), QStringList() << QString::number(message.m_id), read)) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, QList<Message>() << message, read);
|
||||
}
|
||||
else {
|
||||
@ -300,12 +296,9 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
||||
}
|
||||
|
||||
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages) {
|
||||
QSqlQuery query_read_msg(database());
|
||||
QStringList message_ids;
|
||||
QList<QPair<Message,RootItem::Importance> > message_states;
|
||||
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
// Obtain IDs of all desired messages.
|
||||
foreach (const QModelIndex &message, messages) {
|
||||
const Message msg = messageAt(message.row());
|
||||
@ -321,8 +314,7 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
|
||||
return false;
|
||||
}
|
||||
|
||||
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);"))
|
||||
.arg(message_ids.join(QSL(", "))))) {
|
||||
if (DatabaseQueries::switchMessagesImportance(database(), message_ids)) {
|
||||
fetchAllData();
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem, message_states);
|
||||
}
|
||||
@ -347,19 +339,16 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QSqlQuery query_read_msg(database());
|
||||
QString sql_delete_query;
|
||||
|
||||
query_read_msg.setForwardOnly(true);
|
||||
bool deleted;
|
||||
|
||||
if (m_selectedItem->kind() != RootItemKind::Bin) {
|
||||
sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 1 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
|
||||
deleted = DatabaseQueries::deleteOrRestoreMessagesToFromBin(database(), message_ids, true);
|
||||
}
|
||||
else {
|
||||
sql_delete_query = QString(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
|
||||
deleted = DatabaseQueries::permanentlyDeleteMessages(database(), message_ids);
|
||||
}
|
||||
|
||||
if (query_read_msg.exec(sql_delete_query)) {
|
||||
if (deleted) {
|
||||
fetchAllData();
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesDelete(m_selectedItem, msgs);
|
||||
}
|
||||
@ -384,13 +373,8 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, RootIt
|
||||
return false;
|
||||
}
|
||||
|
||||
QSqlQuery query_read_msg(database());
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
if (query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);"))
|
||||
.arg(message_ids.join(QSL(", ")), read == RootItem::Read ? QSL("1") : QSL("0")))) {
|
||||
if (DatabaseQueries::markMessagesRead(database(), message_ids, read)) {
|
||||
fetchAllData();
|
||||
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, msgs, read);
|
||||
}
|
||||
else {
|
||||
@ -414,14 +398,8 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QSqlQuery query_read_msg(database());
|
||||
QString sql_delete_query = QString(QSL("UPDATE Messages SET is_deleted = 0 WHERE id IN (%1);")).arg(message_ids.join(QSL(", ")));
|
||||
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
if (query_read_msg.exec(sql_delete_query)) {
|
||||
if (DatabaseQueries::deleteOrRestoreMessagesToFromBin(database(), message_ids, false)) {
|
||||
fetchAllData();
|
||||
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, msgs);
|
||||
}
|
||||
else {
|
||||
|
@ -19,13 +19,13 @@
|
||||
|
||||
#include "miscellaneous/application.h"
|
||||
#include "network-web/webfactory.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
#include "gui/messagebox.h"
|
||||
#include "gui/dialogs/formmain.h"
|
||||
#include "services/abstract/serviceroot.h"
|
||||
|
||||
#include <QScrollBar>
|
||||
#include <QToolBar>
|
||||
#include <QSqlQuery>
|
||||
#include <QToolTip>
|
||||
|
||||
|
||||
@ -136,14 +136,9 @@ void MessagePreviewer::markMessageAsRead() {
|
||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
||||
QList<Message>() << m_message,
|
||||
RootItem::Read)) {
|
||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"));
|
||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
||||
query_read_msg.bindValue(QSL(":read"), 1);
|
||||
query_read_msg.exec();
|
||||
|
||||
DatabaseQueries::markMessagesRead(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||
QStringList() << QString::number(m_message.m_id),
|
||||
RootItem::Read);
|
||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
||||
QList<Message>() << m_message,
|
||||
RootItem::Read);
|
||||
@ -161,14 +156,9 @@ void MessagePreviewer::markMessageAsUnread() {
|
||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
||||
QList<Message>() << m_message,
|
||||
RootItem::Unread)) {
|
||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"));
|
||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
||||
query_read_msg.bindValue(QSL(":read"), 0);
|
||||
query_read_msg.exec();
|
||||
|
||||
DatabaseQueries::markMessagesRead(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||
QStringList() << QString::number(m_message.m_id),
|
||||
RootItem::Unread);
|
||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
||||
QList<Message>() << m_message,
|
||||
RootItem::Unread);
|
||||
@ -188,13 +178,8 @@ void MessagePreviewer::switchMessageImportance(bool checked) {
|
||||
m_message.m_isImportant ?
|
||||
RootItem::NotImportant :
|
||||
RootItem::Important))) {
|
||||
QSqlQuery query_read_msg(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings));
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
query_read_msg.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"));
|
||||
query_read_msg.bindValue(QSL(":id"), m_message.m_id);
|
||||
query_read_msg.bindValue(QSL(":important"), (int) checked);
|
||||
query_read_msg.exec();
|
||||
DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
||||
QStringList() << QString::number(m_message.m_id));
|
||||
|
||||
m_root->getParentServiceRoot()->onBeforeSwitchMessageImportance(m_root.data(),
|
||||
QList<ImportanceChange>() << ImportanceChange(m_message,
|
||||
|
@ -20,35 +20,50 @@
|
||||
#include <QVariant>
|
||||
|
||||
|
||||
bool DatabaseQueries::markMessageRead(QSqlDatabase db, int id, RootItem::ReadStatus read) {
|
||||
bool DatabaseQueries::markMessagesRead(QSqlDatabase db, const QStringList &ids, RootItem::ReadStatus read) {
|
||||
QSqlQuery query_read_msg(db);
|
||||
query_read_msg.setForwardOnly(true);
|
||||
|
||||
if (!query_read_msg.prepare(QSL("UPDATE Messages SET is_read = :read WHERE id = :id;"))) {
|
||||
qWarning("Query preparation failed for message read change.");
|
||||
return false;
|
||||
}
|
||||
|
||||
query_read_msg.bindValue(QSL(":id"), id);
|
||||
query_read_msg.bindValue(QSL(":read"), (int) read);
|
||||
|
||||
return query_read_msg.exec();
|
||||
return query_read_msg.exec(QString(QSL("UPDATE Messages SET is_read = %2 WHERE id IN (%1);"))
|
||||
.arg(ids.join(QSL(", ")), read == RootItem::Read ? QSL("1") : QSL("0")));
|
||||
}
|
||||
|
||||
bool DatabaseQueries::markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance) {
|
||||
QSqlQuery query_importance_msg(db);
|
||||
query_importance_msg.setForwardOnly(true);
|
||||
QSqlQuery q;(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
if (!query_importance_msg.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"))) {
|
||||
if (!q.prepare(QSL("UPDATE Messages SET is_important = :important WHERE id = :id;"))) {
|
||||
qWarning("Query preparation failed for message importance switch.");
|
||||
return false;
|
||||
}
|
||||
|
||||
query_importance_msg.bindValue(QSL(":id"), id);
|
||||
query_importance_msg.bindValue(QSL(":important"), (int) importance);
|
||||
q.bindValue(QSL(":id"), id);
|
||||
q.bindValue(QSL(":important"), (int) importance);
|
||||
|
||||
// Commit changes.
|
||||
return query_importance_msg.exec();
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
bool DatabaseQueries::switchMessagesImportance(QSqlDatabase db, const QStringList &ids) {
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
return q.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);")).arg(ids.join(QSL(", "))));
|
||||
}
|
||||
|
||||
bool DatabaseQueries::permanentlyDeleteMessages(QSqlDatabase db, const QStringList &ids) {
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
return q.exec(QString(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);")).arg(ids.join(QSL(", "))));
|
||||
}
|
||||
|
||||
bool DatabaseQueries::deleteOrRestoreMessagesToFromBin(QSqlDatabase db, const QStringList &ids, bool deleted) {
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
return q.exec(QString(QSL("UPDATE Messages SET is_deleted = %2 WHERE id IN (%1);")).arg(ids.join(QSL(", ")),
|
||||
QString::number(deleted ? 1 : 0)));
|
||||
}
|
||||
|
||||
DatabaseQueries::DatabaseQueries() {
|
||||
|
@ -25,8 +25,11 @@
|
||||
|
||||
class DatabaseQueries {
|
||||
public:
|
||||
static bool markMessageRead(QSqlDatabase db, int id, RootItem::ReadStatus read);
|
||||
static bool markMessagesRead(QSqlDatabase db, const QStringList &ids, RootItem::ReadStatus read);
|
||||
static bool markMessageImportant(QSqlDatabase db, int id, RootItem::Importance importance);
|
||||
static bool switchMessagesImportance(QSqlDatabase db, const QStringList &ids);
|
||||
static bool permanentlyDeleteMessages(QSqlDatabase db, const QStringList &ids);
|
||||
static bool deleteOrRestoreMessagesToFromBin(QSqlDatabase db, const QStringList &ids, bool deleted);
|
||||
|
||||
private:
|
||||
explicit DatabaseQueries();
|
||||
|
Loading…
x
Reference in New Issue
Block a user