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.
- package/.eslintrc.js +28 -0
- package/.travis.yml +17 -0
- package/LICENSE +22 -0
- package/bin/index.js +94 -0
- package/dockerfile +33 -0
- package/index.js +1 -0
- package/lib/util/cmd.helper.js +109 -0
- package/lib/util/data.helper.js +211 -0
- package/lib/util/whereClause.helper.js +350 -0
- package/lib/xapi.js +509 -0
- package/lib/xctrl.js +589 -0
- package/lib/xsql.js +1321 -0
- package/package.json +46 -0
@@ -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
|
+
};
|