@yanit/jsondb 0.1.1

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 (118) hide show
  1. package/README.md +903 -0
  2. package/dist/bin/cli-export.d.ts +7 -0
  3. package/dist/bin/cli-export.d.ts.map +1 -0
  4. package/dist/bin/cli-export.js +318 -0
  5. package/dist/bin/cli-export.js.map +1 -0
  6. package/dist/bin/cli-import.d.ts +7 -0
  7. package/dist/bin/cli-import.d.ts.map +1 -0
  8. package/dist/bin/cli-import.js +298 -0
  9. package/dist/bin/cli-import.js.map +1 -0
  10. package/dist/bin/server.d.ts +7 -0
  11. package/dist/bin/server.d.ts.map +1 -0
  12. package/dist/bin/server.js +92 -0
  13. package/dist/bin/server.js.map +1 -0
  14. package/dist/examples/sql-example.d.ts +7 -0
  15. package/dist/examples/sql-example.d.ts.map +1 -0
  16. package/dist/examples/sql-example.js +131 -0
  17. package/dist/examples/sql-example.js.map +1 -0
  18. package/dist/src/BulkOp.d.ts +74 -0
  19. package/dist/src/BulkOp.d.ts.map +1 -0
  20. package/dist/src/BulkOp.js +143 -0
  21. package/dist/src/BulkOp.js.map +1 -0
  22. package/dist/src/Collection.d.ts +232 -0
  23. package/dist/src/Collection.d.ts.map +1 -0
  24. package/dist/src/Collection.js +705 -0
  25. package/dist/src/Collection.js.map +1 -0
  26. package/dist/src/Cursor.d.ts +94 -0
  27. package/dist/src/Cursor.d.ts.map +1 -0
  28. package/dist/src/Cursor.js +259 -0
  29. package/dist/src/Cursor.js.map +1 -0
  30. package/dist/src/Database.d.ts +98 -0
  31. package/dist/src/Database.d.ts.map +1 -0
  32. package/dist/src/Database.js +198 -0
  33. package/dist/src/Database.js.map +1 -0
  34. package/dist/src/Operators.d.ts +73 -0
  35. package/dist/src/Operators.d.ts.map +1 -0
  36. package/dist/src/Operators.js +339 -0
  37. package/dist/src/Operators.js.map +1 -0
  38. package/dist/src/QueryCache.d.ts +87 -0
  39. package/dist/src/QueryCache.d.ts.map +1 -0
  40. package/dist/src/QueryCache.js +155 -0
  41. package/dist/src/QueryCache.js.map +1 -0
  42. package/dist/src/SQLExecutor.d.ts +60 -0
  43. package/dist/src/SQLExecutor.d.ts.map +1 -0
  44. package/dist/src/SQLExecutor.js +317 -0
  45. package/dist/src/SQLExecutor.js.map +1 -0
  46. package/dist/src/SQLParser.d.ts +181 -0
  47. package/dist/src/SQLParser.d.ts.map +1 -0
  48. package/dist/src/SQLParser.js +640 -0
  49. package/dist/src/SQLParser.js.map +1 -0
  50. package/dist/src/Schema.d.ts +92 -0
  51. package/dist/src/Schema.d.ts.map +1 -0
  52. package/dist/src/Schema.js +253 -0
  53. package/dist/src/Schema.js.map +1 -0
  54. package/dist/src/Transaction.d.ts +118 -0
  55. package/dist/src/Transaction.d.ts.map +1 -0
  56. package/dist/src/Transaction.js +233 -0
  57. package/dist/src/Transaction.js.map +1 -0
  58. package/dist/src/Utils.d.ts +68 -0
  59. package/dist/src/Utils.d.ts.map +1 -0
  60. package/dist/src/Utils.js +187 -0
  61. package/dist/src/Utils.js.map +1 -0
  62. package/dist/src/errors.d.ts +58 -0
  63. package/dist/src/errors.d.ts.map +1 -0
  64. package/dist/src/errors.js +85 -0
  65. package/dist/src/errors.js.map +1 -0
  66. package/dist/src/index.d.ts +39 -0
  67. package/dist/src/index.d.ts.map +1 -0
  68. package/dist/src/index.js +44 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/test/basic.test.d.ts +5 -0
  71. package/dist/test/basic.test.d.ts.map +1 -0
  72. package/dist/test/basic.test.js +283 -0
  73. package/dist/test/basic.test.js.map +1 -0
  74. package/dist/test/index.test.d.ts +5 -0
  75. package/dist/test/index.test.d.ts.map +1 -0
  76. package/dist/test/index.test.js +126 -0
  77. package/dist/test/index.test.js.map +1 -0
  78. package/dist/test/jsonb.test.d.ts +5 -0
  79. package/dist/test/jsonb.test.d.ts.map +1 -0
  80. package/dist/test/jsonb.test.js +165 -0
  81. package/dist/test/jsonb.test.js.map +1 -0
  82. package/dist/test/optimization.test.d.ts +6 -0
  83. package/dist/test/optimization.test.d.ts.map +1 -0
  84. package/dist/test/optimization.test.js +196 -0
  85. package/dist/test/optimization.test.js.map +1 -0
  86. package/dist/test/schema.test.d.ts +5 -0
  87. package/dist/test/schema.test.d.ts.map +1 -0
  88. package/dist/test/schema.test.js +197 -0
  89. package/dist/test/schema.test.js.map +1 -0
  90. package/dist/test/sql.test.d.ts +7 -0
  91. package/dist/test/sql.test.d.ts.map +1 -0
  92. package/dist/test/sql.test.js +21 -0
  93. package/dist/test/sql.test.js.map +1 -0
  94. package/package.json +73 -0
  95. package/src/BulkOp.js +181 -0
  96. package/src/BulkOp.ts +191 -0
  97. package/src/Collection.js +843 -0
  98. package/src/Collection.ts +896 -0
  99. package/src/Cursor.js +315 -0
  100. package/src/Cursor.ts +319 -0
  101. package/src/Database.js +244 -0
  102. package/src/Database.ts +268 -0
  103. package/src/Operators.js +382 -0
  104. package/src/Operators.ts +375 -0
  105. package/src/QueryCache.js +190 -0
  106. package/src/QueryCache.ts +208 -0
  107. package/src/SQLExecutor.ts +391 -0
  108. package/src/SQLParser.ts +814 -0
  109. package/src/Schema.js +292 -0
  110. package/src/Schema.ts +317 -0
  111. package/src/Transaction.js +291 -0
  112. package/src/Transaction.ts +313 -0
  113. package/src/Utils.js +205 -0
  114. package/src/Utils.ts +205 -0
  115. package/src/errors.js +93 -0
  116. package/src/errors.ts +93 -0
  117. package/src/index.js +90 -0
  118. package/src/index.ts +106 -0
