Created
May 19, 2017 14:23
-
-
Save mistificator/bf2877d5dcb939436c36038613406b94 to your computer and use it in GitHub Desktop.
Qt QSqlRelationalTableModel with JOIN support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <QObject> | |
#include <QString> | |
#include <QStringList> | |
#include <QSqlDatabase> | |
#include <QSqlRelationalTableModel> | |
class QSqlRTModel: public QSqlRelationalTableModel | |
{ | |
Q_OBJECT | |
public: | |
explicit QSqlRTModel(QObject *_parent = 0, QSqlDatabase _db = QSqlDatabase()): QSqlRelationalTableModel(_parent, _db) {} | |
void setFilter(const QString & filter) | |
{ | |
QSqlRelationalTableModel::setFilter(QString(filter).replace("WHERE", "", Qt::CaseInsensitive)); | |
} | |
void setJoin(const QString & __join) | |
{ | |
p_join = __join; | |
} | |
QString join() const | |
{ | |
QStringList list = p_join.split("JOIN ", QString::KeepEmptyParts, Qt::CaseInsensitive); | |
return list.at(1); | |
} | |
protected: | |
QString selectStatement() const | |
{ | |
const QString statement = QSqlRelationalTableModel::selectStatement().replace("SELECT", "SELECT DISTINCT", Qt::CaseInsensitive); | |
QStringList list = statement.split("WHERE ", QString::KeepEmptyParts, Qt::CaseInsensitive); | |
list.insert(1, p_join); | |
list.insert(2, "WHERE"); | |
return list.join(" "); | |
} | |
private: | |
QString p_join; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment