whatap 0.4.79 → 0.4.81

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.
Files changed (217) hide show
  1. package/.vscode/keep-context.json +3 -3
  2. package/README.md +51 -51
  3. package/bindings/darwin/x64/whatap.node +0 -0
  4. package/bindings/linux/ia32/whatap.node +0 -0
  5. package/bindings/linux/x64/whatap.node +0 -0
  6. package/help.txt +10 -10
  7. package/index.js +8 -8
  8. package/lib/conf/conf-sys-mon.js +100 -100
  9. package/lib/conf/config-default.js +238 -238
  10. package/lib/conf/configure.js +423 -423
  11. package/lib/conf/license.js +41 -41
  12. package/lib/control/cmd-config.js +23 -23
  13. package/lib/control/control-handler.js +344 -344
  14. package/lib/control/packagectr-helper.js +149 -149
  15. package/lib/core/agent.js +329 -328
  16. package/lib/core/interceptor.js +142 -142
  17. package/lib/core/request-agent.js +26 -26
  18. package/lib/counter/counter-manager.js +127 -127
  19. package/lib/counter/meter/meter-activex.js +66 -66
  20. package/lib/counter/meter/meter-httpc.js +57 -57
  21. package/lib/counter/meter/meter-resource.js +9 -9
  22. package/lib/counter/meter/meter-service.js +167 -167
  23. package/lib/counter/meter/meter-socket.io.js +50 -50
  24. package/lib/counter/meter/meter-sql.js +70 -70
  25. package/lib/counter/meter/meter-users.js +57 -57
  26. package/lib/counter/meter.js +183 -183
  27. package/lib/counter/task/activetransaction.js +93 -93
  28. package/lib/counter/task/agentinfo.js +105 -105
  29. package/lib/counter/task/counter-task.js +9 -9
  30. package/lib/counter/task/gcstat.js +34 -34
  31. package/lib/counter/task/heapmem.js +24 -24
  32. package/lib/counter/task/httpc.js +75 -75
  33. package/lib/counter/task/proc-cpu.js +28 -28
  34. package/lib/counter/task/realtimeuser.js +30 -30
  35. package/lib/counter/task/res/systemECSTask.js +54 -54
  36. package/lib/counter/task/res/systemKubeTask.js +52 -52
  37. package/lib/counter/task/res/util/awsEcsClientThread.js +166 -166
  38. package/lib/counter/task/res/util/linuxProcStatUtil.js +13 -13
  39. package/lib/counter/task/res-sys-cpu.js +61 -61
  40. package/lib/counter/task/service.js +201 -201
  41. package/lib/counter/task/socketio.js +29 -29
  42. package/lib/counter/task/sql.js +104 -104
  43. package/lib/counter/task/systemperf.js +42 -42
  44. package/lib/data/datapack-sender.js +256 -256
  45. package/lib/data/dataprofile-agent.js +136 -136
  46. package/lib/data/datatext-agent.js +135 -135
  47. package/lib/data/event-level.js +15 -15
  48. package/lib/data/test.js +48 -48
  49. package/lib/env/constants.js +20 -20
  50. package/lib/kube/kube-client.js +143 -143
  51. package/lib/lang/text-types.js +58 -58
  52. package/lib/logger.js +319 -319
  53. package/lib/net/netflag.js +54 -54
  54. package/lib/net/paramdef.js +40 -40
  55. package/lib/net/receiver.js +65 -65
  56. package/lib/net/security-master.js +182 -173
  57. package/lib/net/sender.js +140 -140
  58. package/lib/net/tcp-return.js +17 -17
  59. package/lib/net/tcp-session.js +285 -285
  60. package/lib/net/tcpreq-client-proxy.js +69 -69
  61. package/lib/net/tcprequest-mgr.js +57 -57
  62. package/lib/observers/cluster-observer.js +21 -21
  63. package/lib/observers/express-observer.js +214 -214
  64. package/lib/observers/file-observer.js +184 -184
  65. package/lib/observers/global-observer.js +30 -30
  66. package/lib/observers/http-observer.js +714 -704
  67. package/lib/observers/maria-observer.js +382 -382
  68. package/lib/observers/memcached-observer.js +55 -55
  69. package/lib/observers/mongo-observer.js +262 -265
  70. package/lib/observers/mongodb-observer.js +197 -197
  71. package/lib/observers/mongoose-observer.js +83 -83
  72. package/lib/observers/mssql-observer.js +205 -205
  73. package/lib/observers/mysql-observer.js +436 -394
  74. package/lib/observers/net-observer.js +72 -72
  75. package/lib/observers/pgsql-observer.js +295 -295
  76. package/lib/observers/process-observer.js +25 -25
  77. package/lib/observers/promise-observer.js +31 -31
  78. package/lib/observers/redis-observer.js +156 -109
  79. package/lib/observers/schedule-observer.js +66 -66
  80. package/lib/observers/socket.io-observer.js +54 -54
  81. package/lib/observers/stream-observer.js +19 -19
  82. package/lib/observers/thrift-observer.js +196 -196
  83. package/lib/pack/activestack-pack.js +54 -54
  84. package/lib/pack/counter-pack.js +649 -649
  85. package/lib/pack/errorsnap-pack.js +68 -68
  86. package/lib/pack/event-pack.js +53 -53
  87. package/lib/pack/hitmap-pack.js +62 -62
  88. package/lib/pack/hitmap-pack1.js +146 -146
  89. package/lib/pack/netstat.js +14 -14
  90. package/lib/pack/pack.js +49 -49
  91. package/lib/pack/packenum.js +60 -60
  92. package/lib/pack/param-pack.js +213 -213
  93. package/lib/pack/profile-pack.js +48 -48
  94. package/lib/pack/realtimeuser-pack.js +40 -40
  95. package/lib/pack/stat-general-pack.js +95 -95
  96. package/lib/pack/staterror-pack.js +119 -119
  97. package/lib/pack/stathttpc-pack.js +66 -66
  98. package/lib/pack/stathttpc-rec.js +78 -78
  99. package/lib/pack/statremote-pack.js +45 -45
  100. package/lib/pack/statservice-pack.js +62 -62
  101. package/lib/pack/statservice-pack1.js +87 -87
  102. package/lib/pack/statservice-rec.js +292 -292
  103. package/lib/pack/statservice-rec_dep.js +151 -151
  104. package/lib/pack/statsql-pack.js +69 -69
  105. package/lib/pack/statsql-rec.js +100 -100
  106. package/lib/pack/statuseragent-pack.js +43 -43
  107. package/lib/pack/tagcount-pack.js +398 -398
  108. package/lib/pack/tagctr.js +14 -14
  109. package/lib/pack/text-pack.js +49 -49
  110. package/lib/pack/time-count.js +25 -25
  111. package/lib/pack/websocket.js +14 -14
  112. package/lib/plugin/plugin-loadermanager.js +56 -56
  113. package/lib/plugin/plugin.js +75 -75
  114. package/lib/requestlog.js +326 -326
  115. package/lib/service/tx-record.js +293 -288
  116. package/lib/stat/stat-error.js +116 -116
  117. package/lib/stat/stat-httpc.js +97 -97
  118. package/lib/stat/stat-remoteip.js +46 -46
  119. package/lib/stat/stat-sql.js +112 -112
  120. package/lib/stat/stat-tranx.js +57 -57
  121. package/lib/stat/stat-tx-caller.js +159 -159
  122. package/lib/stat/stat-tx-domain.js +110 -110
  123. package/lib/stat/stat-tx-referer.js +111 -111
  124. package/lib/stat/stat-useragent.js +48 -48
  125. package/lib/stat/timingsender.js +72 -72
  126. package/lib/step/activestack-step.js +37 -37
  127. package/lib/step/dbc-step.js +35 -35
  128. package/lib/step/http-stepx.js +66 -66
  129. package/lib/step/message-step.js +39 -39
  130. package/lib/step/method-stepx.js +46 -46
  131. package/lib/step/resultset-step.js +39 -39
  132. package/lib/step/securemsg-step.js +43 -43
  133. package/lib/step/socket-step.js +46 -46
  134. package/lib/step/sql-stepx.js +67 -67
  135. package/lib/step/sqlxtype.js +15 -15
  136. package/lib/step/step.js +65 -65
  137. package/lib/step/stepenum.js +53 -53
  138. package/lib/trace/local-context.js +13 -13
  139. package/lib/trace/parsed-sql.js +13 -13
  140. package/lib/trace/profile-collector.js +70 -70
  141. package/lib/trace/serviceurl-pattern-detector.js +117 -117
  142. package/lib/trace/trace-context-manager.js +195 -195
  143. package/lib/trace/trace-context.js +136 -134
  144. package/lib/util/anylist.js +102 -102
  145. package/lib/util/array-util.js +100 -100
  146. package/lib/util/bitutil.js +27 -27
  147. package/lib/util/cardinality/hyperloglog.js +105 -105
  148. package/lib/util/cardinality/murmurhash.js +31 -31
  149. package/lib/util/cardinality/registerset.js +74 -74
  150. package/lib/util/config-util.js +17 -17
  151. package/lib/util/cypher.js +89 -89
  152. package/lib/util/datetimehelper.js +237 -229
  153. package/lib/util/dateutil.js +110 -106
  154. package/lib/util/errordata.js +20 -20
  155. package/lib/util/escape-literal-sql.js +342 -342
  156. package/lib/util/hashutil2.js +126 -126
  157. package/lib/util/hexa32.js +57 -57
  158. package/lib/util/index.js +78 -78
  159. package/lib/util/intint-map.js +47 -47
  160. package/lib/util/intkey-linkedmap.js +26 -26
  161. package/lib/util/intkey-map.js +25 -25
  162. package/lib/util/intset.js +82 -82
  163. package/lib/util/iputil.js +119 -119
  164. package/lib/util/iputil_x.js +526 -526
  165. package/lib/util/keygen.js +17 -17
  166. package/lib/util/kube-util.js +72 -72
  167. package/lib/util/longint-linkedmap.js +35 -35
  168. package/lib/util/longkey-linkedmap.js +25 -25
  169. package/lib/util/longlong-linkedmap.js +37 -37
  170. package/lib/util/nodeutil.js +67 -67
  171. package/lib/util/oidutil.js +96 -93
  172. package/lib/util/paramsecurity.js +78 -78
  173. package/lib/util/pathtree.js +172 -172
  174. package/lib/util/pre-process.js +13 -13
  175. package/lib/util/process-seq.js +165 -165
  176. package/lib/util/property-util.js +35 -35
  177. package/lib/util/request-queue.js +42 -42
  178. package/lib/util/requestdouble-queue.js +72 -72
  179. package/lib/util/resourceprofile.js +156 -156
  180. package/lib/util/seedrandom.js +242 -242
  181. package/lib/util/stop-watch.js +29 -29
  182. package/lib/util/string-util.js +9 -9
  183. package/lib/util/stringkey-linkedmap.js +28 -28
  184. package/lib/util/stringnum-linkedmap.js +31 -31
  185. package/lib/util/stringset.js +65 -65
  186. package/lib/util/system-util.js +9 -9
  187. package/lib/util/userid-util.js +57 -57
  188. package/lib/util/utils.js +67 -67
  189. package/lib/value/blob-value.js +61 -61
  190. package/lib/value/boolean-value.js +51 -51
  191. package/lib/value/decimal-value.js +71 -71
  192. package/lib/value/double-summary.js +105 -105
  193. package/lib/value/double-value.js +50 -50
  194. package/lib/value/float-array.js +59 -59
  195. package/lib/value/float-value.js +64 -64
  196. package/lib/value/int-array.js +59 -59
  197. package/lib/value/int-map-value.js +151 -151
  198. package/lib/value/int-value.js +64 -64
  199. package/lib/value/ip4-value.js +83 -83
  200. package/lib/value/list-value.js +136 -136
  201. package/lib/value/long-array.js +59 -59
  202. package/lib/value/long-summary.js +105 -105
  203. package/lib/value/map-value.js +175 -175
  204. package/lib/value/metric-value.js +157 -157
  205. package/lib/value/null-value.js +42 -42
  206. package/lib/value/number-value.js +34 -34
  207. package/lib/value/summary-value.js +29 -29
  208. package/lib/value/text-array.js +117 -117
  209. package/lib/value/text-value.js +59 -59
  210. package/lib/value/texthash-value.js +49 -49
  211. package/lib/value/value.js +14 -14
  212. package/lib/value/valueenum.js +99 -99
  213. package/logs/whatap-20230906.log +54 -0
  214. package/logs/whatap-20231101.log +293 -0
  215. package/package.json +28 -28
  216. package/whatap.conf +1 -1
  217. package/logs/whatap-20230616.log +0 -13
