summary refs log tree commit diff stats
path: root/lib/statement.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/statement.h')
-rw-r--r--lib/statement.h130
1 files changed, 65 insertions, 65 deletions
diff --git a/lib/statement.h b/lib/statement.h index 8188ec0..aa56568 100644 --- a/lib/statement.h +++ b/lib/statement.h
@@ -11,23 +11,23 @@
11#include "filter.h" 11#include "filter.h"
12 12
13namespace verbly { 13namespace verbly {
14 14
15 class filter; 15 class filter;
16 16
17 class statement { 17 class statement {
18 public: 18 public:
19 19
20 statement(object context, filter queryFilter); 20 statement(object context, filter queryFilter);
21 21
22 std::string getQueryString(std::list<std::string> select, bool random, int limit) const; 22 std::string getQueryString(std::list<std::string> select, bool random, int limit) const;
23 23
24 std::list<binding> getBindings() const; 24 std::list<binding> getBindings() const;
25 25
26 private: 26 private:
27 27
28 class join { 28 class join {
29 public: 29 public:
30 30
31 join( 31 join(
32 bool outer, 32 bool outer,
33 std::string foreignTableName, 33 std::string foreignTableName,
@@ -43,37 +43,37 @@ namespace verbly {
43 foreignColumn_(std::move(foreignColumn)) 43 foreignColumn_(std::move(foreignColumn))
44 { 44 {
45 } 45 }
46 46
47 bool isOuterJoin() const 47 bool isOuterJoin() const
48 { 48 {
49 return outer_; 49 return outer_;
50 } 50 }
51 51
52 const std::string& getForeignTableName() const 52 const std::string& getForeignTableName() const
53 { 53 {
54 return foreignTableName_; 54 return foreignTableName_;
55 } 55 }
56 56
57 const std::string& getJoinTable() const 57 const std::string& getJoinTable() const
58 { 58 {
59 return joinTable_; 59 return joinTable_;
60 } 60 }
61 61
62 const std::string& getJoinColumn() const 62 const std::string& getJoinColumn() const
63 { 63 {
64 return joinColumn_; 64 return joinColumn_;
65 } 65 }
66 66
67 const std::string& getForeignTable() const 67 const std::string& getForeignTable() const
68 { 68 {
69 return foreignTable_; 69 return foreignTable_;
70 } 70 }
71 71
72 const std::string& getForeignColumn() const 72 const std::string& getForeignColumn() const
73 { 73 {
74 return foreignColumn_; 74 return foreignColumn_;
75 } 75 }
76 76
77 private: 77 private:
78 bool outer_ = false; 78 bool outer_ = false;
79 std::string foreignTableName_; 79 std::string foreignTableName_;
@@ -81,11 +81,11 @@ namespace verbly {
81 std::string joinColumn_; 81 std::string joinColumn_;
82 std::string foreignTable_; 82 std::string foreignTable_;
83 std::string foreignColumn_; 83 std::string foreignColumn_;
84 84
85 }; 85 };
86 86
87 friend std::ostream& operator<<(std::ostream& oss, const join& j); 87 friend std::ostream& operator<<(std::ostream& oss, const join& j);
88 88
89 class condition { 89 class condition {
90 public: 90 public:
91 enum class type { 91 enum class type {
@@ -93,7 +93,7 @@ namespace verbly {
93 singleton, 93 singleton,
94 group 94 group
95 }; 95 };
96 96
97 enum class comparison { 97 enum class comparison {
98 equals, 98 equals,
99 does_not_equal, 99 does_not_equal,
@@ -106,57 +106,57 @@ namespace verbly {
106 is_not_null, 106 is_not_null,
107 is_null 107 is_null
108 }; 108 };
109 109
110 // Copy and move constructors 110 // Copy and move constructors
111 111
112 condition(const condition& other); 112 condition(const condition& other);
113 condition(condition&& other); 113 condition(condition&& other);
114 114
115 // Assignment 115 // Assignment
116 116
117 condition& operator=(condition other); 117 condition& operator=(condition other);
118 118
119 // Swap 119 // Swap
120 120
121 friend void swap(condition& first, condition& second); 121 friend void swap(condition& first, condition& second);
122 122
123 // Destructor 123 // Destructor
124 124
125 ~condition(); 125 ~condition();
126 126
127 // Accessors 127 // Accessors
128 128
129 type getType() const 129 type getType() const
130 { 130 {
131 return type_; 131 return type_;
132 } 132 }
133 133
134 // Empty 134 // Empty
135 135
136 condition(); 136 condition();
137 137
138 // Singleton 138 // Singleton
139 139
140 condition(std::string table, std::string column, bool isNull); 140 condition(std::string table, std::string column, bool isNull);
141 141
142 condition(std::string table, std::string column, comparison comp, binding value); 142 condition(std::string table, std::string column, comparison comp, binding value);
143 143
144 // Group 144 // Group
145 145
146 explicit condition(bool orlogic); 146 explicit condition(bool orlogic);
147 147
148 condition& operator+=(condition n); 148 condition& operator+=(condition n);
149 149
150 condition& operator&=(condition n); 150 condition& operator&=(condition n);
151 151
152 const std::list<condition>& getChildren() const; 152 const std::list<condition>& getChildren() const;
153 153
154 // Utility 154 // Utility
155 155
156 std::string toSql() const; 156 std::string toSql() const;
157 157
158 std::list<binding> flattenBindings() const; 158 std::list<binding> flattenBindings() const;
159 159
160 private: 160 private:
161 union { 161 union {
162 struct { 162 struct {
@@ -172,12 +172,12 @@ namespace verbly {
172 }; 172 };
173 type type_; 173 type type_;
174 }; 174 };
175 175
176 friend void swap(condition& first, condition& second); 176 friend void swap(condition& first, condition& second);
177 177
178 class with { 178 class with {
179 public: 179 public:
180 180
181 with( 181 with(
182 std::string identifier, 182 std::string identifier,
183 field f, 183 field f,
@@ -195,42 +195,42 @@ namespace verbly {
195 recursive_(recursive) 195 recursive_(recursive)
196 { 196 {
197 } 197 }
198 198
199 const std::string& getIdentifier() const 199 const std::string& getIdentifier() const
200 { 200 {
201 return identifier_; 201 return identifier_;
202 } 202 }
203 203
204 field getField() const 204 field getField() const
205 { 205 {
206 return field_; 206 return field_;
207 } 207 }
208 208
209 std::string getTableForId(std::string identifier) const 209 std::string getTableForId(std::string identifier) const
210 { 210 {
211 return tables_.at(identifier); 211 return tables_.at(identifier);
212 } 212 }
213 213
214 const std::string& getTopTable() const 214 const std::string& getTopTable() const
215 { 215 {
216 return topTable_; 216 return topTable_;
217 } 217 }
218 218
219 const condition& getCondition() const 219 const condition& getCondition() const
220 { 220 {
221 return topCondition_; 221 return topCondition_;
222 } 222 }
223 223
224 const std::list<join>& getJoins() const 224 const std::list<join>& getJoins() const
225 { 225 {
226 return joins_; 226 return joins_;
227 } 227 }
228 228
229 bool isRecursive() const 229 bool isRecursive() const
230 { 230 {
231 return recursive_; 231 return recursive_;
232 } 232 }
233 233
234 private: 234 private:
235 std::string identifier_; 235 std::string identifier_;
236 field field_; 236 field field_;
@@ -239,9 +239,9 @@ namespace verbly {
239 condition topCondition_; 239 condition topCondition_;
240 std::list<join> joins_; 240 std::list<join> joins_;
241 bool recursive_; 241 bool recursive_;
242 242
243 }; 243 };
244 244
245 static constexpr const char* getTableForContext(object context) 245 static constexpr const char* getTableForContext(object context)
246 { 246 {
247 return (context == object::notion) ? "notions" 247 return (context == object::notion) ? "notions"
@@ -253,22 +253,22 @@ namespace verbly {
253 : (context == object::pronunciation) ? "pronunciations" 253 : (context == object::pronunciation) ? "pronunciations"
254 : throw std::domain_error("Provided context has no associated table"); 254 : throw std::domain_error("Provided context has no associated table");
255 } 255 }
256 256
257 static const std::list<field> getSelectForContext(object context); 257 static const std::list<field> getSelectForContext(object context);
258 258
259 statement(std::string tableName, filter clause, int nextTableId = 0, int nextWithId = 0); 259 statement(std::string tableName, filter clause, int nextTableId = 0, int nextWithId = 0);
260 260
261 condition parseFilter(filter queryFilter); 261 condition parseFilter(filter queryFilter);
262 262
263 std::string instantiateTable(std::string name); 263 std::string instantiateTable(std::string name);
264 264
265 std::string instantiateWith(std::string name); 265 std::string instantiateWith(std::string name);
266 266
267 condition integrate(statement subStmt, bool cte = false); 267 condition integrate(statement subStmt, bool cte = false);
268 268
269 int nextTableId_; 269 int nextTableId_;
270 int nextWithId_; 270 int nextWithId_;
271 271
272 std::map<std::string, std::string> tables_; 272 std::map<std::string, std::string> tables_;
273 std::string topTable_; 273 std::string topTable_;
274 std::list<join> joins_; 274 std::list<join> joins_;
@@ -276,7 +276,7 @@ namespace verbly {
276 condition topCondition_; 276 condition topCondition_;
277 277
278 }; 278 };
279 279
280}; 280};
281 281
282#endif /* end of include guard: STATEMENT_H_29F51659 */ 282#endif /* end of include guard: STATEMENT_H_29F51659 */