@@ -0,0 +1,640 @@
1
+ /**
2
+ * SQL 解析器模块
3
+ * 支持标准 SQL 语法子集,转换为 JSONDB 查询操作
4
+ */
5
+ /**
6
+ * SQL 解析器类
7
+ */
8
+ export class SQLParser {
9
+ sql = '';
10
+ pos = 0;
11
+ currentChar = '';
12
+ /**
13
+ * 解析 SQL 语句
14
+ */
15
+ parse(sql) {
16
+ try {
17
+ this.sql = sql.trim();
18
+ this.pos = 0;
19
+ this.currentChar = this.sql[0] || '';
20
+ // 跳过空白字符
21
+ this.skipWhitespace();
22
+ // 获取第一个词判断语句类型
23
+ const firstWord = this.readWord().toUpperCase();
24
+ this.skipWhitespace();
25
+ switch (firstWord) {
26
+ case 'SELECT':
27
+ return { success: true, statement: this.parseSelect() };
28
+ case 'INSERT':
29
+ return { success: true, statement: this.parseInsert() };
30
+ case 'UPDATE':
31
+ return { success: true, statement: this.parseUpdate() };
32
+ case 'DELETE':
33
+ return { success: true, statement: this.parseDelete() };
34
+ default:
35
+ return { success: false, error: `不支持的 SQL 语句类型:${firstWord}` };
36
+ }
37
+ }
38
+ catch (error) {
39
+ return {
40
+ success: false,
41
+ error: `SQL 解析错误:${error.message}`
42
+ };
43
+ }
44
+ }
45
+ /**
46
+ * 解析 SELECT 语句
47
+ */
48
+ parseSelect() {
49
+ const statement = {
50
+ type: 'SELECT',
51
+ columns: [],
52
+ table: '',
53
+ distinct: false
54
+ };
55
+ // 检查 DISTINCT
56
+ if (this.peekWord().toUpperCase() === 'DISTINCT') {
57
+ this.readWord();
58
+ statement.distinct = true;
59
+ }
60
+ // 解析列
61
+ statement.columns = this.parseColumnList();
62
+ // 解析 FROM
63
+ this.skipWhitespace();
64
+ const fromWord = this.readWord().toUpperCase();
65
+ if (fromWord !== 'FROM') {
66
+ throw new Error(`期望 FROM 关键字,得到:${fromWord}`);
67
+ }
68
+ // 解析表名
69
+ this.skipWhitespace();
70
+ statement.table = this.readIdentifier();
71
+ // 解析可选子句
72
+ while (this.pos < this.sql.length) {
73
+ this.skipWhitespace();
74
+ if (this.pos >= this.sql.length)
75
+ break;
76
+ const keyword = this.peekWord().toUpperCase();
77
+ switch (keyword) {
78
+ case 'WHERE':
79
+ this.readWord();
80
+ this.skipWhitespace();
81
+ statement.where = this.parseWhereClause();
82
+ break;
83
+ case 'GROUP':
84
+ this.readWord();
85
+ this.skipWhitespace();
86
+ const byWord = this.readWord().toUpperCase();
87
+ if (byWord !== 'BY') {
88
+ throw new Error('期望 GROUP BY');
89
+ }
90
+ this.skipWhitespace();
91
+ statement.groupBy = this.parseColumnList();
92
+ break;
93
+ case 'HAVING':
94
+ this.readWord();
95
+ this.skipWhitespace();
96
+ statement.having = this.parseWhereClause();
97
+ break;
98
+ case 'ORDER':
99
+ this.readWord();
100
+ this.skipWhitespace();
101
+ const orderByWord = this.readWord().toUpperCase();
102
+ if (orderByWord !== 'BY') {
103
+ throw new Error('期望 ORDER BY');
104
+ }
105
+ this.skipWhitespace();
106
+ statement.orderBy = this.parseOrderByList();
107
+ break;
108
+ case 'LIMIT':
109
+ this.readWord();
110
+ this.skipWhitespace();
111
+ statement.limit = this.readNumber();
112
+ break;
113
+ case 'OFFSET':
114
+ this.readWord();
115
+ this.skipWhitespace();
116
+ statement.offset = this.readNumber();
117
+ break;
118
+ default:
119
+ // 未知关键字,跳过
120
+ this.readWord();
121
+ }
122
+ }
123
+ return statement;
124
+ }
125
+ /**
126
+ * 解析 INSERT 语句
127
+ */
128
+ parseInsert() {
129
+ const statement = {
130
+ type: 'INSERT',
131
+ table: '',
132
+ columns: [],
133
+ values: []
134
+ };
135
+ // 解析 INTO (可选)
136
+ const intoWord = this.peekWord().toUpperCase();
137
+ if (intoWord === 'INTO') {
138
+ this.readWord();
139
+ this.skipWhitespace();
140
+ }
141
+ // 解析表名
142
+ statement.table = this.readIdentifier();
143
+ // 解析列名
144
+ this.skipWhitespace();
145
+ if (this.currentChar === '(') {
146
+ this.readChar();
147
+ this.skipWhitespace();
148
+ statement.columns = this.parseColumnList();
149
+ this.skipWhitespace();
150
+ // 读取闭合括号
151
+ // @ts-ignore - 类型推断问题
152
+ if (this.sql[this.pos] === ')') {
153
+ this.readChar();
154
+ }
155
+ else {
156
+ throw new Error('期望闭合括号 )');
157
+ }
158
+ }
159
+ // 解析 VALUES
160
+ this.skipWhitespace();
161
+ const valuesWord = this.readWord().toUpperCase();
162
+ if (valuesWord !== 'VALUES') {
163
+ throw new Error(`期望 VALUES 关键字,得到:${valuesWord}`);
164
+ }
165
+ // 解析值列表
166
+ this.skipWhitespace();
167
+ statement.values = this.parseValuesList();
168
+ return statement;
169
+ }
170
+ /**
171
+ * 解析 UPDATE 语句
172
+ */
173
+ parseUpdate() {
174
+ const statement = {
175
+ type: 'UPDATE',
176
+ table: '',
177
+ set: []
178
+ };
179
+ // 解析表名
180
+ statement.table = this.readIdentifier();
181
+ // 解析 SET
182
+ this.skipWhitespace();
183
+ const setWord = this.readWord().toUpperCase();
184
+ if (setWord !== 'SET') {
185
+ throw new Error(`期望 SET 关键字,得到:${setWord}`);
186
+ }
187
+ // 解析 SET 子句
188
+ this.skipWhitespace();
189
+ statement.set = this.parseSetClause();
190
+ // 解析可选 WHERE
191
+ this.skipWhitespace();
192
+ if (this.peekWord().toUpperCase() === 'WHERE') {
193
+ this.readWord();
194
+ this.skipWhitespace();
195
+ statement.where = this.parseWhereClause();
196
+ }
197
+ return statement;
198
+ }
199
+ /**
200
+ * 解析 DELETE 语句
201
+ */
202
+ parseDelete() {
203
+ const statement = {
204
+ type: 'DELETE',
205
+ table: ''
206
+ };
207
+ // 解析 FROM
208
+ const fromWord = this.peekWord().toUpperCase();
209
+ if (fromWord === 'FROM') {
210
+ this.readWord();
211
+ this.skipWhitespace();
212
+ }
213
+ // 解析表名
214
+ statement.table = this.readIdentifier();
215
+ // 解析可选 WHERE
216
+ this.skipWhitespace();
217
+ if (this.peekWord().toUpperCase() === 'WHERE') {
218
+ this.readWord();
219
+ this.skipWhitespace();
220
+ statement.where = this.parseWhereClause();
221
+ }
222
+ return statement;
223
+ }
224
+ /**
225
+ * 解析列名列表
226
+ */
227
+ parseColumnList() {
228
+ const columns = [];
229
+ // 处理 * 情况
230
+ if (this.currentChar === '*') {
231
+ this.readChar();
232
+ return ['*'];
233
+ }
234
+ columns.push(this.readIdentifier());
235
+ while (true) {
236
+ this.skipWhitespace();
237
+ if (this.currentChar === ',') {
238
+ this.readChar();
239
+ this.skipWhitespace();
240
+ columns.push(this.readIdentifier());
241
+ }
242
+ else {
243
+ break;
244
+ }
245
+ }
246
+ return columns;
247
+ }
248
+ /**
249
+ * 解析 WHERE 子句
250
+ */
251
+ parseWhereClause() {
252
+ const conditions = this.parseCondition();
253
+ return conditions;
254
+ }
255
+ /**
256
+ * 解析条件(支持 AND/OR)
257
+ */
258
+ parseCondition() {
259
+ const left = this.parseSimpleCondition();
260
+ this.skipWhitespace();
261
+ const keyword = this.peekWord().toUpperCase();
262
+ if (keyword === 'AND') {
263
+ this.readWord();
264
+ this.skipWhitespace();
265
+ const right = this.parseCondition();
266
+ return {
267
+ type: 'and',
268
+ conditions: [left, right]
269
+ };
270
+ }
271
+ else if (keyword === 'OR') {
272
+ this.readWord();
273
+ this.skipWhitespace();
274
+ const right = this.parseCondition();
275
+ return {
276
+ type: 'or',
277
+ conditions: [left, right]
278
+ };
279
+ }
280
+ return left;
281
+ }
282
+ /**
283
+ * 解析简单条件
284
+ */
285
+ parseSimpleCondition() {
286
+ // 处理括号
287
+ this.skipWhitespace();
288
+ if (this.currentChar === '(') {
289
+ this.readChar();
290
+ const condition = this.parseCondition();
291
+ this.skipWhitespace();
292
+ // @ts-ignore - 类型推断问题
293
+ if (this.sql[this.pos] === ')') {
294
+ this.readChar();
295
+ }
296
+ return condition;
297
+ }
298
+ // 处理 NOT
299
+ if (this.peekWord().toUpperCase() === 'NOT') {
300
+ this.readWord();
301
+ this.skipWhitespace();
302
+ const condition = this.parseSimpleCondition();
303
+ return { type: 'not', condition };
304
+ }
305
+ const column = this.readIdentifier();
306
+ this.skipWhitespace();
307
+ // 解析操作符
308
+ let operator = this.readOperator();
309
+ this.skipWhitespace();
310
+ // 解析值
311
+ const value = this.readValue();
312
+ return {
313
+ type: 'condition',
314
+ column,
315
+ operator,
316
+ value
317
+ };
318
+ }
319
+ /**
320
+ * 解析操作符
321
+ */
322
+ readOperator() {
323
+ this.skipWhitespace();
324
+ let op = '';
325
+ // 双字符操作符
326
+ if (this.currentChar === '=' && this.peekChar(1) !== '=') {
327
+ this.readChar();
328
+ return '=';
329
+ }
330
+ if (this.currentChar === '<' && this.peekChar(1) === '=') {
331
+ this.readChar();
332
+ this.readChar();
333
+ return '<=';
334
+ }
335
+ if (this.currentChar === '>' && this.peekChar(1) === '=') {
336
+ this.readChar();
337
+ this.readChar();
338
+ return '>=';
339
+ }
340
+ if (this.currentChar === '!' && this.peekChar(1) === '=') {
341
+ this.readChar();
342
+ this.readChar();
343
+ return '!=';
344
+ }
345
+ if (this.currentChar === '<' && this.peekChar(1) === '>') {
346
+ this.readChar();
347
+ this.readChar();
348
+ return '<>';
349
+ }
350
+ // 单字符操作符
351
+ if (['=', '<', '>', '!'].includes(this.currentChar)) {
352
+ op = this.currentChar;
353
+ this.readChar();
354
+ return op;
355
+ }
356
+ // 单词操作符 (LIKE, IN, IS, BETWEEN)
357
+ // 先检查是否是字母开头,避免遇到引号
358
+ if (/[a-zA-Z]/.test(this.currentChar)) {
359
+ const word = this.readWord().toUpperCase();
360
+ if (['LIKE', 'IN', 'IS', 'BETWEEN'].includes(word)) {
361
+ return word;
362
+ }
363
+ // 如果不是已知操作符,可能是值的一部分,回退
364
+ throw new Error(`未知操作符:${word}`);
365
+ }
366
+ throw new Error(`未知操作符:${this.currentChar}`);
367
+ }
368
+ /**
369
+ * 解析值
370
+ */
371
+ readValue() {
372
+ this.skipWhitespace();
373
+ // NULL
374
+ if (this.peekWord().toUpperCase() === 'NULL') {
375
+ this.readWord();
376
+ return null;
377
+ }
378
+ // TRUE
379
+ if (this.peekWord().toUpperCase() === 'TRUE') {
380
+ this.readWord();
381
+ return true;
382
+ }
383
+ // FALSE
384
+ if (this.peekWord().toUpperCase() === 'FALSE') {
385
+ this.readWord();
386
+ return false;
387
+ }
388
+ // 数组 (value1, value2, ...)
389
+ if (this.currentChar === '(') {
390
+ this.readChar();
391
+ this.skipWhitespace();
392
+ const values = [];
393
+ // @ts-ignore - 类型推断问题
394
+ while (this.sql[this.pos] !== ')') {
395
+ values.push(this.readValue());
396
+ this.skipWhitespace();
397
+ // @ts-ignore - 类型推断问题
398
+ if (this.sql[this.pos] === ',') {
399
+ this.readChar();
400
+ this.skipWhitespace();
401
+ }
402
+ }
403
+ // @ts-ignore - 类型推断问题
404
+ if (this.sql[this.pos] === ')') {
405
+ this.readChar();
406
+ }
407
+ return values;
408
+ }
409
+ // 字符串
410
+ if (this.currentChar === "'" || this.currentChar === '"') {
411
+ return this.readString();
412
+ }
413
+ // 数字
414
+ if (this.isDigit(this.currentChar) || (this.currentChar === '-' && this.isDigit(this.peekChar(1)))) {
415
+ return this.readNumber();
416
+ }
417
+ // 标识符
418
+ return this.readIdentifier();
419
+ }
420
+ /**
421
+ * 解析 SET 子句
422
+ */
423
+ parseSetClause() {
424
+ const set = [];
425
+ set.push({
426
+ column: this.readIdentifier(),
427
+ value: this.parseSetValue()
428
+ });
429
+ while (true) {
430
+ this.skipWhitespace();
431
+ if (this.currentChar === ',') {
432
+ this.readChar();
433
+ this.skipWhitespace();
434
+ set.push({
435
+ column: this.readIdentifier(),
436
+ value: this.parseSetValue()
437
+ });
438
+ }
439
+ else {
440
+ break;
441
+ }
442
+ }
443
+ return set;
444
+ }
445
+ /**
446
+ * 解析 SET 值
447
+ */
448
+ parseSetValue() {
449
+ this.skipWhitespace();
450
+ if (this.currentChar === '=') {
451
+ this.readChar();
452
+ }
453
+ this.skipWhitespace();
454
+ return this.readValue();
455
+ }
456
+ /**
457
+ * 解析值列表
458
+ */
459
+ parseValuesList() {
460
+ const values = [];
461
+ values.push(this.parseValueRow());
462
+ while (true) {
463
+ this.skipWhitespace();
464
+ if (this.currentChar === ',') {
465
+ this.readChar();
466
+ this.skipWhitespace();
467
+ values.push(this.parseValueRow());
468
+ }
469
+ else {
470
+ break;
471
+ }
472
+ }
473
+ return values;
474
+ }
475
+ /**
476
+ * 解析单行值
477
+ */
478
+ parseValueRow() {
479
+ const row = [];
480
+ this.skipWhitespace();
481
+ if (this.currentChar === '(') {
482
+ this.readChar();
483
+ this.skipWhitespace();
484
+ row.push(this.readValue());
485
+ while (true) {
486
+ this.skipWhitespace();
487
+ // @ts-ignore - 类型推断问题
488
+ if (this.sql[this.pos] === ',') {
489
+ this.readChar();
490
+ this.skipWhitespace();
491
+ row.push(this.readValue());
492
+ }
493
+ else {
494
+ break;
495
+ }
496
+ }
497
+ this.skipWhitespace();
498
+ // @ts-ignore - 类型推断问题
499
+ if (this.sql[this.pos] === ')') {
500
+ this.readChar();
501
+ }
502
+ else {
503
+ throw new Error('期望闭合括号 )');
504
+ }
505
+ }
506
+ return row;
507
+ }
508
+ /**
509
+ * 解析 ORDER BY 列表
510
+ */
511
+ parseOrderByList() {
512
+ const orderBy = [];
513
+ orderBy.push(this.parseOrderByItem());
514
+ while (true) {
515
+ this.skipWhitespace();
516
+ if (this.currentChar === ',') {
517
+ this.readChar();
518
+ this.skipWhitespace();
519
+ orderBy.push(this.parseOrderByItem());
520
+ }
521
+ else {
522
+ break;
523
+ }
524
+ }
525
+ return orderBy;
526
+ }
527
+ /**
528
+ * 解析单个 ORDER BY
529
+ */
530
+ parseOrderByItem() {
531
+ const column = this.readIdentifier();
532
+ this.skipWhitespace();
533
+ let direction = 'ASC';
534
+ const dirWord = this.peekWord().toUpperCase();
535
+ if (dirWord === 'ASC' || dirWord === 'DESC') {
536
+ this.readWord();
537
+ direction = dirWord;
538
+ }
539
+ return { column, direction };
540
+ }
541
+ // ========== 词法分析辅助方法 ==========
542
+ skipWhitespace() {
543
+ while (this.isWhitespace(this.currentChar)) {
544
+ this.pos++;
545
+ this.currentChar = this.sql[this.pos] || '';
546
+ }
547
+ }
548
+ readChar() {
549
+ const char = this.currentChar;
550
+ this.pos++;
551
+ this.currentChar = this.sql[this.pos] || '';
552
+ return char;
553
+ }
554
+ peekChar(offset = 0) {
555
+ return this.sql[this.pos + offset] || '';
556
+ }
557
+ readWord() {
558
+ let word = '';
559
+ while (this.isWordChar(this.currentChar)) {
560
+ word += this.readChar();
561
+ }
562
+ return word;
563
+ }
564
+ peekWord() {
565
+ const savedPos = this.pos;
566
+ const word = this.readWord();
567
+ this.pos = savedPos;
568
+ this.currentChar = this.sql[this.pos] || '';
569
+ return word;
570
+ }
571
+ readIdentifier() {
572
+ this.skipWhitespace();
573
+ // 处理引号标识符
574
+ if (this.currentChar === '`' || this.currentChar === '"') {
575
+ const quote = this.readChar();
576
+ let identifier = '';
577
+ while (this.currentChar !== quote && this.pos < this.sql.length) {
578
+ identifier += this.readChar();
579
+ }
580
+ if (this.currentChar === quote) {
581
+ this.readChar();
582
+ }
583
+ return identifier;
584
+ }
585
+ return this.readWord();
586
+ }
587
+ readString() {
588
+ const quote = this.readChar();
589
+ let str = '';
590
+ while (this.currentChar !== quote && this.pos < this.sql.length) {
591
+ if (this.currentChar === '\\' && this.peekChar(1) === quote) {
592
+ this.readChar();
593
+ str += this.readChar();
594
+ }
595
+ else {
596
+ str += this.readChar();
597
+ }
598
+ }
599
+ if (this.currentChar === quote) {
600
+ this.readChar();
601
+ }
602
+ return str;
603
+ }
604
+ readNumber() {
605
+ let numStr = '';
606
+ // 处理负数
607
+ if (this.currentChar === '-') {
608
+ numStr += this.readChar();
609
+ }
610
+ // 整数部分
611
+ while (this.isDigit(this.currentChar)) {
612
+ numStr += this.readChar();
613
+ }
614
+ // 小数部分
615
+ if (this.currentChar === '.' && this.isDigit(this.peekChar(1))) {
616
+ numStr += this.readChar();
617
+ while (this.isDigit(this.currentChar)) {
618
+ numStr += this.readChar();
619
+ }
620
+ }
621
+ return parseFloat(numStr);
622
+ }
623
+ isWhitespace(char) {
624
+ return char === ' ' || char === '\t' || char === '\n' || char === '\r';
625
+ }
626
+ isWordChar(char) {
627
+ return /[a-zA-Z0-9_]/.test(char);
628
+ }
629
+ isDigit(char) {
630
+ return /[0-9]/.test(char);
631
+ }
632
+ }
633
+ /**
634
+ * 解析 SQL 语句
635
+ */
636
+ export function parseSQL(sql) {
637
+ const parser = new SQLParser();
638
+ return parser.parse(sql);
639
+ }
640
+ //# sourceMappingURL=SQLParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLParser.js","sourceRoot":"","sources":["../../src/SQLParser.ts"],"names":[],"mappings":"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"}