51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
// For license of this file, see <project-root-folder>/LICENSE.md.
|
|
|
|
#ifndef MESSAGESMODELSQLLAYER_H
|
|
#define MESSAGESMODELSQLLAYER_H
|
|
|
|
#include <QList>
|
|
#include <QMap>
|
|
#include <QPair>
|
|
#include <QSqlDatabase>
|
|
|
|
struct SortColumnsAndOrders {
|
|
QList<int> m_columns;
|
|
QList<Qt::SortOrder> m_orders;
|
|
};
|
|
|
|
class MessagesModelSqlLayer {
|
|
public:
|
|
explicit MessagesModelSqlLayer();
|
|
|
|
// Adds this new state to queue of sort states.
|
|
void addSortState(int column, Qt::SortOrder order, bool ignore_multicolumn_sorting);
|
|
|
|
// Sets SQL WHERE clause, without "WHERE" keyword.
|
|
void setFilter(const QString& filter);
|
|
|
|
SortColumnsAndOrders sortColumnAndOrders() const;
|
|
|
|
protected:
|
|
QString orderByClause() const;
|
|
QString selectStatement() const;
|
|
QString formatFields() const;
|
|
|
|
bool isColumnNumeric(int column_id) const;
|
|
|
|
QSqlDatabase m_db;
|
|
|
|
private:
|
|
QString m_filter;
|
|
|
|
// NOTE: These two lists contain data for multicolumn sorting.
|
|
// They are always same length. Most important sort column/order
|
|
// are located at the start of lists;
|
|
QMap<int, QString> m_fieldNames;
|
|
QMap<int, QString> m_orderByNames;
|
|
QList<int> m_sortColumns;
|
|
QList<int> m_numericColumns;
|
|
QList<Qt::SortOrder> m_sortOrders;
|
|
};
|
|
|
|
#endif // MESSAGESMODELSQLLAYER_H
|