-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlutil.h
103 lines (85 loc) · 5.03 KB
/
sqlutil.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef SQLUTIL_H
#define SQLUTIL_H
#include <QVariant>
#include <QList>
#include <QSqlDatabase>
class Sql
{
public:
// SQL keywords
inline const static QLatin1String as() { return QLatin1String("AS"); }
inline const static QLatin1String asc() { return QLatin1String("ASC"); }
inline const static QLatin1String comma() { return QLatin1String(","); }
inline const static QLatin1String desc() { return QLatin1String("DESC"); }
inline const static QLatin1String eq() { return QLatin1String("="); }
// "and" is a C++ keyword
inline const static QLatin1String et() { return QLatin1String("AND"); }
inline const static QLatin1String from() { return QLatin1String("FROM"); }
inline const static QLatin1String fullJoin() { return QLatin1String("FULL JOIN"); }
inline const static QLatin1String innerJoin() { return QLatin1String("INNER JOIN"); }
inline const static QLatin1String leftJoin() { return QLatin1String("LEFT JOIN"); }
inline const static QLatin1String on() { return QLatin1String("ON"); }
inline const static QLatin1String orderBy() { return QLatin1String("ORDER BY"); }
inline const static QLatin1String parenClose() { return QLatin1String(")"); }
inline const static QLatin1String parenOpen() { return QLatin1String("("); }
inline const static QLatin1String rightJoin() { return QLatin1String("RIGHT JOIN"); }
inline const static QLatin1String select() { return QLatin1String("SELECT"); }
inline const static QLatin1String sp() { return QLatin1String(" "); }
inline const static QLatin1String where() { return QLatin1String("WHERE"); }
// Build expressions based on key words
inline const static QString as(const QString &a, const QString &b) { return b.isEmpty() ? a : concat(concat(a, as()), b); }
inline const static QString asc(const QString &s) { return concat(s, asc()); }
inline const static QString comma(const QString &a, const QString &b) { return a.isEmpty() ? b : b.isEmpty() ? a : QString(a).append(comma()).append(b); }
inline const static QString concat(const QString &a, const QString &b) { return a.isEmpty() ? b : b.isEmpty() ? a : QString(a).append(sp()).append(b); }
inline const static QString desc(const QString &s) { return concat(s, desc()); }
inline const static QString eq(const QString &a, const QString &b) { return QString(a).append(eq()).append(b); }
inline const static QString et(const QString &a, const QString &b) { return a.isEmpty() ? b : b.isEmpty() ? a : concat(concat(a, et()), b); }
inline const static QString from(const QString &s) { return concat(from(), s); }
inline const static QString fullJoin(const QString &s) { return concat(fullJoin(), s); }
inline const static QString innerJoin(const QString &s) { return concat(innerJoin(), s); }
inline const static QString leftJoin(const QString &s) { return concat(leftJoin(), s); }
inline const static QString on(const QString &s) { return concat(on(), s); }
inline const static QString orderBy(const QString &s) { return s.isEmpty() ? s : concat(orderBy(), s); }
inline const static QString paren(const QString &s) { return s.isEmpty() ? s : parenOpen() + s + parenClose(); }
inline const static QString rightJoin(const QString &s) { return concat(rightJoin(), s); }
inline const static QString select(const QString &s) { return concat(select(), s); }
inline const static QString where(const QString &s) { return s.isEmpty() ? s : concat(where(), s); }
inline const static QString relTablePrefix(int i) { return QString::number(i).prepend(QLatin1String("relTblAl_")); }
const static QString fullyQualifiedFieldName(const QString &tableName, const QString &fieldName)
{
if(tableName.isEmpty())
return fieldName;
QString ret;
ret.reserve(tableName.size() + fieldName.size() + 1);
ret.append(tableName).append(QLatin1Char('.')).append(fieldName);
return ret;
}
struct Filters{
Filters() {}
Filters(QString _fieldText, QVariant _value, char _op)
:fieldText(_fieldText), value(_value), op(_op) {}
QString fieldText;
QVariant value;
char op;
};
enum JoinMode
{
InnerJoin,
LeftJoin,
RightJoin,
FullJoin
};
static void addGlobalFilter(const QString &fieldText, const QVariant &value, char op = '%')
{
m_filters.append(Filters(fieldText, value, op));
}
static QString getGlobalFilter(const QString &table, QSqlDatabase db);
static QString getLikeTables(const QString &table1, const QString &table2,
const QString &qualif1, const QString &qualif2, QSqlDatabase db);
static QString getJoinTables(const QString &table1, const QString &table2,
const QString &qualif1, const QString &qualif2,
const QString &field1, const QString &field2,
JoinMode joinMode = InnerJoin, QSqlDatabase db = QSqlDatabase());
static QList<Filters> m_filters;
};
#endif // SQLUTIL_H