Construct SQL queries for the model manually. This will greatly help in the future.

This commit is contained in:
martinrotter 2017-05-04 14:38:07 +02:00
parent 33981c350a
commit 905d3c533d
6 changed files with 23 additions and 10 deletions

View File

@ -84,7 +84,7 @@ Message Message::fromSqlRecord(const QSqlRecord &record, bool *result) {
message.m_id = record.value(MSG_DB_ID_INDEX).toInt();
message.m_isRead = record.value(MSG_DB_READ_INDEX).toBool();
message.m_isImportant = record.value(MSG_DB_IMPORTANT_INDEX).toBool();
message.m_feedId = record.value(MSG_DB_FEED_INDEX).toString();
message.m_feedId = record.value(MSG_DB_FEED_CUSTOM_ID_INDEX).toString();
message.m_title = record.value(MSG_DB_TITLE_INDEX).toString();
message.m_url = record.value(MSG_DB_URL_INDEX).toString();
message.m_author = record.value(MSG_DB_AUTHOR_INDEX).toString();

View File

@ -39,8 +39,6 @@ MessagesModel::MessagesModel(QObject *parent)
// via model, but via DIRECT SQL calls are used to do persistent messages.
setEditStrategy(QSqlTableModel::OnManualSubmit);
setTable(QSL("Messages"));
setRelation(MSG_DB_FEED_INDEX, QSqlRelation("Feeds", "custom_id", "title"));
loadMessages(nullptr);
}
@ -76,7 +74,7 @@ void MessagesModel::loadMessages(RootItem *item) {
m_selectedItem = item;
if (item == nullptr) {
setFilter("true != true");
setFilter("0 > 1");
}
else {
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
@ -90,6 +88,8 @@ void MessagesModel::loadMessages(RootItem *item) {
}
}
qDebug("Select statement when selecting msg from item:\n'%s'", qPrintable(selectStatement()));
fetchAllData();
}
@ -167,7 +167,8 @@ void MessagesModel::setupHeaderData() {
/*: Tooltip for attachments of message.*/ tr("Attachments") <<
/*: Tooltip for account ID of message.*/ tr("Account ID") <<
/*: Tooltip for custom ID of message.*/ tr("Custom ID") <<
/*: Tooltip for custom hash string of message.*/ tr("Custom hash");
/*: Tooltip for custom hash string of message.*/ tr("Custom hash") <<
/*: Tooltip for custom ID of feed of message.*/ tr("Feed ID");;
m_tooltipData << tr("Id of the message.") << tr("Is message read?") <<
tr("Is message deleted?") << tr("Is message important?") <<
@ -176,7 +177,7 @@ void MessagesModel::setupHeaderData() {
tr("Author of the message.") << tr("Creation date of the message.") <<
tr("Contents of the message.") << tr("Is message permanently deleted from recycle bin?") <<
tr("List of attachments.") << tr("Account ID of the message.") << tr("Custom ID of the message") <<
tr("Custom hash of the message.");
tr("Custom hash of the message.") << tr("Custom ID of feed of the message.");
}
Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
@ -185,6 +186,14 @@ Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemNeverHasChildren;
}
QString MessagesModel::selectStatement() const {
//return QSqlRelationalTableModel::selectStatement();
return QL1S("SELECT Messages.\"id\" as \"id\", \"is_read\", \"is_deleted\", \"is_important\", Feeds.\"title\" as \"feed_title\", Messages.\"title\" as \"title\", Messages.\"url\" as \"url\", \"author\", Messages.\"date_created\" as \"date_created\", \"contents\", \"is_pdeleted\", \"enclosures\", Messages.\"account_id\" as \"account_id\", Messages.\"custom_id\" as \"custom_id\", \"custom_hash\", Messages.\"feed\" as \"feed_custom_id\" "
"FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id WHERE ") +
filter() + " " + orderByClause();
}
QVariant MessagesModel::data(int row, int column, int role) const {
return data(index(row, column), role);
}

View File

@ -52,6 +52,8 @@ class MessagesModel : public QSqlRelationalTableModel {
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
QString selectStatement() const;
// Returns message at given index.
Message messageAt(int row_index) const;
int messageId(int row_index) const;

View File

@ -151,7 +151,7 @@
#define MSG_DB_READ_INDEX 1
#define MSG_DB_DELETED_INDEX 2
#define MSG_DB_IMPORTANT_INDEX 3
#define MSG_DB_FEED_INDEX 4
#define MSG_DB_FEED_TITLE_INDEX 4
#define MSG_DB_TITLE_INDEX 5
#define MSG_DB_URL_INDEX 6
#define MSG_DB_AUTHOR_INDEX 7
@ -162,6 +162,7 @@
#define MSG_DB_ACCOUNT_ID_INDEX 12
#define MSG_DB_CUSTOM_ID_INDEX 13
#define MSG_DB_CUSTOM_HASH_INDEX 14
#define MSG_DB_FEED_CUSTOM_ID_INDEX 15
// Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES.
#define CAT_DB_ID_INDEX 0

View File

@ -530,7 +530,7 @@ void MessagesView::adjustColumns() {
header()->setSectionResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents);
header()->setSectionResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive);
header()->setSectionResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents);
header()->setSectionResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive);
header()->setSectionResizeMode(MSG_DB_FEED_TITLE_INDEX, QHeaderView::Interactive);
header()->setSectionResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch);
header()->setSectionResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive);
header()->setSectionResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive);
@ -549,6 +549,7 @@ void MessagesView::adjustColumns() {
hideColumn(MSG_DB_ACCOUNT_ID_INDEX);
hideColumn(MSG_DB_CUSTOM_ID_INDEX);
hideColumn(MSG_DB_CUSTOM_HASH_INDEX);
hideColumn(MSG_DB_FEED_CUSTOM_ID_INDEX);
qDebug("Adjusting column resize modes for MessagesView.");
}

View File

@ -394,8 +394,8 @@ bool ServiceRoot::loadMessagesForItem(RootItem *item, QSqlTableModel *model) {
QList<Feed*> children = item->getSubTreeFeeds();
QString filter_clause = textualFeedIds(children).join(QSL(", "));
model->setFilter(QString("Messages.feed IN (%1) AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = %2").arg(filter_clause,
QString::number(accountId())));
model->setFilter(QString("Feeds.custom_id IN (%1) AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = %2").arg(filter_clause,
QString::number(accountId())));
qDebug("Loading messages from feeds: %s.", qPrintable(filter_clause));
}