@@ -1,343 +1,343 @@
1
- /**
2
- * Copyright 2016 the WHATAP project authors. All rights reserved.
3
- * Use of this source code is governed by a license that
4
- * can be found in the LICENSE file.
5
- */
6
-
7
- var STAT = {
8
- NORMAL : 0,
9
- COMMENT : 1,
10
- ALPHABET : 2,
11
- NUMBER : 3,
12
- QUOTATION : 4,
13
- COLON : 5,
14
- DQUOTATION : 6
15
- };
16
-
17
- function EscapeLiteralSQL(sql) {
18
- if(sql == null) {
19
- sql = '';
20
- }
21
- this.substitute = '#';
22
- this.substitute_num = '#';
23
- this.substitute_str_mode = false;
24
- this.chars = [];
25
- this.pos = 0;
26
- this.length = 0;
27
- this.parsedSql ="";
28
- this.param = "";
29
- this.status = -1;
30
- this.sqlType = 0;
31
-
32
- this.chars = sql.split('');
33
- this.length = this.chars.length;
34
- }
35
- EscapeLiteralSQL.prototype.setSubstitute = function (chr) {
36
- this.substitute = chr;
37
-
38
- if(this.substitute_str_mode) {
39
- this.substitute_num = "'" + chr + "'";
40
- } else {
41
- this.substitute_num = this.substitute;
42
- }
43
- return this;
44
- };
45
- EscapeLiteralSQL.prototype.setSubstituteStringMode = function (b) {
46
- if(this.substitute_str_mode === b) {
47
- return this;
48
- }
49
- this.substitute_str_mode = b;
50
- if(this.substitute_str_mode) {
51
- this.substitute_num = "'" + this.substitute + "'";
52
- } else {
53
- this.substitute_num = this.substitute;
54
- }
55
- return this;
56
- };
57
- EscapeLiteralSQL.prototype.process = function () {
58
- this.status = STAT.NORMAL;
59
- for(this.pos = 0; this.pos < this.chars.length; this.pos++) {
60
- switch(this.chars[this.pos]) {
61
- case '0':
62
- case '1':
63
- case '2':
64
- case '3':
65
- case '4':
66
- case '5':
67
- case '6':
68
- case '7':
69
- case '8':
70
- case '9':
71
- this._number();
72
- break;
73
- case ':':
74
- this._colon();
75
- break;
76
- case '.':
77
- this._dot();
78
- break;
79
- case '-':
80
- this._minus();
81
- break;
82
- case '/':
83
- this._slash();
84
- break;
85
- case '*':
86
- this._astar();
87
- break;
88
- case '\'':
89
- this._quotation();
90
- break;
91
- case '\"':
92
- this._dquotation();
93
- break;
94
- default:
95
- this._others();
96
- }
97
- }
98
- return this;
99
- };
100
- EscapeLiteralSQL.prototype._others = function () {
101
- switch (this.status) {
102
- case STAT.COMMENT:
103
- this.parsedSql += (this.chars[this.pos]);
104
- break;
105
- case STAT.ALPHABET:
106
- this.parsedSql += (this.chars[this.pos]);
107
- if (this.isProgLetter(this.chars[this.pos]) === false) {
108
- this.status = STAT.NORMAL;
109
- }
110
- break;
111
- case STAT.NUMBER:
112
- this.parsedSql += (this.chars[this.pos]);
113
- this.status = STAT.NORMAL;
114
- break;
115
- case STAT.QUOTATION:
116
- case STAT.DQUOTATION:
117
- this.param += (this.chars[this.pos]);
118
- break;
119
- default:
120
- if (this.isProgLetter(this.chars[this.pos])) {
121
- this.status = STAT.ALPHABET;
122
- if (this.sqlType === 0) {
123
- this.define_crud();
124
- }
125
- } else {
126
- this.status = STAT.NORMAL;
127
- }
128
- this.parsedSql += (this.chars[this.pos]);
129
- break;
130
- }
131
- };
132
- EscapeLiteralSQL.prototype.isProgLetter = function (ch) {
133
- return isLetter(ch) || ch === '_';
134
- };
135
- EscapeLiteralSQL.prototype.define_crud = function () {
136
- this.sqlType = this.chars[this.pos].toUpperCase();
137
- switch (this.sqlType) {
138
- case 'S':
139
- case 'U':
140
- case 'D':
141
- case 'I':
142
- break;
143
- default:
144
- this.sqlType = '*';
145
- }
146
- };
147
- EscapeLiteralSQL.prototype._colon = function () {
148
- switch (this.status) {
149
- case STAT.COMMENT:
150
- this.parsedSql += (this.chars[this.pos]);
151
- break;
152
- case STAT.QUOTATION:
153
- case STAT.DQUOTATION:
154
- this.param += (this.chars[this.pos]);
155
- break;
156
- default:
157
- this.parsedSql += (this.chars[this.pos]);
158
- this.status = STAT.COLON;
159
- break;
160
- }
161
- };
162
- EscapeLiteralSQL.prototype._quotation = function () {
163
- switch (this.status) {
164
- case STAT.NORMAL:
165
- if (this.param.length > 0) {
166
- this.param += ",";
167
- }
168
- this.param += this.chars[this.pos];
169
- this.status = STAT.QUOTATION;
170
- break;
171
- case STAT.COMMENT:
172
- this.parsedSql += this.chars[this.pos];
173
- break;
174
- case STAT.ALPHABET:
175
- this.parsedSql += this.chars[this.pos];
176
- status = STAT.QUOTATION;
177
- break;
178
- case STAT.NUMBER:
179
- parsedSql += this.chars[this.pos];
180
- this.status = STAT.QUOTATION;
181
- break;
182
- case STAT.QUOTATION:
183
- this.param += "'";
184
- this.parsedSql = this.parsedSql + '\'' + this.substitute + '\'';
185
- this.status = STAT.NORMAL;
186
- break;
187
- }
188
- };
189
- EscapeLiteralSQL.prototype._dquotation = function () {
190
- switch (this.status) {
191
- case STAT.NORMAL:
192
- if (this.param.length > 0) {
193
- this.param += ",";
194
- }
195
- this.param += this.chars[this.pos];
196
- this.status = STAT.DQUOTATION;
197
- break;;
198
- case STAT.COMMENT:
199
- this.parsedSql += this.chars[this.pos];
200
- break;
201
- case STAT.ALPHABET:
202
- this.parsedSql += this.chars[this.pos];
203
- status = STAT.DQUOTATION;
204
- break;
205
- case STAT.NUMBER:
206
- parsedSql += this.chars[this.pos];
207
- this.status = STAT.DQUOTATION;
208
- break;
209
- case STAT.DQUOTATION:
210
- this.param += '"';
211
- this.parsedSql = this.parsedSql + '"' + this.substitute + '"';
212
- this.status = STAT.NORMAL;
213
- break;
214
- }
215
- };
216
-
217
-
218
- EscapeLiteralSQL.prototype._astar = function () {
219
- switch (this.status) {
220
- case STAT.COMMENT:
221
- this.parsedSql += this.chars[this.pos];
222
- if (this.getNext(this.pos) === '/') {
223
- this.parsedSql += '/';
224
- this.pos++;
225
- this.status = STAT.NORMAL;
226
- }
227
- break;
228
- case STAT.QUOTATION:
229
- case STAT.DQUOTATION:
230
- this.param += this.chars[this.pos];
231
- break;
232
- default:
233
- this.parsedSql += this.chars[this.pos];
234
- this.status = STAT.NORMAL;
235
- }
236
- };
237
- EscapeLiteralSQL.prototype._slash = function () {
238
- switch (this.status) {
239
- case STAT.COMMENT:
240
- this.parsedSql += this.chars[this.pos];
241
- break;
242
- case STAT.QUOTATION:
243
- case STAT.DQUOTATION:
244
- this.param += this.chars[this.pos];
245
- break;
246
- default:
247
- if (this.getNext(this.pos) === '*') {
248
- this.pos++;
249
- this.parsedSql += "/*";
250
- this.status = STAT.COMMENT;
251
- }
252
- }
253
- };
254
- EscapeLiteralSQL.prototype._minus = function () {
255
- switch (this.status) {
256
- case STAT.COMMENT:
257
- this.parsedSql += this.chars[this.pos];
258
- break;
259
- case STAT.QUOTATION:
260
- case STAT.DQUOTATION:
261
- this.param += this.chars[this.pos];
262
- break;
263
- default:
264
- if (this.getNext(this.pos) === '-') {
265
- this.parsedSql += this.chars[this.pos];
266
- while (this.chars[this.pos] != '\n') {
267
- this.pos++;
268
- if (this.pos < this.length) {
269
- this.parsedSql += this.chars[this.pos];
270
- } else {
271
- break;
272
- }
273
- }
274
- } else {
275
- this.parsedSql += this.chars[this.pos];
276
- }
277
- this.status = STAT.NORMAL;
278
- }
279
- };
280
- EscapeLiteralSQL.prototype._dot = function () {
281
- switch (this.status) {
282
- case STAT.NORMAL:
283
- this.parsedSql += this.chars[this.pos];
284
- break;
285
- case STAT.COMMENT:
286
- this.parsedSql += this.chars[this.pos];
287
- break;
288
- case STAT.ALPHABET:
289
- this.parsedSql += this.chars[this.pos];
290
- this.status = STAT.NORMAL;
291
- break;
292
- case STAT.NUMBER:
293
- this.param += this.chars[this.pos];
294
- break;
295
- case STAT.QUOTATION:
296
- case STAT.DQUOTATION:
297
- this.param += this.chars[this.pos];
298
- break;
299
- }
300
- };
301
- EscapeLiteralSQL.prototype._number = function () {
302
- switch (this.status) {
303
- case STAT.NORMAL:
304
- if (this.param.length > 0) {
305
- this.param += ",";
306
- }
307
- this.param += this.chars[this.pos];
308
- this.parsedSql += this.substitute_num;
309
- this.status = STAT.NUMBER;
310
- break;
311
- case STAT.COMMENT:
312
- case STAT.COLON:
313
- case STAT.ALPHABET:
314
- this.parsedSql += this.chars[this.pos];
315
- break;
316
- case STAT.NUMBER:
317
- case STAT.QUOTATION:
318
- case STAT.DQUOTATION:
319
- this.param += this.chars[this.pos];
320
- break;
321
- }
322
- };
323
- EscapeLiteralSQL.prototype.getNext = function (x) {
324
- return x < this.length ? this.chars[x+1] : 0;
325
- };
326
- EscapeLiteralSQL.prototype.getParsedSql = function () {
327
- return this.parsedSql;
328
- };
329
- EscapeLiteralSQL.prototype.getParameter = function () {
330
- return this.param;
331
- };
332
-
333
- var ASCII_a = 97,
334
- ASCII_z = 122,
335
- ASCII_A = 65,
336
- ASCII_Z = 90;
337
-
338
- function isLetter(ch) {
339
- var str = ch.charCodeAt(0);
340
- return ((str >= ASCII_a) && (str <= ASCII_z)) || ((str >= ASCII_A) && (str <= ASCII_Z));
341
- }
342
-
1
+ /**
2
+ * Copyright 2016 the WHATAP project authors. All rights reserved.
3
+ * Use of this source code is governed by a license that
4
+ * can be found in the LICENSE file.
5
+ */
6
+
7
+ var STAT = {
8
+ NORMAL : 0,
9
+ COMMENT : 1,
10
+ ALPHABET : 2,
11
+ NUMBER : 3,
12
+ QUOTATION : 4,
13
+ COLON : 5,
14
+ DQUOTATION : 6
15
+ };
16
+
17
+ function EscapeLiteralSQL(sql) {
18
+ if(sql == null) {
19
+ sql = '';
20
+ }
21
+ this.substitute = '#';
22
+ this.substitute_num = '#';
23
+ this.substitute_str_mode = false;
24
+ this.chars = [];
25
+ this.pos = 0;
26
+ this.length = 0;
27
+ this.parsedSql ="";
28
+ this.param = "";
29
+ this.status = -1;
30
+ this.sqlType = 0;
31
+
32
+ this.chars = sql.split('');
33
+ this.length = this.chars.length;
34
+ }
35
+ EscapeLiteralSQL.prototype.setSubstitute = function (chr) {
36
+ this.substitute = chr;
37
+
38
+ if(this.substitute_str_mode) {
39
+ this.substitute_num = "'" + chr + "'";
40
+ } else {
41
+ this.substitute_num = this.substitute;
42
+ }
43
+ return this;
44
+ };
45
+ EscapeLiteralSQL.prototype.setSubstituteStringMode = function (b) {
46
+ if(this.substitute_str_mode === b) {
47
+ return this;
48
+ }
49
+ this.substitute_str_mode = b;
50
+ if(this.substitute_str_mode) {
51
+ this.substitute_num = "'" + this.substitute + "'";
52
+ } else {
53
+ this.substitute_num = this.substitute;
54
+ }
55
+ return this;
56
+ };
57
+ EscapeLiteralSQL.prototype.process = function () {
58
+ this.status = STAT.NORMAL;
59
+ for(this.pos = 0; this.pos < this.chars.length; this.pos++) {
60
+ switch(this.chars[this.pos]) {
61
+ case '0':
62
+ case '1':
63
+ case '2':
64
+ case '3':
65
+ case '4':
66
+ case '5':
67
+ case '6':
68
+ case '7':
69
+ case '8':
70
+ case '9':
71
+ this._number();
72
+ break;
73
+ case ':':
74
+ this._colon();
75
+ break;
76
+ case '.':
77
+ this._dot();
78
+ break;
79
+ case '-':
80
+ this._minus();
81
+ break;
82
+ case '/':
83
+ this._slash();
84
+ break;
85
+ case '*':
86
+ this._astar();
87
+ break;
88
+ case '\'':
89
+ this._quotation();
90
+ break;
91
+ case '\"':
92
+ this._dquotation();
93
+ break;
94
+ default:
95
+ this._others();
96
+ }
97
+ }
98
+ return this;
99
+ };
100
+ EscapeLiteralSQL.prototype._others = function () {
101
+ switch (this.status) {
102
+ case STAT.COMMENT:
103
+ this.parsedSql += (this.chars[this.pos]);
104
+ break;
105
+ case STAT.ALPHABET:
106
+ this.parsedSql += (this.chars[this.pos]);
107
+ if (this.isProgLetter(this.chars[this.pos]) === false) {
108
+ this.status = STAT.NORMAL;
109
+ }
110
+ break;
111
+ case STAT.NUMBER:
112
+ this.parsedSql += (this.chars[this.pos]);
113
+ this.status = STAT.NORMAL;
114
+ break;
115
+ case STAT.QUOTATION:
116
+ case STAT.DQUOTATION:
117
+ this.param += (this.chars[this.pos]);
118
+ break;
119
+ default:
120
+ if (this.isProgLetter(this.chars[this.pos])) {
121
+ this.status = STAT.ALPHABET;
122
+ if (this.sqlType === 0) {
123
+ this.define_crud();
124
+ }
125
+ } else {
126
+ this.status = STAT.NORMAL;
127
+ }
128
+ this.parsedSql += (this.chars[this.pos]);
129
+ break;
130
+ }
131
+ };
132
+ EscapeLiteralSQL.prototype.isProgLetter = function (ch) {
133
+ return isLetter(ch) || ch === '_';
134
+ };
135
+ EscapeLiteralSQL.prototype.define_crud = function () {
136
+ this.sqlType = this.chars[this.pos].toUpperCase();
137
+ switch (this.sqlType) {
138
+ case 'S':
139
+ case 'U':
140
+ case 'D':
141
+ case 'I':
142
+ break;
143
+ default:
144
+ this.sqlType = '*';
145
+ }
146
+ };
147
+ EscapeLiteralSQL.prototype._colon = function () {
148
+ switch (this.status) {
149
+ case STAT.COMMENT:
150
+ this.parsedSql += (this.chars[this.pos]);
151
+ break;
152
+ case STAT.QUOTATION:
153
+ case STAT.DQUOTATION:
154
+ this.param += (this.chars[this.pos]);
155
+ break;
156
+ default:
157
+ this.parsedSql += (this.chars[this.pos]);
158
+ this.status = STAT.COLON;
159
+ break;
160
+ }
161
+ };
162
+ EscapeLiteralSQL.prototype._quotation = function () {
163
+ switch (this.status) {
164
+ case STAT.NORMAL:
165
+ if (this.param.length > 0) {
166
+ this.param += ",";
167
+ }
168
+ this.param += this.chars[this.pos];
169
+ this.status = STAT.QUOTATION;
170
+ break;
171
+ case STAT.COMMENT:
172
+ this.parsedSql += this.chars[this.pos];
173
+ break;
174
+ case STAT.ALPHABET:
175
+ this.parsedSql += this.chars[this.pos];
176
+ status = STAT.QUOTATION;
177
+ break;
178
+ case STAT.NUMBER:
179
+ parsedSql += this.chars[this.pos];
180
+ this.status = STAT.QUOTATION;
181
+ break;
182
+ case STAT.QUOTATION:
183
+ this.param += "'";
184
+ this.parsedSql = this.parsedSql + '\'' + this.substitute + '\'';
185
+ this.status = STAT.NORMAL;
186
+ break;
187
+ }
188
+ };
189
+ EscapeLiteralSQL.prototype._dquotation = function () {
190
+ switch (this.status) {
191
+ case STAT.NORMAL:
192
+ if (this.param.length > 0) {
193
+ this.param += ",";
194
+ }
195
+ this.param += this.chars[this.pos];
196
+ this.status = STAT.DQUOTATION;
197
+ break;;
198
+ case STAT.COMMENT:
199
+ this.parsedSql += this.chars[this.pos];
200
+ break;
201
+ case STAT.ALPHABET:
202
+ this.parsedSql += this.chars[this.pos];
203
+ status = STAT.DQUOTATION;
204
+ break;
205
+ case STAT.NUMBER:
206
+ parsedSql += this.chars[this.pos];
207
+ this.status = STAT.DQUOTATION;
208
+ break;
209
+ case STAT.DQUOTATION:
210
+ this.param += '"';
211
+ this.parsedSql = this.parsedSql + '"' + this.substitute + '"';
212
+ this.status = STAT.NORMAL;
213
+ break;
214
+ }
215
+ };
216
+
217
+
218
+ EscapeLiteralSQL.prototype._astar = function () {
219
+ switch (this.status) {
220
+ case STAT.COMMENT:
221
+ this.parsedSql += this.chars[this.pos];
222
+ if (this.getNext(this.pos) === '/') {
223
+ this.parsedSql += '/';
224
+ this.pos++;
225
+ this.status = STAT.NORMAL;
226
+ }
227
+ break;
228
+ case STAT.QUOTATION:
229
+ case STAT.DQUOTATION:
230
+ this.param += this.chars[this.pos];
231
+ break;
232
+ default:
233
+ this.parsedSql += this.chars[this.pos];
234
+ this.status = STAT.NORMAL;
235
+ }
236
+ };
237
+ EscapeLiteralSQL.prototype._slash = function () {
238
+ switch (this.status) {
239
+ case STAT.COMMENT:
240
+ this.parsedSql += this.chars[this.pos];
241
+ break;
242
+ case STAT.QUOTATION:
243
+ case STAT.DQUOTATION:
244
+ this.param += this.chars[this.pos];
245
+ break;
246
+ default:
247
+ if (this.getNext(this.pos) === '*') {
248
+ this.pos++;
249
+ this.parsedSql += "/*";
250
+ this.status = STAT.COMMENT;
251
+ }
252
+ }
253
+ };
254
+ EscapeLiteralSQL.prototype._minus = function () {
255
+ switch (this.status) {
256
+ case STAT.COMMENT:
257
+ this.parsedSql += this.chars[this.pos];
258
+ break;
259
+ case STAT.QUOTATION:
260
+ case STAT.DQUOTATION:
261
+ this.param += this.chars[this.pos];
262
+ break;
263
+ default:
264
+ if (this.getNext(this.pos) === '-') {
265
+ this.parsedSql += this.chars[this.pos];
266
+ while (this.chars[this.pos] != '\n') {
267
+ this.pos++;
268
+ if (this.pos < this.length) {
269
+ this.parsedSql += this.chars[this.pos];
270
+ } else {
271
+ break;
272
+ }
273
+ }
274
+ } else {
275
+ this.parsedSql += this.chars[this.pos];
276
+ }
277
+ this.status = STAT.NORMAL;
278
+ }
279
+ };
280
+ EscapeLiteralSQL.prototype._dot = function () {
281
+ switch (this.status) {
282
+ case STAT.NORMAL:
283
+ this.parsedSql += this.chars[this.pos];
284
+ break;
285
+ case STAT.COMMENT:
286
+ this.parsedSql += this.chars[this.pos];
287
+ break;
288
+ case STAT.ALPHABET:
289
+ this.parsedSql += this.chars[this.pos];
290
+ this.status = STAT.NORMAL;
291
+ break;
292
+ case STAT.NUMBER:
293
+ this.param += this.chars[this.pos];
294
+ break;
295
+ case STAT.QUOTATION:
296
+ case STAT.DQUOTATION:
297
+ this.param += this.chars[this.pos];
298
+ break;
299
+ }
300
+ };
301
+ EscapeLiteralSQL.prototype._number = function () {
302
+ switch (this.status) {
303
+ case STAT.NORMAL:
304
+ if (this.param.length > 0) {
305
+ this.param += ",";
306
+ }
307
+ this.param += this.chars[this.pos];
308
+ this.parsedSql += this.substitute_num;
309
+ this.status = STAT.NUMBER;
310
+ break;
311
+ case STAT.COMMENT:
312
+ case STAT.COLON:
313
+ case STAT.ALPHABET:
314
+ this.parsedSql += this.chars[this.pos];
315
+ break;
316
+ case STAT.NUMBER:
317
+ case STAT.QUOTATION:
318
+ case STAT.DQUOTATION:
319
+ this.param += this.chars[this.pos];
320
+ break;
321
+ }
322
+ };
323
+ EscapeLiteralSQL.prototype.getNext = function (x) {
324
+ return x < this.length ? this.chars[x+1] : 0;
325
+ };
326
+ EscapeLiteralSQL.prototype.getParsedSql = function () {
327
+ return this.parsedSql;
328
+ };
329
+ EscapeLiteralSQL.prototype.getParameter = function () {
330
+ return this.param;
331
+ };
332
+
333
+ var ASCII_a = 97,
334
+ ASCII_z = 122,
335
+ ASCII_A = 65,
336
+ ASCII_Z = 90;
337
+
338
+ function isLetter(ch) {
339
+ var str = ch.charCodeAt(0);
340
+ return ((str >= ASCII_a) && (str <= ASCII_z)) || ((str >= ASCII_A) && (str <= ASCII_Z));
341
+ }
342
+
343
343
  module.exports = EscapeLiteralSQL;