Skip to content

Instantly share code, notes, and snippets.

@mistificator
Created May 19, 2017 14:23
Show Gist options
  • Save mistificator/bf2877d5dcb939436c36038613406b94 to your computer and use it in GitHub Desktop.
Save mistificator/bf2877d5dcb939436c36038613406b94 to your computer and use it in GitHub Desktop.
Qt QSqlRelationalTableModel with JOIN support
#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