forked from kiseitai2/html2faxcover
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsqlkeywords.cpp
More file actions
288 lines (286 loc) · 9.34 KB
/
sqlkeywords.cpp
File metadata and controls
288 lines (286 loc) · 9.34 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
#include "sqlkeywords.h"
const std::string SQLGenerator::WILDCARD = "* ";
std::string SQLGenerator::prepareStatement(std::string table, std::string columns, std::string criteria, std::string pattern, std::string pattern2, size_t statementType)
{
std::string query;
/*Let's make sure each field/ parameter has a space at the end. SQL databases are sensitive to white space!*/
if(table[table.size()-1] != ' ')
{
table += " ";
}
if(columns[columns.size()-1] != ' ')
{
columns += " ";
}
if(criteria[criteria.size()-1] != ' ')
{
criteria += " ";
}
if(pattern[pattern.size()-1] != ' ')
{
pattern += " ";
}
if(pattern2[pattern2.size()-1] != ' ')
{
pattern2 += " ";
}
/*With that check out of the way, we can start producing the query!*/
switch(statementType)
{
/*SELECT column_name,column_name FROM table_name; */
case SELECT:
case SELECT | FROM:
query = Keywords[SELECT] + columns + Keywords[FROM] + table;
break;
/*CREATE DATABASE dbname;*/
case CREATEDATABASE:
query = Keywords[CREATEDATABASE] + table;
break;
/*CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);*/
case CREATETABLE:
query = Keywords[CREATETABLE] + table;
break;
/*SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
*/
case SELECT | WHERE:
case SELECT | FROM | WHERE:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria;
break;
/*SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
*/
case SELECT | AND:
case SELECT | FROM | AND:
case SELECT | FROM | WHERE | AND:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria + Keywords[AND] + pattern;
break;
/*SELECT * FROM Customers
WHERE City='Berlin'
OR City='München';
*/
case SELECT | OR:
case SELECT | FROM | OR:
case SELECT | FROM | WHERE | OR:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria + Keywords[OR] + pattern;
break;
/*SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');
*/
case SELECT | AND | OR:
case SELECT | FROM | AND | OR:
case SELECT | FROM | WHERE | AND | OR:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria + Keywords[AND] + "(" + pattern +
Keywords[OR] + pattern2 + ")";
break;
/*SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
*/
case ORDERBY:
case SELECT | ORDERBY:
case SELECT | FROM | ORDERBY:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[ORDERBY] + criteria;
break;
/*INSERT INTO table_name
VALUES (value1,value2,value3,...);
or
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
*/
case INSERT:
case INSERT | INTO:
case INSERT | INTO | VALUES:
query = Keywords[INSERT] + Keywords[INTO] + table + "(" + columns + ")" + Keywords[VALUES] + "(" + criteria + ")";
break;
/*UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
*/
case UPDATE:
case UPDATE | SET:
case UPDATE | SET | WHERE:
query = Keywords[UPDATE] + table + Keywords[SET] + columns + Keywords[WHERE] + criteria;
break;
/*DELETE FROM table_name
WHERE some_column=some_value;
*/
case DELETE:
case DELETE | FROM:
case DELETE | FROM | WHERE:
query = Keywords[DELETE] + Keywords[FROM] + table + Keywords[WHERE] + criteria;
break;
/*SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
*/
case LIKE:
case SELECT | FROM | WHERE | LIKE:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria + Keywords[LIKE]
+ pattern;
break;
/*SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
*/
case IN:
case SELECT | FROM | WHERE | IN:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria +
Keywords[IN] + pattern;
break;
/*SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
*/
case BETWEEN:
case BETWEEN | AND:
case SELECT | FROM | WHERE | BETWEEN | AND:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[WHERE] + criteria +
Keywords[BETWEEN] + pattern + Keywords[AND] + pattern2;
break;
/*SELECT column_name AS alias_name
FROM table_name;
*/
case AS:
case SELECT | AS:
case SELECT | AS | FROM:
query = Keywords[SELECT] + columns + Keywords[AS] + criteria + Keywords[FROM] + table;
break;
/*SELECT column_name(s)
FROM table_name AS alias_name;
*/
case SELECT | FROM | AS_TABLE:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[AS] + criteria;
break;
/*SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
or
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
*/
case INNER_JOIN:
case INNER_JOIN | ON:
case SELECT | FROM | INNER_JOIN:
case SELECT | FROM | INNER_JOIN | ON:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[INNER_JOIN] + criteria
+ Keywords[ON] + pattern;
break;
/*SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
or
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
*/
case LEFT_JOIN:
case SELECT | FROM | LEFT_JOIN:
case SELECT | FROM | LEFT_JOIN | ON:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[LEFT_JOIN] + criteria
+ Keywords[ON] + pattern;
break;
//Special case of above
/*SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
*/
case LEFT_JOIN | ORDERBY:
case LEFT_JOIN | ON | ORDERBY:
case SELECT | FROM | LEFT_JOIN | ON | ORDERBY:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[LEFT_JOIN] + criteria
+ Keywords[ON] + pattern + Keywords[ORDERBY] + pattern2;
break;
/*SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
or
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
*/
case RIGHT_JOIN:
case SELECT | RIGHT_JOIN:
case SELECT | FROM | RIGHT_JOIN:
case SELECT | FROM | RIGHT_JOIN | ON:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[RIGHT_JOIN] + criteria +
Keywords[ON] + pattern;
break;
/*SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
*/
case FULL_JOIN:
case SELECT | FULL_JOIN:
case SELECT | FROM | FULL_JOIN:
case SELECT | FROM | FULL_JOIN | ON:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[FULL_JOIN] + criteria +
Keywords[ON] + pattern;
break;
/*SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
*/
//The [IN externaldb] has to be inserted into the criteria string parameter by the user.
case SELECT | INTO:
case SELECT | INTO | FROM:
query = Keywords[SELECT] + columns + Keywords[INTO] + criteria + Keywords[FROM] + table;
break;
/*INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
*/
case INTO_SELECT:
case INTO_SELECT | INSERT | FROM:
case INSERT | SELECT | INTO:
query = Keywords[INSERT] + Keywords[INTO] + criteria + Keywords[SELECT] + columns + Keywords[FROM]
+ table;
break;
/*SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
or
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
*/
case UNION:
case SELECT | UNION:
case SELECT | FROM | UNION:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[UNION] +
Keywords[SELECT] + columns + Keywords[FROM] + criteria;
break;
case UNION | ALL:
case SELECT | UNION | ALL:
case SELECT | FROM | UNION | ALL:
query = Keywords[SELECT] + columns + Keywords[FROM] + table + Keywords[UNION] + Keywords[ALL] +
Keywords[SELECT] + columns + Keywords[FROM] + criteria;
break;
default:
std::cout << "An error occured with the SQL query generator! The user passed a switch "
<< "combination to statementType that is invalid and / or not implemented yet!"
<< std::endl;
}
query += ";";//query terminating character!
return query;
}