xmysql-timzoned 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+
3
+ /**
4
+ *
5
+ * @param input : 1,2,3,4
6
+ * @returns obj.query = (?,?,?,?) obj.params = [1,2,3,4]
7
+ */
8
+ function prepareInClauseParams(input) {
9
+ let inElems = input.split(",");
10
+ let obj = {};
11
+ obj.whereQuery = "";
12
+ obj.whereParams = [];
13
+
14
+ for (var j = 0; j < inElems.length; ++j) {
15
+ if (j === 0) {
16
+ //enclose with open parenthesis
17
+ obj.whereQuery += "(";
18
+ }
19
+ if (j) {
20
+ obj.whereQuery += ",";
21
+ }
22
+ // add q mark and push the variable
23
+ obj.whereQuery += "?";
24
+ obj.whereParams.push(inElems[j]);
25
+
26
+ if (j === inElems.length - 1) {
27
+ //enclose with closing parenthesis
28
+ obj.whereQuery += ")";
29
+ }
30
+ }
31
+
32
+ //console.log(obj);
33
+
34
+ return obj;
35
+ }
36
+
37
+ function prepareLikeValue(value) {
38
+ //return value.replace("~", "%");
39
+ return value.replace(/~/g, "%");
40
+ }
41
+
42
+ function prepareIsValue(value) {
43
+ //return value.replace("~", "%");
44
+ if (value === "null") {
45
+ return null;
46
+ } else if (value === "true") {
47
+ return true;
48
+ } else if (value === "false") {
49
+ return false;
50
+ } else {
51
+ return null;
52
+ }
53
+ }
54
+
55
+ function prepareBetweenValue(value) {
56
+ let values = value.split(",");
57
+ let obj = {};
58
+ obj.whereQuery = "";
59
+ obj.whereParams = [];
60
+
61
+ if (values.length === 2) {
62
+ obj.whereQuery = " ? and ? ";
63
+ obj.whereParams.push(values[0]);
64
+ obj.whereParams.push(values[1]);
65
+ }
66
+
67
+ //console.log('prepareBetweenValue', obj);
68
+
69
+ return obj;
70
+ }
71
+
72
+ function replaceWhereParamsToQMarks(
73
+ openParentheses,
74
+ str,
75
+ comparisonOperator,
76
+ condType
77
+ ) {
78
+ let converted = "";
79
+
80
+ if (openParentheses) {
81
+ for (var i = 0; i < str.length; ++i) {
82
+ if (str[i] === "(") {
83
+ converted += "(";
84
+ } else {
85
+ converted += "??";
86
+ break;
87
+ }
88
+ }
89
+ } else {
90
+ if (
91
+ comparisonOperator !== " in " &&
92
+ comparisonOperator !== " between " &&
93
+ condType !== " on "
94
+ ) {
95
+ converted = "?";
96
+ } else if (condType === " on ") {
97
+ converted = "??";
98
+ }
99
+
100
+ for (var i = str.length - 1; i >= 0; --i) {
101
+ if (str[i] === ")") {
102
+ converted += ")";
103
+ } else {
104
+ break;
105
+ }
106
+ }
107
+ }
108
+
109
+ return converted;
110
+ }
111
+
112
+ function getComparisonOperator(operator) {
113
+ switch (operator) {
114
+ case "eq":
115
+ return "=";
116
+ break;
117
+
118
+ case "ne":
119
+ return "!=";
120
+ break;
121
+
122
+ case "lt":
123
+ return "<";
124
+ break;
125
+
126
+ case "lte":
127
+ return "<=";
128
+ break;
129
+
130
+ case "gt":
131
+ return ">";
132
+ break;
133
+
134
+ case "gte":
135
+ return ">=";
136
+ break;
137
+
138
+ case "is":
139
+ return " is ";
140
+ break;
141
+
142
+ case "isnot":
143
+ return " is not ";
144
+ break;
145
+
146
+ // case 'isnull':
147
+ // return ' is NULL '
148
+ // break;
149
+
150
+ // case 'isnnull':
151
+ // return ' is not NULL '
152
+ // break;
153
+
154
+ case "like":
155
+ return " like ";
156
+ break;
157
+
158
+ case "nlike":
159
+ return " not like ";
160
+ break;
161
+
162
+ case "in":
163
+ return " in ";
164
+ break;
165
+
166
+ case "bw":
167
+ return " between ";
168
+ break;
169
+
170
+ default:
171
+ return null;
172
+ break;
173
+ }
174
+ }
175
+
176
+ function getLogicalOperator(operator) {
177
+ switch (operator) {
178
+ case "~or":
179
+ return "or";
180
+ break;
181
+
182
+ case "~and":
183
+ return "and";
184
+ break;
185
+
186
+ // case '~not':
187
+ // return 'not'
188
+ // break;
189
+
190
+ case "~xor":
191
+ return "xor";
192
+ break;
193
+
194
+ default:
195
+ return null;
196
+ break;
197
+ }
198
+ }
199
+
200
+ exports.getConditionClause = function(whereInQueryParams, condType = "where") {
201
+ let whereQuery = "";
202
+ let whereParams = [];
203
+ let grammarErr = 0;
204
+ let numOfConditions = whereInQueryParams.split(/~or|~and|~not|~xor/);
205
+ let logicalOperatorsInClause = whereInQueryParams.match(
206
+ /(~or|~and|~not|~xor)/g
207
+ );
208
+
209
+ if (
210
+ numOfConditions &&
211
+ logicalOperatorsInClause &&
212
+ numOfConditions.length !== logicalOperatorsInClause.length + 1
213
+ ) {
214
+ console.log(
215
+ "conditions and logical operators mismatch",
216
+ numOfConditions.length,
217
+ logicalOperatorsInClause.length
218
+ );
219
+ } else {
220
+ //console.log('numOfConditions',numOfConditions,whereInQueryParams);
221
+ //console.log('logicalOperatorsInClause',logicalOperatorsInClause);
222
+
223
+ for (var i = 0; i < numOfConditions.length; ++i) {
224
+ let variable = "";
225
+ let comparisonOperator = "";
226
+ let logicalOperator = "";
227
+ let variableValue = "";
228
+ let temp = "";
229
+
230
+ // split on commas
231
+ var arr = numOfConditions[i].split(",");
232
+
233
+ // consider first two splits only
234
+ var result = arr.splice(0, 2);
235
+
236
+ // join to make only 3 array elements
237
+ result.push(arr.join(","));
238
+
239
+ // variable, operator, variablevalue
240
+ if (result.length !== 3) {
241
+ grammarErr = 1;
242
+ break;
243
+ }
244
+
245
+ /**************** START : variable ****************/
246
+ //console.log('variable, operator, variablevalue',result);
247
+ variable = result[0].match(/\(+(.*)/);
248
+
249
+ //console.log('variable',variable);
250
+
251
+ if (!variable || variable.length !== 2) {
252
+ grammarErr = 1;
253
+ break;
254
+ }
255
+
256
+ // get the variableName and push
257
+ whereParams.push(variable[1]);
258
+
259
+ // then replace the variable name with ??
260
+ temp = replaceWhereParamsToQMarks(true, result[0], " ignore ", condType);
261
+ if (!temp) {
262
+ grammarErr = 1;
263
+ break;
264
+ }
265
+ whereQuery += temp;
266
+
267
+ /**************** END : variable ****************/
268
+
269
+ /**************** START : operator and value ****************/
270
+ comparisonOperator = getComparisonOperator(result[1]);
271
+ if (!comparisonOperator) {
272
+ grammarErr = 1;
273
+ break;
274
+ }
275
+ whereQuery += comparisonOperator;
276
+
277
+ // get the variableValue and push to params
278
+ variableValue = result[2].match(/(.*?)\)/);
279
+ if (!variableValue || variableValue.length !== 2) {
280
+ grammarErr = 1;
281
+ break;
282
+ }
283
+
284
+ if (comparisonOperator === " in ") {
285
+ let obj = prepareInClauseParams(variableValue[1]);
286
+ whereQuery += obj.whereQuery;
287
+ whereParams = whereParams.concat(obj.whereParams);
288
+ } else if (
289
+ comparisonOperator === " like " ||
290
+ comparisonOperator === " not like "
291
+ ) {
292
+ whereParams.push(prepareLikeValue(variableValue[1]));
293
+ } else if (comparisonOperator === " is ") {
294
+ whereParams.push(prepareIsValue(variableValue[1]));
295
+ } else if (comparisonOperator === " between ") {
296
+ let obj = prepareBetweenValue(variableValue[1]);
297
+ whereQuery += obj.whereQuery;
298
+ whereParams = whereParams.concat(obj.whereParams);
299
+ //console.log(whereQuery, whereParams);
300
+ } else {
301
+ whereParams.push(variableValue[1]);
302
+ }
303
+
304
+ // then replace the variableValue with ?
305
+ temp = replaceWhereParamsToQMarks(
306
+ false,
307
+ result[2],
308
+ comparisonOperator,
309
+ condType
310
+ );
311
+ if (!temp) {
312
+ grammarErr = 1;
313
+ break;
314
+ }
315
+ whereQuery += temp;
316
+
317
+ if (numOfConditions.length !== -1 && i !== numOfConditions.length - 1) {
318
+ //console.log('finding logical operator for',logicalOperatorsInClause[i]);
319
+ logicalOperator = getLogicalOperator(logicalOperatorsInClause[i]);
320
+
321
+ if (!logicalOperator) {
322
+ grammarErr = 1;
323
+ break;
324
+ }
325
+
326
+ whereQuery += getLogicalOperator(logicalOperatorsInClause[i]);
327
+ }
328
+ /**************** END : operator ****************/
329
+ }
330
+ }
331
+
332
+ let obj = {};
333
+
334
+ obj["query"] = "";
335
+ obj["params"] = [];
336
+ obj["err"] = grammarErr;
337
+
338
+ // console.log(whereInQueryParams);
339
+ // console.log(whereQuery);
340
+ // console.log(whereParams);
341
+ // console.log(grammarErr);
342
+ // console.log('= = = = = = = = =');
343
+
344
+ if (!grammarErr) {
345
+ obj["query"] = whereQuery;
346
+ obj["params"] = whereParams;
347
+ }
348
+
349
+ return obj;
350
+ };