Mercurial > dedupe
annotate SQLGenerator.hpp @ 59:74be5a2f49db
Separate SQLGenerator into a separate header.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Fri, 14 Sep 2012 00:20:06 +0200 |
| parents | |
| children | e5fa379d4030 |
| rev | line source |
|---|---|
|
59
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #ifndef SQLGENERATOR_HPP |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 #define SQLGENERATOR_HPP |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
4 #include "OrderedPair.hpp" |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 #include "ThreadSafeLookup.hpp" |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 #include "UniqueString.hpp" |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 #include "Exception/IOException.hpp" |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 #include "Exception/SQLException.hpp" |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 #include <QtCore/QStringList> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 #include <QtCore/QVariant> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 #include <QtSql/QSqlDatabase> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 #include <QtSql/QSqlError> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 #include <QtSql/QSqlQuery> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 #include <QtSql/QSqlRecord> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 #include <boost/optional.hpp> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
21 #include <QtCore/QString> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
23 template<typename T> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 struct SQLGenerator |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
26 }; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
27 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 template<> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
29 struct SQLGenerator<int> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 static QString fieldName(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 return QString("%1_Int").arg(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
36 static QString createFields(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 return QString("%1 INTEGER").arg(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
39 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
40 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
41 static QString valueString(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
42 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
43 return QString(":") + fieldName(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
44 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
45 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
46 static void bindValue(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 int value, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
48 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 query.bindValue(valueString(prefix), value); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
51 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
52 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
53 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
54 const QVariantList& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
55 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
56 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
57 query.bindValue(valueString(prefix), values); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
58 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
59 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
60 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
61 const QList<int>& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
62 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
63 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
64 QVariantList list; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
65 foreach(int value, values) { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
66 list << value; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
67 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
68 bindValues(query, list, prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
69 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
70 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
71 static boost::optional<int> extract(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
72 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
73 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
74 int fieldNo = query.record().indexOf(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
75 if (query.at() >= 0) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
76 return query.value(fieldNo).toInt(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
77 else |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
78 return boost::optional<int>(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
79 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
80 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
81 }; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
82 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
83 template<> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
84 struct SQLGenerator<QString> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
85 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
86 static QString fieldName(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
87 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
88 return QString("%1_QString").arg(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
89 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
90 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
91 static QString createFields(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
92 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
93 return QString("%1 TEXT").arg(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
94 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
95 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
96 static QString valueString(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
97 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
98 return QString(":") + fieldName(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
99 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
100 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
101 static QString restrict(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
102 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
103 return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
104 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
105 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
106 static void bindValue(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
107 const QString& value, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
108 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
109 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
110 query.bindValue(valueString(prefix), value); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
111 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
112 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
113 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
114 const QVariantList& value, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
115 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
116 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
117 query.bindValue(valueString(prefix), value); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
118 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
119 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
120 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
121 const QList<QString>& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
122 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
123 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
124 QVariantList list; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
125 foreach(const QString& value, values) { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
126 list << value; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
127 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
128 bindValues(query, list, prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
129 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
130 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
131 static boost::optional<QString> extract(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
132 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
133 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
134 int fieldNo = query.record().indexOf(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
135 if (query.at() >= 0) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
136 return query.value(fieldNo).toString(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
137 else |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
138 return boost::optional<QString>(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
139 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
140 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
141 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
142 }; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
143 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
144 template<> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
145 struct SQLGenerator<UniqueString> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
146 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
147 static QString fieldName(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
148 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
149 return QString("%1_QString").arg(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
150 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
151 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
152 static QString createFields(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
153 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
154 return QString("%1 TEXT").arg(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
155 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
156 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
157 static QString valueString(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
158 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
159 return QString(":") + fieldName(prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
160 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
161 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
162 static QString restrict(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
163 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
164 return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
165 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
166 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
167 static void bindValue(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
168 const QString& value, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
169 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
170 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
171 query.bindValue(valueString(prefix), value); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
172 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
173 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
174 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
175 const QVariantList& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
176 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
177 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
178 query.bindValue(valueString(prefix), values); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
179 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
180 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
181 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
182 const QList<UniqueString>& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
183 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
184 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
185 QVariantList list; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
186 foreach(const UniqueString& value, values) { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
187 list << static_cast<const QString>(value); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
188 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
189 bindValues(query, list, prefix); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
190 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
191 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
192 static boost::optional<QString> extract(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
193 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
194 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
195 int fieldNo = query.record().indexOf(fieldName(prefix)); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
196 if (query.at() >= 0) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
197 return query.value(fieldNo).toString(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
198 else |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
199 return boost::optional<QString>(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
200 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
201 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
202 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
203 }; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
204 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
205 template<typename T> |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
206 struct SQLGenerator<OrderedPair<T> > |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
207 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
208 static QString fieldName(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
209 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
210 return SQLGenerator<T>::fieldName(prefix + "_1") + ", " + |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
211 SQLGenerator<T>::fieldName(prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
212 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
213 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
214 static QString createFields(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
215 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
216 return SQLGenerator<T>::createFields(prefix + "_1") + ", " + |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
217 SQLGenerator<T>::createFields(prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
218 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
219 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
220 static QString restriction(const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
221 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
222 return SQLGenerator<T>::restrict(prefix + "_1") + " AND " + |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
223 SQLGenerator<T>::restrict(prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
224 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
225 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
226 static QString valueString(const QString &prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
227 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
228 return SQLGenerator<T>::valueString(prefix + "_1") + ", " + |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
229 SQLGenerator<T>::valueString(prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
230 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
231 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
232 static void bindValue(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
233 const OrderedPair<T>& value, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
234 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
235 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
236 SQLGenerator<T>::bindValue(query, value.first, prefix + "_1"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
237 SQLGenerator<T>::bindValue(query, value.second, prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
238 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
239 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
240 static void bindValues(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
241 const QList<OrderedPair<T> >& values, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
242 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
243 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
244 QList<T> first; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
245 QList<T> second; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
246 foreach(OrderedPair<T> value, values) { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
247 first << value.first; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
248 second << value.second; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
249 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
250 SQLGenerator<T>::bindValues(query, first, prefix + "_1"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
251 SQLGenerator<T>::bindValues(query, second, prefix + "_2"); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
252 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
253 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
254 static boost::optional<OrderedPair<T> > |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
255 extract(QSqlQuery& query, |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
256 const QString& prefix = QString()) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
257 { |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
258 if (query.at() >= 0) |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
259 return OrderedPair<T> (*SQLGenerator<T>::extract(query, prefix + "_1"), |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
260 *SQLGenerator<T>::extract(query, prefix + "_2")); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
261 else |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
262 return boost::optional<OrderedPair<T> >(); |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
263 } |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
264 }; |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
265 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
266 |
|
74be5a2f49db
Separate SQLGenerator into a separate header.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
267 #endif //SQLGENERATOR_HPP |
