owl-cli 6.149.0 → 6.151.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.json +2 -2
- package/.vscode/launch.json +22 -22
- package/.vscode/settings.json +2 -2
- package/bin/createTables.js +94 -94
- package/bin/deploy.js +66 -66
- package/bin/dsl.js +223 -223
- package/bin/genEvents.js +188 -188
- package/bin/owl-init.js +50 -50
- package/bin/owl.js +305 -305
- package/bin/owlconfig.json +16 -16
- package/bin/table_mysql.js +189 -189
- package/bin/undeploy.js +56 -56
- package/defaultTemplate/api/build.xml +94 -94
- package/defaultTemplate/api/src/about.html +12 -12
- package/defaultTemplate/api/src/about.jsx +11 -11
- package/defaultTemplate/api/src/handlers/aggs.jsx +161 -161
- package/defaultTemplate/api/src/handlers/batchImport.jsx +78 -78
- package/defaultTemplate/api/src/handlers/delete.jsx +88 -88
- package/defaultTemplate/api/src/handlers/export.jsx +117 -117
- package/defaultTemplate/api/src/handlers/exportDoc.jsx +27 -27
- package/defaultTemplate/api/src/handlers/exportEx.jsx +77 -77
- package/defaultTemplate/api/src/handlers/exportWithTemplates.jsx +50 -50
- package/defaultTemplate/api/src/handlers/exportZip.jsx +26 -26
- package/defaultTemplate/api/src/handlers/get.jsx +50 -50
- package/defaultTemplate/api/src/handlers/getByIds.jsx +51 -51
- package/defaultTemplate/api/src/handlers/getChildren.jsx +96 -96
- package/defaultTemplate/api/src/handlers/getExportTaskInfo.jsx +34 -34
- package/defaultTemplate/api/src/handlers/getSpec.jsx +40 -40
- package/defaultTemplate/api/src/handlers/include/checklogin.jsx +787 -786
- package/defaultTemplate/api/src/handlers/include/diff.jsx +315 -315
- package/defaultTemplate/api/src/handlers/include/util.jsx +60 -60
- package/defaultTemplate/api/src/handlers/list.jsx +252 -252
- package/defaultTemplate/api/src/handlers/listEx.jsx +142 -136
- package/defaultTemplate/api/src/handlers/reIndex.jsx +63 -63
- package/defaultTemplate/api/src/handlers/recovery.jsx +53 -53
- package/defaultTemplate/api/src/handlers/save.jsx +125 -125
- package/defaultTemplate/api/src/handlers/upload.jsx +72 -72
- package/defaultTemplate/api/src/init/indexConfigs/changeMapping.json +14 -14
- package/defaultTemplate/api/src/init/indexConfigs/createAliase.json +10 -10
- package/defaultTemplate/api/src/init/indexConfigs/createIndex.json +55 -55
- package/defaultTemplate/api/src/init/indexConfigs/rebuildIndex.sh +27 -27
- package/defaultTemplate/api/src/init/indexConfigs/reindex.json +10 -10
- package/defaultTemplate/api/src/init/init.jsx +25 -25
- package/defaultTemplate/api/src/meta.json +10 -10
- package/defaultTemplate/api/src/services/dblayer.jsx +251 -251
- package/defaultTemplate/api/src/services/modelService.jsx +1239 -1239
- package/defaultTemplate/api/src/services/sqlstring.jsx +240 -240
- package/defaultTemplate/api/src/tasks/export.jsx +366 -366
- package/defaultTemplate/api/src/tasks/exportDoc.jsx +99 -99
- package/defaultTemplate/api/src/tasks/exportExTask.jsx +332 -332
- package/defaultTemplate/api/src/tasks/exportWithTemplateTask.jsx +128 -128
- package/defaultTemplate/api/src/tasks/exportZip.jsx +49 -49
- package/examples/buildProperties/build.properties +2 -2
- package/examples/gitignore/gitignore_example.txt +1 -1
- package/examples/models/product.json +52 -52
- package/examples/models/shop.json +71 -71
- package/examples/models/sku.json +254 -254
- package/examples/models/user.json +49 -49
- package/examples/owlconfig.json +13 -13
- package/package.json +33 -33
- package/todo.txt +4 -4
|
@@ -1,240 +1,240 @@
|
|
|
1
|
-
var SqlString = {};
|
|
2
|
-
|
|
3
|
-
var ID_GLOBAL_REGEXP = /`/g;
|
|
4
|
-
var QUAL_GLOBAL_REGEXP = /\./g;
|
|
5
|
-
var CHARS_GLOBAL_REGEXP = /[\0\b\t\n\r\x1a\"\'\\]/g; // eslint-disable-line no-control-regex
|
|
6
|
-
var CHARS_ESCAPE_MAP = {
|
|
7
|
-
'\0' : '\\0',
|
|
8
|
-
'\b' : '\\b',
|
|
9
|
-
'\t' : '\\t',
|
|
10
|
-
'\n' : '\\n',
|
|
11
|
-
'\r' : '\\r',
|
|
12
|
-
'\x1a' : '\\Z',
|
|
13
|
-
'"' : '\\"',
|
|
14
|
-
'\'' : '\\\'',
|
|
15
|
-
'\\' : '\\\\'
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
SqlString.escapeId = function escapeId(val, forbidQualified) {
|
|
19
|
-
if (Array.isArray(val)) {
|
|
20
|
-
var sql = '';
|
|
21
|
-
|
|
22
|
-
for (var i = 0; i < val.length; i++) {
|
|
23
|
-
sql += (i === 0 ? '' : ', ') + SqlString.escapeId(val[i], forbidQualified);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return sql;
|
|
27
|
-
} else if (forbidQualified) {
|
|
28
|
-
return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``') + '`';
|
|
29
|
-
} else {
|
|
30
|
-
return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``').replace(QUAL_GLOBAL_REGEXP, '`.`') + '`';
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
SqlString.escape = function escape(val, stringifyObjects, timeZone) {
|
|
35
|
-
if (val === undefined || val === null) {
|
|
36
|
-
return 'NULL';
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
switch (typeof val) {
|
|
40
|
-
case 'boolean': return (val) ? 'true' : 'false';
|
|
41
|
-
case 'number': return val + '';
|
|
42
|
-
case 'object':
|
|
43
|
-
if (val instanceof Date) {
|
|
44
|
-
return SqlString.dateToString(val, timeZone || 'local');
|
|
45
|
-
} else if (Array.isArray(val)) {
|
|
46
|
-
return SqlString.arrayToList(val, timeZone);
|
|
47
|
-
} else if (Buffer.isBuffer(val)) {
|
|
48
|
-
return SqlString.bufferToString(val);
|
|
49
|
-
} else if (typeof val.toSqlString === 'function') {
|
|
50
|
-
return String(val.toSqlString());
|
|
51
|
-
} else if (stringifyObjects) {
|
|
52
|
-
return escapeString(val.toString());
|
|
53
|
-
} else {
|
|
54
|
-
return SqlString.objectToValues(val, timeZone);
|
|
55
|
-
}
|
|
56
|
-
default: return escapeString(val);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
SqlString.arrayToList = function arrayToList(array, timeZone) {
|
|
61
|
-
var sql = '';
|
|
62
|
-
|
|
63
|
-
for (var i = 0; i < array.length; i++) {
|
|
64
|
-
var val = array[i];
|
|
65
|
-
|
|
66
|
-
if (Array.isArray(val)) {
|
|
67
|
-
sql += (i === 0 ? '' : ', ') + '(' + SqlString.arrayToList(val, timeZone) + ')';
|
|
68
|
-
} else {
|
|
69
|
-
sql += (i === 0 ? '' : ', ') + SqlString.escape(val, true, timeZone);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return sql;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
SqlString.format = function format(sql, values, stringifyObjects, timeZone) {
|
|
77
|
-
if (values == null) {
|
|
78
|
-
return sql;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (!Array.isArray(values)) {
|
|
82
|
-
values = [values];
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
var chunkIndex = 0;
|
|
86
|
-
var placeholdersRegex = /\?+/g;
|
|
87
|
-
var result = '';
|
|
88
|
-
var valuesIndex = 0;
|
|
89
|
-
var match;
|
|
90
|
-
|
|
91
|
-
while (valuesIndex < values.length && (match = placeholdersRegex.exec(sql))) {
|
|
92
|
-
var len = match[0].length;
|
|
93
|
-
|
|
94
|
-
if (len > 2) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
var value = len === 2
|
|
99
|
-
? SqlString.escapeId(values[valuesIndex])
|
|
100
|
-
: SqlString.escape(values[valuesIndex], stringifyObjects, timeZone);
|
|
101
|
-
|
|
102
|
-
result += sql.slice(chunkIndex, match.index) + value;
|
|
103
|
-
chunkIndex = placeholdersRegex.lastIndex;
|
|
104
|
-
valuesIndex++;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (chunkIndex === 0) {
|
|
108
|
-
// Nothing was replaced
|
|
109
|
-
return sql;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (chunkIndex < sql.length) {
|
|
113
|
-
return result + sql.slice(chunkIndex);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return result;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
SqlString.dateToString = function dateToString(date, timeZone) {
|
|
120
|
-
var dt = new Date(date);
|
|
121
|
-
|
|
122
|
-
if (isNaN(dt.getTime())) {
|
|
123
|
-
return 'NULL';
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
var year;
|
|
127
|
-
var month;
|
|
128
|
-
var day;
|
|
129
|
-
var hour;
|
|
130
|
-
var minute;
|
|
131
|
-
var second;
|
|
132
|
-
var millisecond;
|
|
133
|
-
|
|
134
|
-
if(!timeZone){
|
|
135
|
-
timeZone = 'local';
|
|
136
|
-
}
|
|
137
|
-
if (timeZone === 'local') {
|
|
138
|
-
year = dt.getFullYear();
|
|
139
|
-
month = dt.getMonth() + 1;
|
|
140
|
-
day = dt.getDate();
|
|
141
|
-
hour = dt.getHours();
|
|
142
|
-
minute = dt.getMinutes();
|
|
143
|
-
second = dt.getSeconds();
|
|
144
|
-
millisecond = dt.getMilliseconds();
|
|
145
|
-
} else {
|
|
146
|
-
var tz = convertTimezone(timeZone);
|
|
147
|
-
|
|
148
|
-
if (tz !== false && tz !== 0) {
|
|
149
|
-
dt.setTime(dt.getTime() + (tz * 60000));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
year = dt.getUTCFullYear();
|
|
153
|
-
month = dt.getUTCMonth() + 1;
|
|
154
|
-
day = dt.getUTCDate();
|
|
155
|
-
hour = dt.getUTCHours();
|
|
156
|
-
minute = dt.getUTCMinutes();
|
|
157
|
-
second = dt.getUTCSeconds();
|
|
158
|
-
millisecond = dt.getUTCMilliseconds();
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// YYYY-MM-DD HH:mm:ss.mmm
|
|
162
|
-
var str = zeroPad(year, 4) + '-' + zeroPad(month, 2) + '-' + zeroPad(day, 2) + ' ' +
|
|
163
|
-
zeroPad(hour, 2) + ':' + zeroPad(minute, 2) + ':' + zeroPad(second, 2) + '.' +
|
|
164
|
-
zeroPad(millisecond, 3);
|
|
165
|
-
|
|
166
|
-
return escapeString(str);
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
SqlString.bufferToString = function bufferToString(buffer) {
|
|
170
|
-
return 'X' + escapeString(buffer.toString('hex'));
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
SqlString.objectToValues = function objectToValues(object, timeZone) {
|
|
174
|
-
var sql = '';
|
|
175
|
-
|
|
176
|
-
for (var key in object) {
|
|
177
|
-
var val = object[key];
|
|
178
|
-
|
|
179
|
-
if (typeof val === 'function') {
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
sql += (sql.length === 0 ? '' : ', ') + SqlString.escapeId(key) + ' = ' + SqlString.escape(val, true, timeZone);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return sql;
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
SqlString.raw = function raw(sql) {
|
|
190
|
-
if (typeof sql !== 'string') {
|
|
191
|
-
throw new TypeError('argument sql must be a string');
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
return {
|
|
195
|
-
toSqlString: function toSqlString() { return sql; }
|
|
196
|
-
};
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
function escapeString(val) {
|
|
200
|
-
var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0;
|
|
201
|
-
var escapedVal = '';
|
|
202
|
-
var match;
|
|
203
|
-
|
|
204
|
-
while ((match = CHARS_GLOBAL_REGEXP.exec(val))) {
|
|
205
|
-
escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]];
|
|
206
|
-
chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if (chunkIndex === 0) {
|
|
210
|
-
// Nothing was escaped
|
|
211
|
-
return "'" + val + "'";
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (chunkIndex < val.length) {
|
|
215
|
-
return "'" + escapedVal + val.slice(chunkIndex) + "'";
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return "'" + escapedVal + "'";
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function zeroPad(number, length) {
|
|
222
|
-
number = number.toString();
|
|
223
|
-
while (number.length < length) {
|
|
224
|
-
number = '0' + number;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return number;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
function convertTimezone(tz) {
|
|
231
|
-
if (tz === 'Z') {
|
|
232
|
-
return 0;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
var m = tz.match(/([\+\-\s])(\d\d):?(\d\d)?/);
|
|
236
|
-
if (m) {
|
|
237
|
-
return (m[1] === '-' ? -1 : 1) * (parseInt(m[2], 10) + ((m[3] ? parseInt(m[3], 10) : 0) / 60)) * 60;
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
1
|
+
var SqlString = {};
|
|
2
|
+
|
|
3
|
+
var ID_GLOBAL_REGEXP = /`/g;
|
|
4
|
+
var QUAL_GLOBAL_REGEXP = /\./g;
|
|
5
|
+
var CHARS_GLOBAL_REGEXP = /[\0\b\t\n\r\x1a\"\'\\]/g; // eslint-disable-line no-control-regex
|
|
6
|
+
var CHARS_ESCAPE_MAP = {
|
|
7
|
+
'\0' : '\\0',
|
|
8
|
+
'\b' : '\\b',
|
|
9
|
+
'\t' : '\\t',
|
|
10
|
+
'\n' : '\\n',
|
|
11
|
+
'\r' : '\\r',
|
|
12
|
+
'\x1a' : '\\Z',
|
|
13
|
+
'"' : '\\"',
|
|
14
|
+
'\'' : '\\\'',
|
|
15
|
+
'\\' : '\\\\'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
SqlString.escapeId = function escapeId(val, forbidQualified) {
|
|
19
|
+
if (Array.isArray(val)) {
|
|
20
|
+
var sql = '';
|
|
21
|
+
|
|
22
|
+
for (var i = 0; i < val.length; i++) {
|
|
23
|
+
sql += (i === 0 ? '' : ', ') + SqlString.escapeId(val[i], forbidQualified);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return sql;
|
|
27
|
+
} else if (forbidQualified) {
|
|
28
|
+
return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``') + '`';
|
|
29
|
+
} else {
|
|
30
|
+
return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``').replace(QUAL_GLOBAL_REGEXP, '`.`') + '`';
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
SqlString.escape = function escape(val, stringifyObjects, timeZone) {
|
|
35
|
+
if (val === undefined || val === null) {
|
|
36
|
+
return 'NULL';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
switch (typeof val) {
|
|
40
|
+
case 'boolean': return (val) ? 'true' : 'false';
|
|
41
|
+
case 'number': return val + '';
|
|
42
|
+
case 'object':
|
|
43
|
+
if (val instanceof Date) {
|
|
44
|
+
return SqlString.dateToString(val, timeZone || 'local');
|
|
45
|
+
} else if (Array.isArray(val)) {
|
|
46
|
+
return SqlString.arrayToList(val, timeZone);
|
|
47
|
+
} else if (Buffer.isBuffer(val)) {
|
|
48
|
+
return SqlString.bufferToString(val);
|
|
49
|
+
} else if (typeof val.toSqlString === 'function') {
|
|
50
|
+
return String(val.toSqlString());
|
|
51
|
+
} else if (stringifyObjects) {
|
|
52
|
+
return escapeString(val.toString());
|
|
53
|
+
} else {
|
|
54
|
+
return SqlString.objectToValues(val, timeZone);
|
|
55
|
+
}
|
|
56
|
+
default: return escapeString(val);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
SqlString.arrayToList = function arrayToList(array, timeZone) {
|
|
61
|
+
var sql = '';
|
|
62
|
+
|
|
63
|
+
for (var i = 0; i < array.length; i++) {
|
|
64
|
+
var val = array[i];
|
|
65
|
+
|
|
66
|
+
if (Array.isArray(val)) {
|
|
67
|
+
sql += (i === 0 ? '' : ', ') + '(' + SqlString.arrayToList(val, timeZone) + ')';
|
|
68
|
+
} else {
|
|
69
|
+
sql += (i === 0 ? '' : ', ') + SqlString.escape(val, true, timeZone);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return sql;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
SqlString.format = function format(sql, values, stringifyObjects, timeZone) {
|
|
77
|
+
if (values == null) {
|
|
78
|
+
return sql;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!Array.isArray(values)) {
|
|
82
|
+
values = [values];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
var chunkIndex = 0;
|
|
86
|
+
var placeholdersRegex = /\?+/g;
|
|
87
|
+
var result = '';
|
|
88
|
+
var valuesIndex = 0;
|
|
89
|
+
var match;
|
|
90
|
+
|
|
91
|
+
while (valuesIndex < values.length && (match = placeholdersRegex.exec(sql))) {
|
|
92
|
+
var len = match[0].length;
|
|
93
|
+
|
|
94
|
+
if (len > 2) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
var value = len === 2
|
|
99
|
+
? SqlString.escapeId(values[valuesIndex])
|
|
100
|
+
: SqlString.escape(values[valuesIndex], stringifyObjects, timeZone);
|
|
101
|
+
|
|
102
|
+
result += sql.slice(chunkIndex, match.index) + value;
|
|
103
|
+
chunkIndex = placeholdersRegex.lastIndex;
|
|
104
|
+
valuesIndex++;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (chunkIndex === 0) {
|
|
108
|
+
// Nothing was replaced
|
|
109
|
+
return sql;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (chunkIndex < sql.length) {
|
|
113
|
+
return result + sql.slice(chunkIndex);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return result;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
SqlString.dateToString = function dateToString(date, timeZone) {
|
|
120
|
+
var dt = new Date(date);
|
|
121
|
+
|
|
122
|
+
if (isNaN(dt.getTime())) {
|
|
123
|
+
return 'NULL';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
var year;
|
|
127
|
+
var month;
|
|
128
|
+
var day;
|
|
129
|
+
var hour;
|
|
130
|
+
var minute;
|
|
131
|
+
var second;
|
|
132
|
+
var millisecond;
|
|
133
|
+
|
|
134
|
+
if(!timeZone){
|
|
135
|
+
timeZone = 'local';
|
|
136
|
+
}
|
|
137
|
+
if (timeZone === 'local') {
|
|
138
|
+
year = dt.getFullYear();
|
|
139
|
+
month = dt.getMonth() + 1;
|
|
140
|
+
day = dt.getDate();
|
|
141
|
+
hour = dt.getHours();
|
|
142
|
+
minute = dt.getMinutes();
|
|
143
|
+
second = dt.getSeconds();
|
|
144
|
+
millisecond = dt.getMilliseconds();
|
|
145
|
+
} else {
|
|
146
|
+
var tz = convertTimezone(timeZone);
|
|
147
|
+
|
|
148
|
+
if (tz !== false && tz !== 0) {
|
|
149
|
+
dt.setTime(dt.getTime() + (tz * 60000));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
year = dt.getUTCFullYear();
|
|
153
|
+
month = dt.getUTCMonth() + 1;
|
|
154
|
+
day = dt.getUTCDate();
|
|
155
|
+
hour = dt.getUTCHours();
|
|
156
|
+
minute = dt.getUTCMinutes();
|
|
157
|
+
second = dt.getUTCSeconds();
|
|
158
|
+
millisecond = dt.getUTCMilliseconds();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// YYYY-MM-DD HH:mm:ss.mmm
|
|
162
|
+
var str = zeroPad(year, 4) + '-' + zeroPad(month, 2) + '-' + zeroPad(day, 2) + ' ' +
|
|
163
|
+
zeroPad(hour, 2) + ':' + zeroPad(minute, 2) + ':' + zeroPad(second, 2) + '.' +
|
|
164
|
+
zeroPad(millisecond, 3);
|
|
165
|
+
|
|
166
|
+
return escapeString(str);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
SqlString.bufferToString = function bufferToString(buffer) {
|
|
170
|
+
return 'X' + escapeString(buffer.toString('hex'));
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
SqlString.objectToValues = function objectToValues(object, timeZone) {
|
|
174
|
+
var sql = '';
|
|
175
|
+
|
|
176
|
+
for (var key in object) {
|
|
177
|
+
var val = object[key];
|
|
178
|
+
|
|
179
|
+
if (typeof val === 'function') {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
sql += (sql.length === 0 ? '' : ', ') + SqlString.escapeId(key) + ' = ' + SqlString.escape(val, true, timeZone);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return sql;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
SqlString.raw = function raw(sql) {
|
|
190
|
+
if (typeof sql !== 'string') {
|
|
191
|
+
throw new TypeError('argument sql must be a string');
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
toSqlString: function toSqlString() { return sql; }
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
function escapeString(val) {
|
|
200
|
+
var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0;
|
|
201
|
+
var escapedVal = '';
|
|
202
|
+
var match;
|
|
203
|
+
|
|
204
|
+
while ((match = CHARS_GLOBAL_REGEXP.exec(val))) {
|
|
205
|
+
escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]];
|
|
206
|
+
chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (chunkIndex === 0) {
|
|
210
|
+
// Nothing was escaped
|
|
211
|
+
return "'" + val + "'";
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (chunkIndex < val.length) {
|
|
215
|
+
return "'" + escapedVal + val.slice(chunkIndex) + "'";
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return "'" + escapedVal + "'";
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function zeroPad(number, length) {
|
|
222
|
+
number = number.toString();
|
|
223
|
+
while (number.length < length) {
|
|
224
|
+
number = '0' + number;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return number;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function convertTimezone(tz) {
|
|
231
|
+
if (tz === 'Z') {
|
|
232
|
+
return 0;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
var m = tz.match(/([\+\-\s])(\d\d):?(\d\d)?/);
|
|
236
|
+
if (m) {
|
|
237
|
+
return (m[1] === '-' ? -1 : 1) * (parseInt(m[2], 10) + ((m[3] ? parseInt(m[3], 10) : 0) / 60)) * 60;
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|