@objectql/core 4.0.1 → 4.0.3
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/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +32 -0
- package/README.md +14 -12
- package/dist/app.d.ts +9 -6
- package/dist/app.js +151 -29
- package/dist/app.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/dist/optimizations/CompiledHookManager.d.ts +55 -0
- package/dist/optimizations/CompiledHookManager.js +164 -0
- package/dist/optimizations/CompiledHookManager.js.map +1 -0
- package/dist/optimizations/DependencyGraph.d.ts +82 -0
- package/dist/optimizations/DependencyGraph.js +211 -0
- package/dist/optimizations/DependencyGraph.js.map +1 -0
- package/dist/optimizations/GlobalConnectionPool.d.ts +89 -0
- package/dist/optimizations/GlobalConnectionPool.js +193 -0
- package/dist/optimizations/GlobalConnectionPool.js.map +1 -0
- package/dist/optimizations/LazyMetadataLoader.d.ts +75 -0
- package/dist/optimizations/LazyMetadataLoader.js +149 -0
- package/dist/optimizations/LazyMetadataLoader.js.map +1 -0
- package/dist/optimizations/OptimizedMetadataRegistry.d.ts +26 -0
- package/dist/optimizations/OptimizedMetadataRegistry.js +117 -0
- package/dist/optimizations/OptimizedMetadataRegistry.js.map +1 -0
- package/dist/optimizations/OptimizedValidationEngine.d.ts +73 -0
- package/dist/optimizations/OptimizedValidationEngine.js +141 -0
- package/dist/optimizations/OptimizedValidationEngine.js.map +1 -0
- package/dist/optimizations/QueryCompiler.d.ts +51 -0
- package/dist/optimizations/QueryCompiler.js +216 -0
- package/dist/optimizations/QueryCompiler.js.map +1 -0
- package/dist/optimizations/SQLQueryOptimizer.d.ts +96 -0
- package/dist/optimizations/SQLQueryOptimizer.js +265 -0
- package/dist/optimizations/SQLQueryOptimizer.js.map +1 -0
- package/dist/optimizations/index.d.ts +32 -0
- package/dist/optimizations/index.js +44 -0
- package/dist/optimizations/index.js.map +1 -0
- package/dist/plugin.d.ts +6 -7
- package/dist/plugin.js +39 -22
- package/dist/plugin.js.map +1 -1
- package/dist/query/filter-translator.d.ts +6 -18
- package/dist/query/filter-translator.js +6 -103
- package/dist/query/filter-translator.js.map +1 -1
- package/dist/query/query-analyzer.js +24 -25
- package/dist/query/query-analyzer.js.map +1 -1
- package/dist/query/query-builder.d.ts +9 -3
- package/dist/query/query-builder.js +25 -35
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-service.d.ts +2 -2
- package/dist/query/query-service.js +5 -5
- package/dist/query/query-service.js.map +1 -1
- package/dist/repository.d.ts +2 -0
- package/dist/repository.js +24 -17
- package/dist/repository.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +8 -5
- package/src/app.ts +173 -47
- package/src/index.ts +7 -8
- package/src/optimizations/CompiledHookManager.ts +185 -0
- package/src/optimizations/DependencyGraph.ts +255 -0
- package/src/optimizations/GlobalConnectionPool.ts +251 -0
- package/src/optimizations/LazyMetadataLoader.ts +180 -0
- package/src/optimizations/OptimizedMetadataRegistry.ts +132 -0
- package/src/optimizations/OptimizedValidationEngine.ts +172 -0
- package/src/optimizations/QueryCompiler.ts +242 -0
- package/src/optimizations/SQLQueryOptimizer.ts +329 -0
- package/src/optimizations/index.ts +34 -0
- package/src/plugin.ts +51 -28
- package/src/query/filter-translator.ts +8 -115
- package/src/query/query-analyzer.ts +25 -29
- package/src/query/query-builder.ts +26 -43
- package/src/query/query-service.ts +6 -6
- package/src/repository.ts +35 -22
- package/test/__mocks__/@objectstack/runtime.ts +8 -8
- package/test/app.test.ts +11 -8
- package/test/optimizations.test.ts +440 -0
- package/test/plugin-integration.test.ts +30 -19
- package/tsconfig.json +4 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/ai-agent.d.ts +0 -176
- package/dist/ai-agent.js +0 -722
- package/dist/ai-agent.js.map +0 -1
- package/dist/formula-engine.d.ts +0 -102
- package/dist/formula-engine.js +0 -433
- package/dist/formula-engine.js.map +0 -1
- package/dist/formula-plugin.d.ts +0 -52
- package/dist/formula-plugin.js +0 -107
- package/dist/formula-plugin.js.map +0 -1
- package/dist/validator-plugin.d.ts +0 -56
- package/dist/validator-plugin.js +0 -106
- package/dist/validator-plugin.js.map +0 -1
- package/dist/validator.d.ts +0 -80
- package/dist/validator.js +0 -625
- package/dist/validator.js.map +0 -1
- package/src/ai-agent.ts +0 -868
- package/src/formula-engine.ts +0 -572
- package/src/formula-plugin.ts +0 -141
- package/src/validator-plugin.ts +0 -140
- package/src/validator.ts +0 -743
- package/test/formula-engine.test.ts +0 -725
- package/test/formula-integration.test.ts +0 -286
- package/test/formula-plugin.test.ts +0 -197
- package/test/validator-plugin.test.ts +0 -126
- package/test/validator.test.ts +0 -440
|
@@ -8,127 +8,30 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.FilterTranslator = void 0;
|
|
11
|
-
const types_1 = require("@objectql/types");
|
|
12
11
|
/**
|
|
13
12
|
* Filter Translator
|
|
14
13
|
*
|
|
15
|
-
* Translates ObjectQL Filter
|
|
16
|
-
*
|
|
14
|
+
* Translates ObjectQL Filter to ObjectStack FilterCondition format.
|
|
15
|
+
* Since both now use the same format, this is mostly a pass-through.
|
|
17
16
|
*
|
|
18
17
|
* @example
|
|
19
18
|
* Input: { age: { $gte: 18 }, $or: [{ status: "active" }, { role: "admin" }] }
|
|
20
|
-
* Output:
|
|
19
|
+
* Output: { age: { $gte: 18 }, $or: [{ status: "active" }, { role: "admin" }] }
|
|
21
20
|
*/
|
|
22
21
|
class FilterTranslator {
|
|
23
22
|
/**
|
|
24
|
-
* Translate filters from ObjectQL format to ObjectStack
|
|
23
|
+
* Translate filters from ObjectQL format to ObjectStack FilterCondition format
|
|
25
24
|
*/
|
|
26
25
|
translate(filters) {
|
|
27
26
|
if (!filters) {
|
|
28
27
|
return undefined;
|
|
29
28
|
}
|
|
30
|
-
// Backward compatibility: if it's already an array (old format), pass through
|
|
31
|
-
if (Array.isArray(filters)) {
|
|
32
|
-
return filters;
|
|
33
|
-
}
|
|
34
29
|
// If it's an empty object, return undefined
|
|
35
30
|
if (typeof filters === 'object' && Object.keys(filters).length === 0) {
|
|
36
31
|
return undefined;
|
|
37
32
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Recursively converts FilterCondition to FilterNode array format
|
|
42
|
-
*/
|
|
43
|
-
convertToNode(filter) {
|
|
44
|
-
const nodes = [];
|
|
45
|
-
// Process logical operators first
|
|
46
|
-
if (filter.$and) {
|
|
47
|
-
const andNodes = filter.$and.map((f) => this.convertToNode(f));
|
|
48
|
-
nodes.push(...this.interleaveWithOperator(andNodes, 'and'));
|
|
49
|
-
}
|
|
50
|
-
if (filter.$or) {
|
|
51
|
-
const orNodes = filter.$or.map((f) => this.convertToNode(f));
|
|
52
|
-
if (nodes.length > 0) {
|
|
53
|
-
nodes.push('and');
|
|
54
|
-
}
|
|
55
|
-
nodes.push(...this.interleaveWithOperator(orNodes, 'or'));
|
|
56
|
-
}
|
|
57
|
-
// Note: $not operator is not currently supported in the legacy FilterNode format
|
|
58
|
-
if (filter.$not) {
|
|
59
|
-
throw new types_1.ObjectQLError({
|
|
60
|
-
code: 'UNSUPPORTED_OPERATOR',
|
|
61
|
-
message: '$not operator is not supported. Use $ne for field negation instead.'
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
// Process field conditions
|
|
65
|
-
for (const [field, value] of Object.entries(filter)) {
|
|
66
|
-
if (field.startsWith('$')) {
|
|
67
|
-
continue; // Skip logical operators (already processed)
|
|
68
|
-
}
|
|
69
|
-
if (nodes.length > 0) {
|
|
70
|
-
nodes.push('and');
|
|
71
|
-
}
|
|
72
|
-
// Handle field value
|
|
73
|
-
if (value === null || value === undefined) {
|
|
74
|
-
nodes.push([field, '=', value]);
|
|
75
|
-
}
|
|
76
|
-
else if (typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
|
|
77
|
-
// Explicit operators - multiple operators on same field are AND-ed together
|
|
78
|
-
const entries = Object.entries(value);
|
|
79
|
-
for (let i = 0; i < entries.length; i++) {
|
|
80
|
-
const [op, opValue] = entries[i];
|
|
81
|
-
// Add 'and' before each operator (except the very first node)
|
|
82
|
-
if (nodes.length > 0 || i > 0) {
|
|
83
|
-
nodes.push('and');
|
|
84
|
-
}
|
|
85
|
-
const legacyOp = this.mapOperatorToLegacy(op);
|
|
86
|
-
nodes.push([field, legacyOp, opValue]);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
// Implicit equality
|
|
91
|
-
nodes.push([field, '=', value]);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Return as FilterNode (type assertion for backward compatibility)
|
|
95
|
-
return (nodes.length === 1 ? nodes[0] : nodes);
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Interleaves filter nodes with a logical operator
|
|
99
|
-
*/
|
|
100
|
-
interleaveWithOperator(nodes, operator) {
|
|
101
|
-
if (nodes.length === 0)
|
|
102
|
-
return [];
|
|
103
|
-
if (nodes.length === 1)
|
|
104
|
-
return [nodes[0]];
|
|
105
|
-
const result = [nodes[0]];
|
|
106
|
-
for (let i = 1; i < nodes.length; i++) {
|
|
107
|
-
result.push(operator, nodes[i]);
|
|
108
|
-
}
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Maps modern $-prefixed operators to legacy format
|
|
113
|
-
*/
|
|
114
|
-
mapOperatorToLegacy(operator) {
|
|
115
|
-
const mapping = {
|
|
116
|
-
'$eq': '=',
|
|
117
|
-
'$ne': '!=',
|
|
118
|
-
'$gt': '>',
|
|
119
|
-
'$gte': '>=',
|
|
120
|
-
'$lt': '<',
|
|
121
|
-
'$lte': '<=',
|
|
122
|
-
'$in': 'in',
|
|
123
|
-
'$nin': 'nin',
|
|
124
|
-
'$contains': 'contains',
|
|
125
|
-
'$startsWith': 'startswith',
|
|
126
|
-
'$endsWith': 'endswith',
|
|
127
|
-
'$null': 'is_null',
|
|
128
|
-
'$exist': 'is_not_null',
|
|
129
|
-
'$between': 'between',
|
|
130
|
-
};
|
|
131
|
-
return mapping[operator] || operator.replace('$', '');
|
|
33
|
+
// Both ObjectQL Filter and ObjectStack FilterCondition use the same format now
|
|
34
|
+
return filters;
|
|
132
35
|
}
|
|
133
36
|
}
|
|
134
37
|
exports.FilterTranslator = FilterTranslator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-translator.js","sourceRoot":"","sources":["../../src/query/filter-translator.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"filter-translator.js","sourceRoot":"","sources":["../../src/query/filter-translator.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAOH;;;;;;;;;GASG;AACH,MAAa,gBAAgB;IACzB;;OAEG;IACH,SAAS,CAAC,OAAgB;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,+EAA+E;QAC/E,OAAO,OAAqC,CAAC;IACjD,CAAC;CACJ;AAjBD,4CAiBC"}
|
|
@@ -45,10 +45,10 @@ class QueryAnalyzer {
|
|
|
45
45
|
// Build the QueryAST (without executing)
|
|
46
46
|
const ast = {
|
|
47
47
|
object: objectName,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
where: query.where, // FilterCondition format
|
|
49
|
+
orderBy: query.orderBy, // Will be converted to SortNode[] format
|
|
50
|
+
limit: query.limit,
|
|
51
|
+
offset: query.offset,
|
|
52
52
|
fields: query.fields
|
|
53
53
|
};
|
|
54
54
|
// Analyze filters for index usage
|
|
@@ -144,7 +144,7 @@ class QueryAnalyzer {
|
|
|
144
144
|
*/
|
|
145
145
|
findApplicableIndexes(schema, query) {
|
|
146
146
|
const indexes = [];
|
|
147
|
-
if (!schema.indexes || !query.
|
|
147
|
+
if (!schema.indexes || !query.where) {
|
|
148
148
|
return indexes;
|
|
149
149
|
}
|
|
150
150
|
// Extract fields used in filters
|
|
@@ -170,7 +170,7 @@ class QueryAnalyzer {
|
|
|
170
170
|
filterFields.add(key);
|
|
171
171
|
}
|
|
172
172
|
};
|
|
173
|
-
extractFieldsFromFilter(query.
|
|
173
|
+
extractFieldsFromFilter(query.where);
|
|
174
174
|
// Check which indexes could be used
|
|
175
175
|
const indexesArray = Array.isArray(schema.indexes) ? schema.indexes : Object.values(schema.indexes || {});
|
|
176
176
|
for (const index of indexesArray) {
|
|
@@ -192,7 +192,7 @@ class QueryAnalyzer {
|
|
|
192
192
|
analyzeWarnings(schema, query) {
|
|
193
193
|
const warnings = [];
|
|
194
194
|
// Warning: No filters (full table scan)
|
|
195
|
-
if (!query.
|
|
195
|
+
if (!query.where || Object.keys(query.where).length === 0) {
|
|
196
196
|
warnings.push('No filters specified - this will scan all records');
|
|
197
197
|
}
|
|
198
198
|
// Warning: No limit on potentially large dataset
|
|
@@ -207,7 +207,7 @@ class QueryAnalyzer {
|
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
// Warning: Complex filters without indexes
|
|
210
|
-
if (query.
|
|
210
|
+
if (query.where && Object.keys(query.where).length > 5) {
|
|
211
211
|
const indexes = this.findApplicableIndexes(schema, query);
|
|
212
212
|
if (indexes.length === 0) {
|
|
213
213
|
warnings.push('Complex filters without matching indexes - consider adding indexes');
|
|
@@ -226,10 +226,8 @@ class QueryAnalyzer {
|
|
|
226
226
|
suggestions.push('Add a limit clause to restrict result set size');
|
|
227
227
|
}
|
|
228
228
|
// Suggest adding indexes
|
|
229
|
-
if (query.
|
|
230
|
-
const filterFields = query.
|
|
231
|
-
.filter((f) => Array.isArray(f) && f.length >= 1)
|
|
232
|
-
.map((f) => String(f[0]));
|
|
229
|
+
if (query.where && Object.keys(query.where).length > 0 && indexes.length === 0) {
|
|
230
|
+
const filterFields = Object.keys(query.where).filter(k => !k.startsWith('$'));
|
|
233
231
|
if (filterFields.length > 0) {
|
|
234
232
|
suggestions.push(`Consider adding an index on: ${filterFields.join(', ')}`);
|
|
235
233
|
}
|
|
@@ -239,10 +237,9 @@ class QueryAnalyzer {
|
|
|
239
237
|
suggestions.push('Select only required fields to reduce data transfer');
|
|
240
238
|
}
|
|
241
239
|
// Suggest composite index for multiple filters
|
|
242
|
-
if (query.
|
|
243
|
-
const filterFields = query.
|
|
244
|
-
.filter(
|
|
245
|
-
.map((f) => String(f[0]))
|
|
240
|
+
if (query.where && Object.keys(query.where).length > 1 && indexes.length < 2) {
|
|
241
|
+
const filterFields = Object.keys(query.where)
|
|
242
|
+
.filter(k => !k.startsWith('$'))
|
|
246
243
|
.slice(0, 3); // Top 3 fields
|
|
247
244
|
if (filterFields.length > 1) {
|
|
248
245
|
suggestions.push(`Consider a composite index on: (${filterFields.join(', ')})`);
|
|
@@ -259,17 +256,18 @@ class QueryAnalyzer {
|
|
|
259
256
|
// Base complexity
|
|
260
257
|
complexity += 10;
|
|
261
258
|
// Filters add complexity
|
|
262
|
-
if (query.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
259
|
+
if (query.where) {
|
|
260
|
+
const filterCount = Object.keys(query.where).length;
|
|
261
|
+
complexity += filterCount * 5;
|
|
262
|
+
// Nested filters (OR/AND conditions) add more
|
|
263
|
+
const hasLogicalOps = query.where.$and || query.where.$or;
|
|
264
|
+
if (hasLogicalOps) {
|
|
267
265
|
complexity += 15;
|
|
268
266
|
}
|
|
269
267
|
}
|
|
270
268
|
// Sorting adds complexity
|
|
271
|
-
if (query.
|
|
272
|
-
complexity += query.
|
|
269
|
+
if (query.orderBy && query.orderBy.length > 0) {
|
|
270
|
+
complexity += query.orderBy.length * 3;
|
|
273
271
|
}
|
|
274
272
|
// Field selection reduces complexity slightly
|
|
275
273
|
if (query.fields && query.fields.length > 0 && query.fields.length < 10) {
|
|
@@ -290,12 +288,13 @@ class QueryAnalyzer {
|
|
|
290
288
|
// This is a placeholder - real implementation would need statistics
|
|
291
289
|
// from the database (row count, index selectivity, etc.)
|
|
292
290
|
// Default to unknown
|
|
293
|
-
if (!query.
|
|
291
|
+
if (!query.where || Object.keys(query.where).length === 0) {
|
|
294
292
|
return -1; // Unknown, full scan
|
|
295
293
|
}
|
|
296
294
|
// Very rough estimate based on filter count
|
|
297
295
|
const baseEstimate = 1000;
|
|
298
|
-
const
|
|
296
|
+
const filterCount = Object.keys(query.where).length;
|
|
297
|
+
const filterReduction = Math.pow(0.5, filterCount);
|
|
299
298
|
const estimated = Math.floor(baseEstimate * filterReduction);
|
|
300
299
|
// Apply limit if present
|
|
301
300
|
if (query.limit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-analyzer.js","sourceRoot":"","sources":["../../src/query/query-analyzer.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"query-analyzer.js","sourceRoot":"","sources":["../../src/query/query-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,18 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { UnifiedQuery } from '@objectql/types';
|
|
9
9
|
import { Data } from '@objectstack/spec';
|
|
10
|
-
|
|
10
|
+
interface QueryAST extends Data.QueryAST {
|
|
11
|
+
top?: number;
|
|
12
|
+
expand?: Record<string, any>;
|
|
13
|
+
aggregations?: any[];
|
|
14
|
+
having?: any;
|
|
15
|
+
}
|
|
11
16
|
/**
|
|
12
17
|
* Query Builder
|
|
13
18
|
*
|
|
14
19
|
* Builds ObjectStack QueryAST from ObjectQL UnifiedQuery.
|
|
15
|
-
*
|
|
20
|
+
* Since UnifiedQuery now uses the standard protocol format directly,
|
|
21
|
+
* this is now a simple pass-through with object name injection.
|
|
16
22
|
*/
|
|
17
23
|
export declare class QueryBuilder {
|
|
18
24
|
private filterTranslator;
|
|
@@ -21,7 +27,7 @@ export declare class QueryBuilder {
|
|
|
21
27
|
* Build a QueryAST from a UnifiedQuery
|
|
22
28
|
*
|
|
23
29
|
* @param objectName - Target object name
|
|
24
|
-
* @param query - ObjectQL UnifiedQuery
|
|
30
|
+
* @param query - ObjectQL UnifiedQuery (now in standard QueryAST format)
|
|
25
31
|
* @returns ObjectStack QueryAST
|
|
26
32
|
*/
|
|
27
33
|
build(objectName: string, query: UnifiedQuery): QueryAST;
|
|
@@ -13,7 +13,8 @@ const filter_translator_1 = require("./filter-translator");
|
|
|
13
13
|
* Query Builder
|
|
14
14
|
*
|
|
15
15
|
* Builds ObjectStack QueryAST from ObjectQL UnifiedQuery.
|
|
16
|
-
*
|
|
16
|
+
* Since UnifiedQuery now uses the standard protocol format directly,
|
|
17
|
+
* this is now a simple pass-through with object name injection.
|
|
17
18
|
*/
|
|
18
19
|
class QueryBuilder {
|
|
19
20
|
constructor() {
|
|
@@ -23,47 +24,36 @@ class QueryBuilder {
|
|
|
23
24
|
* Build a QueryAST from a UnifiedQuery
|
|
24
25
|
*
|
|
25
26
|
* @param objectName - Target object name
|
|
26
|
-
* @param query - ObjectQL UnifiedQuery
|
|
27
|
+
* @param query - ObjectQL UnifiedQuery (now in standard QueryAST format)
|
|
27
28
|
* @returns ObjectStack QueryAST
|
|
28
29
|
*/
|
|
29
30
|
build(objectName, query) {
|
|
31
|
+
// UnifiedQuery now uses the same format as QueryAST
|
|
32
|
+
// Just add the object name and pass through
|
|
30
33
|
const ast = {
|
|
31
|
-
object: objectName
|
|
34
|
+
object: objectName
|
|
32
35
|
};
|
|
33
|
-
// Map
|
|
34
|
-
if (query.fields)
|
|
36
|
+
// Map UnifiedQuery properties to QueryAST
|
|
37
|
+
if (query.fields)
|
|
35
38
|
ast.fields = query.fields;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (query.
|
|
39
|
-
ast.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (query.
|
|
43
|
-
ast.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
// Map pagination
|
|
49
|
-
if (query.limit !== undefined) {
|
|
50
|
-
ast.top = query.limit;
|
|
51
|
-
}
|
|
52
|
-
if (query.skip !== undefined) {
|
|
53
|
-
ast.skip = query.skip;
|
|
54
|
-
}
|
|
55
|
-
// Map groupBy
|
|
56
|
-
if (query.groupBy) {
|
|
39
|
+
if (query.where)
|
|
40
|
+
ast.where = this.filterTranslator.translate(query.where);
|
|
41
|
+
if (query.orderBy)
|
|
42
|
+
ast.orderBy = query.orderBy;
|
|
43
|
+
if (query.offset !== undefined)
|
|
44
|
+
ast.offset = query.offset;
|
|
45
|
+
if (query.limit !== undefined)
|
|
46
|
+
ast.top = query.limit; // UnifiedQuery uses 'limit', QueryAST uses 'top'
|
|
47
|
+
if (query.expand)
|
|
48
|
+
ast.expand = query.expand;
|
|
49
|
+
if (query.groupBy)
|
|
57
50
|
ast.groupBy = query.groupBy;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (query.
|
|
61
|
-
ast.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
alias: agg.alias || `${agg.func}_${agg.field}`
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
51
|
+
if (query.aggregations)
|
|
52
|
+
ast.aggregations = query.aggregations;
|
|
53
|
+
if (query.having)
|
|
54
|
+
ast.having = query.having;
|
|
55
|
+
if (query.distinct)
|
|
56
|
+
ast.distinct = query.distinct;
|
|
67
57
|
return ast;
|
|
68
58
|
}
|
|
69
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAaH,2DAAuD;AAEvD;;;;;;GAMG;AACH,MAAa,YAAY;IAGrB;QACI,IAAI,CAAC,gBAAgB,GAAG,IAAI,oCAAgB,EAAE,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAkB,EAAE,KAAmB;QACzC,oDAAoD;QACpD,4CAA4C;QAC5C,MAAM,GAAG,GAAa;YAClB,MAAM,EAAE,UAAU;SACrB,CAAC;QAEF,0CAA0C;QAC1C,IAAI,KAAK,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5C,IAAI,KAAK,CAAC,KAAK;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,iDAAiD;QACvG,IAAI,KAAK,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,KAAK,CAAC,YAAY;YAAE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAElD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAnCD,oCAmCC"}
|
|
@@ -121,11 +121,11 @@ export declare class QueryService {
|
|
|
121
121
|
* Execute a count query
|
|
122
122
|
*
|
|
123
123
|
* @param objectName - The object to query
|
|
124
|
-
* @param
|
|
124
|
+
* @param where - Optional filter condition
|
|
125
125
|
* @param options - Query execution options
|
|
126
126
|
* @returns Count of matching records
|
|
127
127
|
*/
|
|
128
|
-
count(objectName: string,
|
|
128
|
+
count(objectName: string, where?: Filter, options?: QueryOptions): Promise<QueryResult<number>>;
|
|
129
129
|
/**
|
|
130
130
|
* Execute an aggregate query
|
|
131
131
|
*
|
|
@@ -132,7 +132,7 @@ class QueryService {
|
|
|
132
132
|
else if (driver.executeQuery) {
|
|
133
133
|
// Fallback to query with ID filter
|
|
134
134
|
const query = {
|
|
135
|
-
|
|
135
|
+
where: { _id: id }
|
|
136
136
|
};
|
|
137
137
|
const ast = this.buildQueryAST(objectName, query);
|
|
138
138
|
const queryResult = await driver.executeQuery(ast, driverOptions);
|
|
@@ -154,15 +154,15 @@ class QueryService {
|
|
|
154
154
|
* Execute a count query
|
|
155
155
|
*
|
|
156
156
|
* @param objectName - The object to query
|
|
157
|
-
* @param
|
|
157
|
+
* @param where - Optional filter condition
|
|
158
158
|
* @param options - Query execution options
|
|
159
159
|
* @returns Count of matching records
|
|
160
160
|
*/
|
|
161
|
-
async count(objectName,
|
|
161
|
+
async count(objectName, where, options = {}) {
|
|
162
162
|
var _a, _b, _c;
|
|
163
163
|
const driver = this.getDriver(objectName);
|
|
164
164
|
const startTime = options.profile ? Date.now() : 0;
|
|
165
|
-
const query =
|
|
165
|
+
const query = where ? { where } : {};
|
|
166
166
|
const ast = this.buildQueryAST(objectName, query);
|
|
167
167
|
const driverOptions = {
|
|
168
168
|
transaction: options.transaction,
|
|
@@ -171,7 +171,7 @@ class QueryService {
|
|
|
171
171
|
let count;
|
|
172
172
|
if (driver.count) {
|
|
173
173
|
// Legacy driver interface
|
|
174
|
-
count = await driver.count(objectName,
|
|
174
|
+
count = await driver.count(objectName, where || {}, driverOptions);
|
|
175
175
|
}
|
|
176
176
|
else if (driver.executeQuery) {
|
|
177
177
|
// Use executeQuery and count results
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-service.js","sourceRoot":"","sources":["../../src/query/query-service.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAWH,mDAA+C;AAwE/C;;;;;;;;;;;GAWG;AACH,MAAa,YAAY;IAGrB,YACY,WAAmC,EACnC,QAA0B;QAD1B,gBAAW,GAAX,WAAW,CAAwB;QACnC,aAAQ,GAAR,QAAQ,CAAkB;QAElC,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,UAAkB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,eAAe,cAAc,2BAA2B,UAAU,GAAG,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,UAAkB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"query-service.js","sourceRoot":"","sources":["../../src/query/query-service.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class ObjectRepository {
|
|
|
11
11
|
private context;
|
|
12
12
|
private app;
|
|
13
13
|
private queryBuilder;
|
|
14
|
+
private static queryCompiler;
|
|
14
15
|
constructor(objectName: string, context: ObjectQLContext, app: IObjectQL);
|
|
15
16
|
/**
|
|
16
17
|
* Get validator instance from kernel (via plugin)
|
|
@@ -27,6 +28,7 @@ export declare class ObjectRepository {
|
|
|
27
28
|
private getOptions;
|
|
28
29
|
/**
|
|
29
30
|
* Translates ObjectQL UnifiedQuery to ObjectStack QueryAST format
|
|
31
|
+
* Uses query compiler for caching and optimization
|
|
30
32
|
*/
|
|
31
33
|
private buildQueryAST;
|
|
32
34
|
getSchema(): ObjectConfig;
|