@yydb/light-db 0.0.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.
Files changed (150) hide show
  1. package/dist/api/LightDB.d.ts +194 -0
  2. package/dist/api/LightDB.d.ts.map +1 -0
  3. package/dist/api/LightDB.js +299 -0
  4. package/dist/api/LightDB.js.map +1 -0
  5. package/dist/api/Transaction.d.ts +100 -0
  6. package/dist/api/Transaction.d.ts.map +1 -0
  7. package/dist/api/Transaction.js +263 -0
  8. package/dist/api/Transaction.js.map +1 -0
  9. package/dist/api/index.d.ts +24 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +54 -0
  12. package/dist/api/index.js.map +1 -0
  13. package/dist/api/types.d.ts +154 -0
  14. package/dist/api/types.d.ts.map +1 -0
  15. package/dist/api/types.js +7 -0
  16. package/dist/api/types.js.map +1 -0
  17. package/dist/collection/Collection.d.ts +235 -0
  18. package/dist/collection/Collection.d.ts.map +1 -0
  19. package/dist/collection/Collection.js +671 -0
  20. package/dist/collection/Collection.js.map +1 -0
  21. package/dist/collection/QueryBuilder.d.ts +225 -0
  22. package/dist/collection/QueryBuilder.d.ts.map +1 -0
  23. package/dist/collection/QueryBuilder.js +475 -0
  24. package/dist/collection/QueryBuilder.js.map +1 -0
  25. package/dist/collection/QueryParser.d.ts +117 -0
  26. package/dist/collection/QueryParser.d.ts.map +1 -0
  27. package/dist/collection/QueryParser.js +438 -0
  28. package/dist/collection/QueryParser.js.map +1 -0
  29. package/dist/collection/index.d.ts +42 -0
  30. package/dist/collection/index.d.ts.map +1 -0
  31. package/dist/collection/index.js +41 -0
  32. package/dist/collection/index.js.map +1 -0
  33. package/dist/collection/types.d.ts +365 -0
  34. package/dist/collection/types.d.ts.map +1 -0
  35. package/dist/collection/types.js +7 -0
  36. package/dist/collection/types.js.map +1 -0
  37. package/dist/constants/index.d.ts +51 -0
  38. package/dist/constants/index.d.ts.map +1 -0
  39. package/dist/constants/index.js +68 -0
  40. package/dist/constants/index.js.map +1 -0
  41. package/dist/errors/index.d.ts +69 -0
  42. package/dist/errors/index.d.ts.map +1 -0
  43. package/dist/errors/index.js +132 -0
  44. package/dist/errors/index.js.map +1 -0
  45. package/dist/index.d.ts +220 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +729 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/indexes/BPlusTree.d.ts +181 -0
  50. package/dist/indexes/BPlusTree.d.ts.map +1 -0
  51. package/dist/indexes/BPlusTree.js +528 -0
  52. package/dist/indexes/BPlusTree.js.map +1 -0
  53. package/dist/indexes/IndexManager.d.ts +236 -0
  54. package/dist/indexes/IndexManager.d.ts.map +1 -0
  55. package/dist/indexes/IndexManager.js +502 -0
  56. package/dist/indexes/IndexManager.js.map +1 -0
  57. package/dist/indexes/PrimaryIndex.d.ts +240 -0
  58. package/dist/indexes/PrimaryIndex.d.ts.map +1 -0
  59. package/dist/indexes/PrimaryIndex.js +354 -0
  60. package/dist/indexes/PrimaryIndex.js.map +1 -0
  61. package/dist/indexes/SecondaryIndex.d.ts +204 -0
  62. package/dist/indexes/SecondaryIndex.d.ts.map +1 -0
  63. package/dist/indexes/SecondaryIndex.js +480 -0
  64. package/dist/indexes/SecondaryIndex.js.map +1 -0
  65. package/dist/indexes/errors.d.ts +66 -0
  66. package/dist/indexes/errors.d.ts.map +1 -0
  67. package/dist/indexes/errors.js +117 -0
  68. package/dist/indexes/errors.js.map +1 -0
  69. package/dist/indexes/index.d.ts +52 -0
  70. package/dist/indexes/index.d.ts.map +1 -0
  71. package/dist/indexes/index.js +131 -0
  72. package/dist/indexes/index.js.map +1 -0
  73. package/dist/indexes/types.d.ts +246 -0
  74. package/dist/indexes/types.d.ts.map +1 -0
  75. package/dist/indexes/types.js +30 -0
  76. package/dist/indexes/types.js.map +1 -0
  77. package/dist/performance/BatchWALWriter.d.ts +185 -0
  78. package/dist/performance/BatchWALWriter.d.ts.map +1 -0
  79. package/dist/performance/BatchWALWriter.js +490 -0
  80. package/dist/performance/BatchWALWriter.js.map +1 -0
  81. package/dist/performance/ColumnarStorage.d.ts +138 -0
  82. package/dist/performance/ColumnarStorage.d.ts.map +1 -0
  83. package/dist/performance/ColumnarStorage.js +875 -0
  84. package/dist/performance/ColumnarStorage.js.map +1 -0
  85. package/dist/performance/LazyQuery.d.ts +307 -0
  86. package/dist/performance/LazyQuery.d.ts.map +1 -0
  87. package/dist/performance/LazyQuery.js +588 -0
  88. package/dist/performance/LazyQuery.js.map +1 -0
  89. package/dist/performance/OptimizedBuffer.d.ts +375 -0
  90. package/dist/performance/OptimizedBuffer.d.ts.map +1 -0
  91. package/dist/performance/OptimizedBuffer.js +730 -0
  92. package/dist/performance/OptimizedBuffer.js.map +1 -0
  93. package/dist/performance/RWLock.d.ts +260 -0
  94. package/dist/performance/RWLock.d.ts.map +1 -0
  95. package/dist/performance/RWLock.js +570 -0
  96. package/dist/performance/RWLock.js.map +1 -0
  97. package/dist/performance/index.d.ts +41 -0
  98. package/dist/performance/index.d.ts.map +1 -0
  99. package/dist/performance/index.js +162 -0
  100. package/dist/performance/index.js.map +1 -0
  101. package/dist/performance/types.d.ts +247 -0
  102. package/dist/performance/types.d.ts.map +1 -0
  103. package/dist/performance/types.js +26 -0
  104. package/dist/performance/types.js.map +1 -0
  105. package/dist/storage/Checkpoint.d.ts +128 -0
  106. package/dist/storage/Checkpoint.d.ts.map +1 -0
  107. package/dist/storage/Checkpoint.js +251 -0
  108. package/dist/storage/Checkpoint.js.map +1 -0
  109. package/dist/storage/LightFile.d.ts +227 -0
  110. package/dist/storage/LightFile.d.ts.map +1 -0
  111. package/dist/storage/LightFile.js +526 -0
  112. package/dist/storage/LightFile.js.map +1 -0
  113. package/dist/storage/Recovery.d.ts +172 -0
  114. package/dist/storage/Recovery.d.ts.map +1 -0
  115. package/dist/storage/Recovery.js +399 -0
  116. package/dist/storage/Recovery.js.map +1 -0
  117. package/dist/storage/SHMFile.d.ts +243 -0
  118. package/dist/storage/SHMFile.d.ts.map +1 -0
  119. package/dist/storage/SHMFile.js +436 -0
  120. package/dist/storage/SHMFile.js.map +1 -0
  121. package/dist/storage/StorageEngine.d.ts +146 -0
  122. package/dist/storage/StorageEngine.d.ts.map +1 -0
  123. package/dist/storage/StorageEngine.js +353 -0
  124. package/dist/storage/StorageEngine.js.map +1 -0
  125. package/dist/storage/WALFile.d.ts +248 -0
  126. package/dist/storage/WALFile.d.ts.map +1 -0
  127. package/dist/storage/WALFile.js +597 -0
  128. package/dist/storage/WALFile.js.map +1 -0
  129. package/dist/storage/index.d.ts +10 -0
  130. package/dist/storage/index.d.ts.map +1 -0
  131. package/dist/storage/index.js +153 -0
  132. package/dist/storage/index.js.map +1 -0
  133. package/dist/types/index.d.ts +220 -0
  134. package/dist/types/index.d.ts.map +1 -0
  135. package/dist/types/index.js +7 -0
  136. package/dist/types/index.js.map +1 -0
  137. package/dist/utils/binary.d.ts +271 -0
  138. package/dist/utils/binary.d.ts.map +1 -0
  139. package/dist/utils/binary.js +454 -0
  140. package/dist/utils/binary.js.map +1 -0
  141. package/dist/utils/file.d.ts +166 -0
  142. package/dist/utils/file.d.ts.map +1 -0
  143. package/dist/utils/file.js +346 -0
  144. package/dist/utils/file.js.map +1 -0
  145. package/dist/utils/index.d.ts +6 -0
  146. package/dist/utils/index.d.ts.map +1 -0
  147. package/dist/utils/index.js +39 -0
  148. package/dist/utils/index.js.map +1 -0
  149. package/package.json +37 -0
  150. package/readme.md +124 -0
@@ -0,0 +1,475 @@
1
+ "use strict";
2
+ /**
3
+ * LightDB 查询构建器
4
+ * 提供链式查询 API
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.QueryBuilder = void 0;
8
+ const QueryParser_1 = require("./QueryParser");
9
+ /**
10
+ * 查询构建器
11
+ * 提供链式查询 API
12
+ */
13
+ class QueryBuilder {
14
+ /**
15
+ * 创建查询构建器实例
16
+ * @param executor 查询执行器
17
+ */
18
+ constructor(executor) {
19
+ this.executor = executor;
20
+ this.filter = {};
21
+ this.sortCondition = {};
22
+ this.skipValue = 0;
23
+ this.limitValue = 0;
24
+ this.fieldsValue = null;
25
+ }
26
+ /**
27
+ * 设置查询条件
28
+ * @param condition 查询条件
29
+ */
30
+ where(condition) {
31
+ this.filter = { ...this.filter, ...condition };
32
+ return this;
33
+ }
34
+ /**
35
+ * 添加等于条件
36
+ * @param field 字段名
37
+ * @param value 值
38
+ */
39
+ eq(field, value) {
40
+ const currentFilter = this.filter[field];
41
+ if (typeof currentFilter === "object" && currentFilter !== null) {
42
+ currentFilter["$eq"] = value;
43
+ } else {
44
+ this.filter[field] = value;
45
+ }
46
+ return this;
47
+ }
48
+ /**
49
+ * 添加不等于条件
50
+ * @param field 字段名
51
+ * @param value 值
52
+ */
53
+ ne(field, value) {
54
+ const fieldCondition = this.getOrCreateFieldCondition(field);
55
+ fieldCondition["$ne"] = value;
56
+ return this;
57
+ }
58
+ /**
59
+ * 添加大于条件
60
+ * @param field 字段名
61
+ * @param value 值
62
+ */
63
+ gt(field, value) {
64
+ const fieldCondition = this.getOrCreateFieldCondition(field);
65
+ fieldCondition["$gt"] = value;
66
+ return this;
67
+ }
68
+ /**
69
+ * 添加大于等于条件
70
+ * @param field 字段名
71
+ * @param value 值
72
+ */
73
+ gte(field, value) {
74
+ const fieldCondition = this.getOrCreateFieldCondition(field);
75
+ fieldCondition["$gte"] = value;
76
+ return this;
77
+ }
78
+ /**
79
+ * 添加小于条件
80
+ * @param field 字段名
81
+ * @param value 值
82
+ */
83
+ lt(field, value) {
84
+ const fieldCondition = this.getOrCreateFieldCondition(field);
85
+ fieldCondition["$lt"] = value;
86
+ return this;
87
+ }
88
+ /**
89
+ * 添加小于等于条件
90
+ * @param field 字段名
91
+ * @param value 值
92
+ */
93
+ lte(field, value) {
94
+ const fieldCondition = this.getOrCreateFieldCondition(field);
95
+ fieldCondition["$lte"] = value;
96
+ return this;
97
+ }
98
+ /**
99
+ * 添加包含于数组条件
100
+ * @param field 字段名
101
+ * @param values 值数组
102
+ */
103
+ in(field, values) {
104
+ const fieldCondition = this.getOrCreateFieldCondition(field);
105
+ fieldCondition["$in"] = values;
106
+ return this;
107
+ }
108
+ /**
109
+ * 添加不包含于数组条件
110
+ * @param field 字段名
111
+ * @param values 值数组
112
+ */
113
+ nin(field, values) {
114
+ const fieldCondition = this.getOrCreateFieldCondition(field);
115
+ fieldCondition["$nin"] = values;
116
+ return this;
117
+ }
118
+ /**
119
+ * 添加存在性检查条件
120
+ * @param field 字段名
121
+ * @param exists 是否存在
122
+ */
123
+ fieldExists(field, exists = true) {
124
+ const fieldCondition = this.getOrCreateFieldCondition(field);
125
+ fieldCondition["$exists"] = exists;
126
+ return this;
127
+ }
128
+ /**
129
+ * 添加正则表达式匹配条件
130
+ * @param field 字段名
131
+ * @param pattern 正则表达式
132
+ * @param options 正则表达式选项
133
+ */
134
+ regex(field, pattern, options) {
135
+ const fieldCondition = this.getOrCreateFieldCondition(field);
136
+ fieldCondition["$regex"] = pattern;
137
+ if (options) {
138
+ fieldCondition["$options"] = options;
139
+ }
140
+ return this;
141
+ }
142
+ /**
143
+ * 添加逻辑与条件
144
+ * @param conditions 条件数组
145
+ */
146
+ and(...conditions) {
147
+ if (!this.filter.$and) {
148
+ this.filter.$and = [];
149
+ }
150
+ this.filter.$and.push(...conditions);
151
+ return this;
152
+ }
153
+ /**
154
+ * 添加逻辑或条件
155
+ * @param conditions 条件数组
156
+ */
157
+ or(...conditions) {
158
+ if (!this.filter.$or) {
159
+ this.filter.$or = [];
160
+ }
161
+ this.filter.$or.push(...conditions);
162
+ return this;
163
+ }
164
+ /**
165
+ * 添加逻辑非条件
166
+ * @param condition 条件
167
+ */
168
+ not(condition) {
169
+ this.filter.$not = condition;
170
+ return this;
171
+ }
172
+ /**
173
+ * 设置排序条件
174
+ * @param field 字段名
175
+ * @param direction 排序方向
176
+ */
177
+ sortBy(field, direction = 1) {
178
+ this.sortCondition[field] = direction;
179
+ return this;
180
+ }
181
+ /**
182
+ * 升序排序
183
+ * @param field 字段名
184
+ */
185
+ asc(field) {
186
+ return this.sortBy(field, "asc");
187
+ }
188
+ /**
189
+ * 降序排序
190
+ * @param field 字段名
191
+ */
192
+ desc(field) {
193
+ return this.sortBy(field, "desc");
194
+ }
195
+ /**
196
+ * 设置跳过记录数
197
+ * @param count 跳过的记录数
198
+ */
199
+ skip(count) {
200
+ this.skipValue = Math.max(0, count);
201
+ return this;
202
+ }
203
+ /**
204
+ * 设置返回记录数限制
205
+ * @param count 最大返回记录数
206
+ */
207
+ limit(count) {
208
+ this.limitValue = Math.max(0, count);
209
+ return this;
210
+ }
211
+ /**
212
+ * 设置返回的字段
213
+ * @param fields 字段列表
214
+ */
215
+ select(...fields) {
216
+ this.fieldsValue = fields;
217
+ return this;
218
+ }
219
+ /**
220
+ * 获取或创建字段条件对象
221
+ */
222
+ getOrCreateFieldCondition(field) {
223
+ const fieldKey = field;
224
+ let condition = this.filter[fieldKey];
225
+ if (!condition || typeof condition !== "object" || Array.isArray(condition)) {
226
+ condition = {};
227
+ this.filter[fieldKey] = condition;
228
+ }
229
+ return condition;
230
+ }
231
+ /**
232
+ * 执行查询并返回所有匹配的文档
233
+ */
234
+ toArray() {
235
+ const result = this.execute();
236
+ const output = {
237
+ docs: result.docs,
238
+ };
239
+ if (result.total !== undefined) {
240
+ output.total = result.total;
241
+ }
242
+ if (result.usedIndex !== undefined) {
243
+ output.usedIndex = result.usedIndex;
244
+ }
245
+ if (result.indexName !== undefined) {
246
+ output.indexName = result.indexName;
247
+ }
248
+ return output;
249
+ }
250
+ /**
251
+ * 执行查询并返回第一条匹配的文档
252
+ */
253
+ first() {
254
+ this.limitValue = 1;
255
+ const result = this.execute();
256
+ return result.docs.length > 0 ? (result.docs[0] ?? null) : null;
257
+ }
258
+ /**
259
+ * 执行查询并返回最后一条匹配的文档
260
+ */
261
+ last() {
262
+ this.limitValue = 1;
263
+ const result = this.execute();
264
+ return result.docs.length > 0 ? (result.docs[result.docs.length - 1] ?? null) : null;
265
+ }
266
+ /**
267
+ * 统计匹配的文档数量
268
+ */
269
+ count() {
270
+ const result = this.execute();
271
+ return result.total ?? result.docs.length;
272
+ }
273
+ /**
274
+ * 检查是否存在匹配的文档
275
+ */
276
+ hasMatch() {
277
+ return this.count() > 0;
278
+ }
279
+ /**
280
+ * 执行查询
281
+ */
282
+ execute() {
283
+ const indexFields = [this.executor.getPrimaryKeyField(), ...this.executor.getSecondaryIndexFields()];
284
+ const analysis = QueryParser_1.QueryParser.analyzeQuery(this.filter, indexFields);
285
+ let docs;
286
+ let usedIndex;
287
+ let indexName;
288
+ if (analysis.canUseIndex && analysis.indexField) {
289
+ const result = this.executeWithIndex(analysis);
290
+ docs = result.docs;
291
+ usedIndex = result.usedIndex;
292
+ indexName = result.indexName;
293
+ } else {
294
+ docs = this.executeWithScan();
295
+ }
296
+ const total = docs.length;
297
+ if (Object.keys(this.sortCondition).length > 0) {
298
+ docs = this.applySort(docs);
299
+ }
300
+ if (this.skipValue > 0) {
301
+ docs = docs.slice(this.skipValue);
302
+ }
303
+ if (this.limitValue > 0) {
304
+ docs = docs.slice(0, this.limitValue);
305
+ }
306
+ if (this.fieldsValue && this.fieldsValue.length > 0) {
307
+ docs = this.applyProjection(docs);
308
+ }
309
+ const output = {
310
+ docs,
311
+ total,
312
+ };
313
+ if (usedIndex !== undefined) {
314
+ output.usedIndex = usedIndex;
315
+ }
316
+ if (indexName !== undefined) {
317
+ output.indexName = indexName;
318
+ }
319
+ return output;
320
+ }
321
+ /**
322
+ * 使用索引执行查询
323
+ */
324
+ executeWithIndex(analysis) {
325
+ const primaryKeyField = this.executor.getPrimaryKeyField();
326
+ if (analysis.indexField === primaryKeyField) {
327
+ if (analysis.isExactMatch && analysis.indexValue !== undefined) {
328
+ const doc = this.executor.findByPrimaryKey(analysis.indexValue);
329
+ if (doc && QueryParser_1.QueryParser.matches(doc, this.filter)) {
330
+ const output = {
331
+ docs: [doc],
332
+ usedIndex: true,
333
+ };
334
+ output.indexName = primaryKeyField;
335
+ return output;
336
+ }
337
+ const output = {
338
+ docs: [],
339
+ usedIndex: true,
340
+ };
341
+ output.indexName = primaryKeyField;
342
+ return output;
343
+ }
344
+ }
345
+ const secondaryIndexFields = this.executor.getSecondaryIndexFields();
346
+ if (secondaryIndexFields.includes(analysis.indexField)) {
347
+ if (analysis.isExactMatch && analysis.indexValue !== undefined && analysis.indexField) {
348
+ const docs = this.executor.findBySecondaryIndex(analysis.indexField, analysis.indexValue);
349
+ const filtered = docs.filter((doc) => QueryParser_1.QueryParser.matches(doc, this.filter));
350
+ const output = {
351
+ docs: filtered,
352
+ usedIndex: true,
353
+ };
354
+ output.indexName = analysis.indexField;
355
+ return output;
356
+ }
357
+ }
358
+ return { docs: this.executeWithScan(), usedIndex: false };
359
+ }
360
+ /**
361
+ * 使用全表扫描执行查询
362
+ */
363
+ executeWithScan() {
364
+ const allDocs = this.executor.getAll();
365
+ return allDocs.filter((doc) => QueryParser_1.QueryParser.matches(doc, this.filter));
366
+ }
367
+ /**
368
+ * 应用排序
369
+ */
370
+ applySort(docs) {
371
+ const sortEntries = Object.entries(this.sortCondition);
372
+ if (sortEntries.length === 0) {
373
+ return docs;
374
+ }
375
+ return docs.slice().sort((a, b) => {
376
+ for (const [field, direction] of sortEntries) {
377
+ const aVal = a[field];
378
+ const bVal = b[field];
379
+ const cmp = this.compareValues(aVal, bVal);
380
+ if (cmp !== 0) {
381
+ const dir = direction === "desc" || direction === -1 ? -1 : 1;
382
+ return cmp * dir;
383
+ }
384
+ }
385
+ return 0;
386
+ });
387
+ }
388
+ /**
389
+ * 比较两个值
390
+ */
391
+ compareValues(a, b) {
392
+ if (a === b) return 0;
393
+ if (a === null || a === undefined) return -1;
394
+ if (b === null || b === undefined) return 1;
395
+ if (typeof a === "number" && typeof b === "number") {
396
+ return a - b;
397
+ }
398
+ if (typeof a === "string" && typeof b === "string") {
399
+ return a.localeCompare(b);
400
+ }
401
+ if (a instanceof Date && b instanceof Date) {
402
+ return a.getTime() - b.getTime();
403
+ }
404
+ if (typeof a === "boolean" && typeof b === "boolean") {
405
+ return a === b ? 0 : a ? 1 : -1;
406
+ }
407
+ return 0;
408
+ }
409
+ /**
410
+ * 应用投影
411
+ */
412
+ applyProjection(docs) {
413
+ if (!this.fieldsValue || this.fieldsValue.length === 0) {
414
+ return docs;
415
+ }
416
+ return docs.map((doc) => {
417
+ const projected = {};
418
+ for (const field of this.fieldsValue) {
419
+ if (field in doc) {
420
+ projected[field] = doc[field];
421
+ }
422
+ }
423
+ return projected;
424
+ });
425
+ }
426
+ /**
427
+ * 获取当前查询条件
428
+ */
429
+ getFilter() {
430
+ return { ...this.filter };
431
+ }
432
+ /**
433
+ * 获取当前排序条件
434
+ */
435
+ getSort() {
436
+ return { ...this.sortCondition };
437
+ }
438
+ /**
439
+ * 获取当前跳过值
440
+ */
441
+ getSkip() {
442
+ return this.skipValue;
443
+ }
444
+ /**
445
+ * 获取当前限制值
446
+ */
447
+ getLimit() {
448
+ return this.limitValue;
449
+ }
450
+ /**
451
+ * 重置查询构建器
452
+ */
453
+ reset() {
454
+ this.filter = {};
455
+ this.sortCondition = {};
456
+ this.skipValue = 0;
457
+ this.limitValue = 0;
458
+ this.fieldsValue = null;
459
+ return this;
460
+ }
461
+ /**
462
+ * 克隆查询构建器
463
+ */
464
+ clone() {
465
+ const cloned = new QueryBuilder(this.executor);
466
+ cloned.filter = { ...this.filter };
467
+ cloned.sortCondition = { ...this.sortCondition };
468
+ cloned.skipValue = this.skipValue;
469
+ cloned.limitValue = this.limitValue;
470
+ cloned.fieldsValue = this.fieldsValue ? [...this.fieldsValue] : null;
471
+ return cloned;
472
+ }
473
+ }
474
+ exports.QueryBuilder = QueryBuilder;
475
+ //# sourceMappingURL=QueryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/collection/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * LightDB 查询条件解析器
3
+ * 解析查询条件并判断文档是否匹配
4
+ */
5
+ import type { QueryFilter, PrimaryKeyType } from "./types";
6
+ /**
7
+ * 查询解析结果
8
+ */
9
+ export interface QueryParseResult {
10
+ /** 是否可以使用索引 */
11
+ canUseIndex: boolean;
12
+ /** 可以使用的索引字段 */
13
+ indexField?: string;
14
+ /** 索引查询值 */
15
+ indexValue?: PrimaryKeyType | PrimaryKeyType[];
16
+ /** 是否是精确匹配 */
17
+ isExactMatch: boolean;
18
+ }
19
+ /**
20
+ * 查询条件解析器
21
+ * 提供查询条件的解析和匹配功能
22
+ */
23
+ export declare class QueryParser {
24
+ /**
25
+ * 检查文档是否匹配查询条件
26
+ * @param doc 文档
27
+ * @param filter 查询条件
28
+ */
29
+ static matches<T>(doc: T, filter: QueryFilter<T>): boolean;
30
+ /**
31
+ * 匹配逻辑操作符
32
+ */
33
+ private static matchesLogicalOperators;
34
+ /**
35
+ * 匹配单个字段
36
+ */
37
+ private static matchesField;
38
+ /**
39
+ * 检查是否是比较操作符
40
+ */
41
+ private static isComparisonOperators;
42
+ /**
43
+ * 检查是否是数组操作符
44
+ */
45
+ private static isArrayOperators;
46
+ /**
47
+ * 检查是否是存在性操作符
48
+ */
49
+ private static isExistenceOperators;
50
+ /**
51
+ * 检查是否是正则表达式操作符
52
+ */
53
+ private static isRegexOperators;
54
+ /**
55
+ * 匹配比较操作符
56
+ */
57
+ private static matchesComparisonOperators;
58
+ /**
59
+ * 匹配数组操作符
60
+ */
61
+ private static matchesArrayOperators;
62
+ /**
63
+ * 匹配存在性操作符
64
+ */
65
+ private static matchesExistenceOperators;
66
+ /**
67
+ * 匹配正则表达式操作符
68
+ */
69
+ private static matchesRegexOperators;
70
+ /**
71
+ * 获取嵌套值
72
+ */
73
+ private static getNestedValue;
74
+ /**
75
+ * 判断两个值是否相等
76
+ */
77
+ private static isEqual;
78
+ /**
79
+ * 判断是否大于
80
+ */
81
+ private static isGreaterThan;
82
+ /**
83
+ * 判断是否大于等于
84
+ */
85
+ private static isGreaterThanOrEqual;
86
+ /**
87
+ * 判断是否小于
88
+ */
89
+ private static isLessThan;
90
+ /**
91
+ * 判断是否小于等于
92
+ */
93
+ private static isLessThanOrEqual;
94
+ /**
95
+ * 分析查询条件,判断是否可以使用索引
96
+ * @param filter 查询条件
97
+ * @param indexFields 可用的索引字段列表
98
+ */
99
+ static analyzeQuery<T>(filter: QueryFilter<T>, indexFields: string[]): QueryParseResult;
100
+ /**
101
+ * 检查是否是精确值
102
+ */
103
+ private static isExactValue;
104
+ /**
105
+ * 检查是否是 $in 操作符
106
+ */
107
+ private static isInOperator;
108
+ /**
109
+ * 检查是否有比较操作符
110
+ */
111
+ private static hasComparisonOperators;
112
+ /**
113
+ * 提取查询条件中的字段列表
114
+ */
115
+ static extractFields<T>(filter: QueryFilter<T>): string[];
116
+ }
117
+ //# sourceMappingURL=QueryParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryParser.d.ts","sourceRoot":"","sources":["../../src/collection/QueryParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,WAAW,EAMX,cAAc,EACjB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,eAAe;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,UAAU,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAC/C,cAAc;IACd,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,WAAW;IACpB;;;;OAIG;WACW,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO;IAyBjE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAyCtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA0B3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IASpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAwCzC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgBpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAcxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmBpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAuB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAkCtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAgB5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgBnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAgBzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC;;;;OAIG;WACW,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,gBAAgB;IA0D9F;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAc3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAQrC;;OAEG;WACW,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;CAwBnE"}