linkgress-orm 0.1.0 → 0.1.2
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/LICENSE +21 -21
- package/README.md +196 -196
- package/dist/entity/db-context.d.ts.map +1 -1
- package/dist/entity/db-context.js +7 -5
- package/dist/entity/db-context.js.map +1 -1
- package/dist/migration/db-schema-manager.d.ts +5 -0
- package/dist/migration/db-schema-manager.d.ts.map +1 -1
- package/dist/migration/db-schema-manager.js +147 -79
- package/dist/migration/db-schema-manager.js.map +1 -1
- package/dist/migration/enum-migrator.js +6 -6
- package/dist/query/collection-strategy.interface.d.ts +38 -0
- package/dist/query/collection-strategy.interface.d.ts.map +1 -1
- package/dist/query/cte-builder.d.ts +18 -1
- package/dist/query/cte-builder.d.ts.map +1 -1
- package/dist/query/cte-builder.js +102 -11
- package/dist/query/cte-builder.js.map +1 -1
- package/dist/query/grouped-query.d.ts +24 -1
- package/dist/query/grouped-query.d.ts.map +1 -1
- package/dist/query/grouped-query.js +260 -71
- package/dist/query/grouped-query.js.map +1 -1
- package/dist/query/join-builder.d.ts.map +1 -1
- package/dist/query/join-builder.js +10 -14
- package/dist/query/join-builder.js.map +1 -1
- package/dist/query/query-builder.d.ts +65 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +566 -167
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/strategies/cte-collection-strategy.d.ts +4 -0
- package/dist/query/strategies/cte-collection-strategy.d.ts.map +1 -1
- package/dist/query/strategies/cte-collection-strategy.js +169 -78
- package/dist/query/strategies/cte-collection-strategy.js.map +1 -1
- package/dist/query/strategies/lateral-collection-strategy.d.ts +4 -0
- package/dist/query/strategies/lateral-collection-strategy.d.ts.map +1 -1
- package/dist/query/strategies/lateral-collection-strategy.js +86 -28
- package/dist/query/strategies/lateral-collection-strategy.js.map +1 -1
- package/dist/query/strategies/temptable-collection-strategy.js +97 -97
- package/dist/schema/table-builder.d.ts +16 -0
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +23 -1
- package/dist/schema/table-builder.js.map +1 -1
- package/package.json +1 -1
|
@@ -112,6 +112,32 @@ class CteCollectionStrategy {
|
|
|
112
112
|
}
|
|
113
113
|
return `jsonb_build_object(${parts.join(', ')})`;
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Build navigation JOINs SQL for multi-level navigation in collection queries
|
|
117
|
+
*/
|
|
118
|
+
buildNavigationJoins(navigationJoins, targetTable) {
|
|
119
|
+
if (!navigationJoins || navigationJoins.length === 0) {
|
|
120
|
+
return '';
|
|
121
|
+
}
|
|
122
|
+
const joinClauses = [];
|
|
123
|
+
for (const join of navigationJoins) {
|
|
124
|
+
const joinType = join.isMandatory ? 'INNER JOIN' : 'LEFT JOIN';
|
|
125
|
+
const qualifiedTable = join.targetSchema
|
|
126
|
+
? `"${join.targetSchema}"."${join.targetTable}"`
|
|
127
|
+
: `"${join.targetTable}"`;
|
|
128
|
+
// Build the ON clause
|
|
129
|
+
// foreignKeys are the columns in the source table
|
|
130
|
+
// matches are the columns in the target table (usually primary keys)
|
|
131
|
+
const onConditions = [];
|
|
132
|
+
for (let i = 0; i < join.foreignKeys.length; i++) {
|
|
133
|
+
const fk = join.foreignKeys[i];
|
|
134
|
+
const pk = join.matches[i] || 'id';
|
|
135
|
+
onConditions.push(`"${join.sourceAlias}"."${fk}" = "${join.alias}"."${pk}"`);
|
|
136
|
+
}
|
|
137
|
+
joinClauses.push(`${joinType} ${qualifiedTable} "${join.alias}" ON ${onConditions.join(' AND ')}`);
|
|
138
|
+
}
|
|
139
|
+
return joinClauses.join('\n ');
|
|
140
|
+
}
|
|
115
141
|
/**
|
|
116
142
|
* Build JSONB aggregation CTE
|
|
117
143
|
*
|
|
@@ -119,7 +145,7 @@ class CteCollectionStrategy {
|
|
|
119
145
|
* apply pagination per parent row (not globally).
|
|
120
146
|
*/
|
|
121
147
|
buildJsonbAggregation(config, cteName, context) {
|
|
122
|
-
const { selectedFields, targetTable, foreignKey, whereClause, orderByClause, limitValue, offsetValue, isDistinct } = config;
|
|
148
|
+
const { selectedFields, targetTable, foreignKey, whereClause, orderByClause, limitValue, offsetValue, isDistinct, navigationJoins } = config;
|
|
123
149
|
// Collect all leaf fields for the SELECT clause
|
|
124
150
|
const leafFields = this.collectLeafFields(selectedFields);
|
|
125
151
|
// Build the JSONB fields for jsonb_build_object (handles nested structures)
|
|
@@ -128,15 +154,28 @@ class CteCollectionStrategy {
|
|
|
128
154
|
const whereSQL = whereClause ? `WHERE ${whereClause}` : '';
|
|
129
155
|
// Build DISTINCT clause
|
|
130
156
|
const distinctClause = isDistinct ? 'DISTINCT ' : '';
|
|
157
|
+
// Build navigation JOINs for multi-level navigation
|
|
158
|
+
const navJoinsSQL = this.buildNavigationJoins(navigationJoins, targetTable);
|
|
131
159
|
// If LIMIT or OFFSET is specified, use ROW_NUMBER() for per-parent pagination
|
|
132
160
|
if (limitValue !== undefined || offsetValue !== undefined) {
|
|
133
|
-
return this.buildJsonbAggregationWithRowNumber(config, leafFields, jsonbObjectExpr, whereSQL, distinctClause);
|
|
161
|
+
return this.buildJsonbAggregationWithRowNumber(config, leafFields, jsonbObjectExpr, whereSQL, distinctClause, navJoinsSQL);
|
|
134
162
|
}
|
|
135
163
|
// No LIMIT/OFFSET - use simple aggregation
|
|
136
164
|
// Build the subquery SELECT fields
|
|
165
|
+
// When there are navigation joins, we need to qualify unqualified field expressions
|
|
166
|
+
// with the target table name to avoid ambiguous column references
|
|
167
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
137
168
|
const allSelectFields = [
|
|
138
|
-
`"${foreignKey}" as "__fk_${foreignKey}"`,
|
|
169
|
+
`"${targetTable}"."${foreignKey}" as "__fk_${foreignKey}"`,
|
|
139
170
|
...leafFields.map(f => {
|
|
171
|
+
// If expression is just a quoted column name (e.g., `"id"`), qualify it with target table
|
|
172
|
+
// But if it's already qualified (e.g., `"user"."username"`), leave it as is
|
|
173
|
+
const isSimpleColumn = /^"[^".]+"$/.test(f.expression);
|
|
174
|
+
if (isSimpleColumn && hasNavigationJoins) {
|
|
175
|
+
// Extract column name and qualify with target table
|
|
176
|
+
const columnName = f.expression.slice(1, -1); // Remove quotes
|
|
177
|
+
return `"${targetTable}"."${columnName}" as "${f.alias}"`;
|
|
178
|
+
}
|
|
140
179
|
if (f.expression !== `"${f.alias}"`) {
|
|
141
180
|
return `${f.expression} as "${f.alias}"`;
|
|
142
181
|
}
|
|
@@ -147,19 +186,20 @@ class CteCollectionStrategy {
|
|
|
147
186
|
const orderBySQL = orderByClause ? `ORDER BY ${orderByClause}` : '';
|
|
148
187
|
// Build the jsonb_agg ORDER BY clause
|
|
149
188
|
const jsonbAggOrderBy = orderByClause ? ` ORDER BY ${orderByClause}` : '';
|
|
150
|
-
const cteSQL = `
|
|
151
|
-
SELECT
|
|
152
|
-
"__fk_${foreignKey}" as parent_id,
|
|
153
|
-
jsonb_agg(
|
|
154
|
-
${jsonbObjectExpr}${jsonbAggOrderBy}
|
|
155
|
-
) as data
|
|
156
|
-
FROM (
|
|
157
|
-
SELECT ${distinctClause}${allSelectFields.join(', ')}
|
|
158
|
-
FROM "${targetTable}"
|
|
159
|
-
${
|
|
160
|
-
${
|
|
161
|
-
|
|
162
|
-
|
|
189
|
+
const cteSQL = `
|
|
190
|
+
SELECT
|
|
191
|
+
"__fk_${foreignKey}" as parent_id,
|
|
192
|
+
jsonb_agg(
|
|
193
|
+
${jsonbObjectExpr}${jsonbAggOrderBy}
|
|
194
|
+
) as data
|
|
195
|
+
FROM (
|
|
196
|
+
SELECT ${distinctClause}${allSelectFields.join(', ')}
|
|
197
|
+
FROM "${targetTable}"
|
|
198
|
+
${navJoinsSQL}
|
|
199
|
+
${whereSQL}
|
|
200
|
+
${orderBySQL}
|
|
201
|
+
) sub
|
|
202
|
+
GROUP BY "__fk_${foreignKey}"
|
|
163
203
|
`.trim();
|
|
164
204
|
return cteSQL;
|
|
165
205
|
}
|
|
@@ -177,12 +217,23 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
177
217
|
* GROUP BY parent_id
|
|
178
218
|
* ```
|
|
179
219
|
*/
|
|
180
|
-
buildJsonbAggregationWithRowNumber(config, leafFields, jsonbObjectExpr, whereSQL, distinctClause) {
|
|
181
|
-
const { targetTable, foreignKey, orderByClause, limitValue, offsetValue } = config;
|
|
220
|
+
buildJsonbAggregationWithRowNumber(config, leafFields, jsonbObjectExpr, whereSQL, distinctClause, navJoinsSQL) {
|
|
221
|
+
const { targetTable, foreignKey, orderByClause, limitValue, offsetValue, navigationJoins } = config;
|
|
222
|
+
// When there are navigation joins, we need to qualify unqualified field expressions
|
|
223
|
+
// with the target table name to avoid ambiguous column references
|
|
224
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
182
225
|
// Build the innermost SELECT fields
|
|
183
226
|
const innerSelectFields = [
|
|
184
|
-
`"${foreignKey}" as "__fk_${foreignKey}"`,
|
|
227
|
+
`"${targetTable}"."${foreignKey}" as "__fk_${foreignKey}"`,
|
|
185
228
|
...leafFields.map(f => {
|
|
229
|
+
// If expression is just a quoted column name (e.g., `"id"`), qualify it with target table
|
|
230
|
+
// But if it's already qualified (e.g., `"user"."username"`), leave it as is
|
|
231
|
+
const isSimpleColumn = /^"[^".]+"$/.test(f.expression);
|
|
232
|
+
if (isSimpleColumn && hasNavigationJoins) {
|
|
233
|
+
// Extract column name and qualify with target table
|
|
234
|
+
const columnName = f.expression.slice(1, -1); // Remove quotes
|
|
235
|
+
return `"${targetTable}"."${columnName}" as "${f.alias}"`;
|
|
236
|
+
}
|
|
186
237
|
if (f.expression !== `"${f.alias}"`) {
|
|
187
238
|
return `${f.expression} as "${f.alias}"`;
|
|
188
239
|
}
|
|
@@ -202,22 +253,23 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
202
253
|
// Only OFFSET (no LIMIT)
|
|
203
254
|
rowNumberFilter = `WHERE "__rn" > ${offset}`;
|
|
204
255
|
}
|
|
205
|
-
const cteSQL = `
|
|
206
|
-
SELECT
|
|
207
|
-
"__fk_${foreignKey}" as parent_id,
|
|
208
|
-
jsonb_agg(
|
|
209
|
-
${jsonbObjectExpr}
|
|
210
|
-
) as data
|
|
211
|
-
FROM (
|
|
212
|
-
SELECT *, ROW_NUMBER() OVER (PARTITION BY "__fk_${foreignKey}" ORDER BY ${rowNumberOrderBy}) as "__rn"
|
|
213
|
-
FROM (
|
|
214
|
-
SELECT ${distinctClause}${innerSelectFields.join(', ')}
|
|
215
|
-
FROM "${targetTable}"
|
|
216
|
-
${
|
|
217
|
-
|
|
218
|
-
)
|
|
219
|
-
|
|
220
|
-
|
|
256
|
+
const cteSQL = `
|
|
257
|
+
SELECT
|
|
258
|
+
"__fk_${foreignKey}" as parent_id,
|
|
259
|
+
jsonb_agg(
|
|
260
|
+
${jsonbObjectExpr}
|
|
261
|
+
) as data
|
|
262
|
+
FROM (
|
|
263
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY "__fk_${foreignKey}" ORDER BY ${rowNumberOrderBy}) as "__rn"
|
|
264
|
+
FROM (
|
|
265
|
+
SELECT ${distinctClause}${innerSelectFields.join(', ')}
|
|
266
|
+
FROM "${targetTable}"
|
|
267
|
+
${navJoinsSQL}
|
|
268
|
+
${whereSQL}
|
|
269
|
+
) inner_sub
|
|
270
|
+
) sub
|
|
271
|
+
${rowNumberFilter}
|
|
272
|
+
GROUP BY "__fk_${foreignKey}"
|
|
221
273
|
`.trim();
|
|
222
274
|
return cteSQL;
|
|
223
275
|
}
|
|
@@ -228,7 +280,7 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
228
280
|
* apply pagination per parent row (not globally).
|
|
229
281
|
*/
|
|
230
282
|
buildArrayAggregation(config, cteName, context) {
|
|
231
|
-
const { arrayField, targetTable, foreignKey, whereClause, orderByClause, limitValue, offsetValue, isDistinct } = config;
|
|
283
|
+
const { arrayField, targetTable, foreignKey, whereClause, orderByClause, limitValue, offsetValue, isDistinct, navigationJoins, selectedFields } = config;
|
|
232
284
|
if (!arrayField) {
|
|
233
285
|
throw new Error('arrayField is required for array aggregation');
|
|
234
286
|
}
|
|
@@ -236,39 +288,77 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
236
288
|
const whereSQL = whereClause ? `WHERE ${whereClause}` : '';
|
|
237
289
|
// Build DISTINCT clause
|
|
238
290
|
const distinctClause = isDistinct ? 'DISTINCT ' : '';
|
|
291
|
+
// Build navigation JOINs for multi-level navigation (like toList does)
|
|
292
|
+
const navJoinsSQL = this.buildNavigationJoins(navigationJoins, targetTable);
|
|
293
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
239
294
|
// If LIMIT or OFFSET is specified, use ROW_NUMBER() for per-parent pagination
|
|
240
295
|
if (limitValue !== undefined || offsetValue !== undefined) {
|
|
241
|
-
return this.buildArrayAggregationWithRowNumber(config, whereSQL, distinctClause);
|
|
296
|
+
return this.buildArrayAggregationWithRowNumber(config, whereSQL, distinctClause, navJoinsSQL);
|
|
297
|
+
}
|
|
298
|
+
// Get the actual field expression from selectedFields (if available)
|
|
299
|
+
// This handles navigation properties like p.user!.id which need to be "user"."id"
|
|
300
|
+
let fieldExpression = `"${arrayField}"`;
|
|
301
|
+
if (selectedFields && selectedFields.length > 0) {
|
|
302
|
+
const firstField = selectedFields[0];
|
|
303
|
+
if (firstField.expression && firstField.expression !== `"${arrayField}"`) {
|
|
304
|
+
// Use the actual expression (e.g., "user"."id") instead of just the alias
|
|
305
|
+
fieldExpression = firstField.expression;
|
|
306
|
+
}
|
|
307
|
+
else if (hasNavigationJoins) {
|
|
308
|
+
// If we have navigation joins but no explicit expression, qualify with target table
|
|
309
|
+
fieldExpression = `"${targetTable}"."${arrayField}"`;
|
|
310
|
+
}
|
|
242
311
|
}
|
|
243
312
|
// No LIMIT/OFFSET - use simple aggregation
|
|
244
313
|
// Build ORDER BY clause
|
|
245
314
|
const orderBySQL = orderByClause ? `ORDER BY ${orderByClause}` : '';
|
|
246
315
|
// Build the array_agg ORDER BY clause
|
|
247
316
|
const arrayAggOrderBy = orderByClause ? ` ORDER BY ${orderByClause}` : '';
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
317
|
+
// Qualify the foreign key with target table when there are navigation joins
|
|
318
|
+
const fkExpression = hasNavigationJoins
|
|
319
|
+
? `"${targetTable}"."${foreignKey}"`
|
|
320
|
+
: `"${foreignKey}"`;
|
|
321
|
+
const cteSQL = `
|
|
322
|
+
SELECT
|
|
323
|
+
"__fk_${foreignKey}" as parent_id,
|
|
324
|
+
array_agg(
|
|
325
|
+
"${arrayField}"${arrayAggOrderBy}
|
|
326
|
+
) as data
|
|
327
|
+
FROM (
|
|
328
|
+
SELECT ${distinctClause}"__fk_${foreignKey}", "${arrayField}"
|
|
329
|
+
FROM (
|
|
330
|
+
SELECT ${fkExpression} as "__fk_${foreignKey}", ${fieldExpression} as "${arrayField}"
|
|
331
|
+
FROM "${targetTable}"
|
|
332
|
+
${navJoinsSQL}
|
|
333
|
+
${whereSQL}
|
|
334
|
+
${orderBySQL}
|
|
335
|
+
) inner_sub
|
|
336
|
+
) sub
|
|
337
|
+
GROUP BY "__fk_${foreignKey}"
|
|
264
338
|
`.trim();
|
|
265
339
|
return cteSQL;
|
|
266
340
|
}
|
|
267
341
|
/**
|
|
268
342
|
* Build array aggregation with ROW_NUMBER() for per-parent LIMIT/OFFSET
|
|
269
343
|
*/
|
|
270
|
-
buildArrayAggregationWithRowNumber(config, whereSQL, distinctClause) {
|
|
271
|
-
const { arrayField, targetTable, foreignKey, orderByClause, limitValue, offsetValue } = config;
|
|
344
|
+
buildArrayAggregationWithRowNumber(config, whereSQL, distinctClause, navJoinsSQL) {
|
|
345
|
+
const { arrayField, targetTable, foreignKey, orderByClause, limitValue, offsetValue, navigationJoins, selectedFields } = config;
|
|
346
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
347
|
+
// Get the actual field expression from selectedFields (if available)
|
|
348
|
+
let fieldExpression = `"${arrayField}"`;
|
|
349
|
+
if (selectedFields && selectedFields.length > 0) {
|
|
350
|
+
const firstField = selectedFields[0];
|
|
351
|
+
if (firstField.expression && firstField.expression !== `"${arrayField}"`) {
|
|
352
|
+
fieldExpression = firstField.expression;
|
|
353
|
+
}
|
|
354
|
+
else if (hasNavigationJoins) {
|
|
355
|
+
fieldExpression = `"${targetTable}"."${arrayField}"`;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// Qualify the foreign key with target table when there are navigation joins
|
|
359
|
+
const fkExpression = hasNavigationJoins
|
|
360
|
+
? `"${targetTable}"."${foreignKey}"`
|
|
361
|
+
: `"${foreignKey}"`;
|
|
272
362
|
// Build ORDER BY for ROW_NUMBER() - use the order clause or default to foreign key
|
|
273
363
|
const rowNumberOrderBy = orderByClause || `"__fk_${foreignKey}"`;
|
|
274
364
|
// Build the row number filter condition
|
|
@@ -280,22 +370,23 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
280
370
|
else {
|
|
281
371
|
rowNumberFilter = `WHERE "__rn" > ${offset}`;
|
|
282
372
|
}
|
|
283
|
-
const cteSQL = `
|
|
284
|
-
SELECT
|
|
285
|
-
"__fk_${foreignKey}" as parent_id,
|
|
286
|
-
array_agg(
|
|
287
|
-
"${arrayField}"
|
|
288
|
-
) as data
|
|
289
|
-
FROM (
|
|
290
|
-
SELECT *, ROW_NUMBER() OVER (PARTITION BY "__fk_${foreignKey}" ORDER BY ${rowNumberOrderBy}) as "__rn"
|
|
291
|
-
FROM (
|
|
292
|
-
SELECT ${distinctClause}
|
|
293
|
-
FROM "${targetTable}"
|
|
294
|
-
${
|
|
295
|
-
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
|
|
373
|
+
const cteSQL = `
|
|
374
|
+
SELECT
|
|
375
|
+
"__fk_${foreignKey}" as parent_id,
|
|
376
|
+
array_agg(
|
|
377
|
+
"${arrayField}"
|
|
378
|
+
) as data
|
|
379
|
+
FROM (
|
|
380
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY "__fk_${foreignKey}" ORDER BY ${rowNumberOrderBy}) as "__rn"
|
|
381
|
+
FROM (
|
|
382
|
+
SELECT ${distinctClause}${fkExpression} as "__fk_${foreignKey}", ${fieldExpression} as "${arrayField}"
|
|
383
|
+
FROM "${targetTable}"
|
|
384
|
+
${navJoinsSQL}
|
|
385
|
+
${whereSQL}
|
|
386
|
+
) inner_sub
|
|
387
|
+
) sub
|
|
388
|
+
${rowNumberFilter}
|
|
389
|
+
GROUP BY "__fk_${foreignKey}"
|
|
299
390
|
`.trim();
|
|
300
391
|
return cteSQL;
|
|
301
392
|
}
|
|
@@ -323,13 +414,13 @@ GROUP BY "__fk_${foreignKey}"
|
|
|
323
414
|
default:
|
|
324
415
|
throw new Error(`Unknown aggregation type: ${aggregationType}`);
|
|
325
416
|
}
|
|
326
|
-
const cteSQL = `
|
|
327
|
-
SELECT
|
|
328
|
-
"${foreignKey}" as parent_id,
|
|
329
|
-
${aggregateExpression} as data
|
|
330
|
-
FROM "${targetTable}"
|
|
331
|
-
${whereSQL}
|
|
332
|
-
GROUP BY "${foreignKey}"
|
|
417
|
+
const cteSQL = `
|
|
418
|
+
SELECT
|
|
419
|
+
"${foreignKey}" as parent_id,
|
|
420
|
+
${aggregateExpression} as data
|
|
421
|
+
FROM "${targetTable}"
|
|
422
|
+
${whereSQL}
|
|
423
|
+
GROUP BY "${foreignKey}"
|
|
333
424
|
`.trim();
|
|
334
425
|
return cteSQL;
|
|
335
426
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cte-collection-strategy.js","sourceRoot":"","sources":["../../../src/query/strategies/cte-collection-strategy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cte-collection-strategy.js","sourceRoot":"","sources":["../../../src/query/strategies/cte-collection-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,10 @@ export declare class LateralCollectionStrategy implements ICollectionStrategy {
|
|
|
43
43
|
getType(): CollectionStrategyType;
|
|
44
44
|
requiresParentIds(): boolean;
|
|
45
45
|
buildAggregation(config: CollectionAggregationConfig, context: QueryContext): CollectionAggregationResult;
|
|
46
|
+
/**
|
|
47
|
+
* Build navigation JOINs SQL for multi-level navigation in collection queries
|
|
48
|
+
*/
|
|
49
|
+
private buildNavigationJoins;
|
|
46
50
|
/**
|
|
47
51
|
* Build JSONB aggregation using LATERAL
|
|
48
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lateral-collection-strategy.d.ts","sourceRoot":"","sources":["../../../src/query/strategies/lateral-collection-strategy.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"lateral-collection-strategy.d.ts","sourceRoot":"","sources":["../../../src/query/strategies/lateral-collection-strategy.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAG5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,OAAO,IAAI,sBAAsB;IAIjC,iBAAiB,IAAI,OAAO;IAK5B,gBAAgB,CACd,MAAM,EAAE,2BAA2B,EACnC,OAAO,EAAE,YAAY,GACpB,2BAA2B;IA2C9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6G7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsE7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAuC/B"}
|
|
@@ -83,11 +83,37 @@ class LateralCollectionStrategy {
|
|
|
83
83
|
isCTE: false, // LATERAL is not a CTE - it's an inline subquery
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Build navigation JOINs SQL for multi-level navigation in collection queries
|
|
88
|
+
*/
|
|
89
|
+
buildNavigationJoins(navigationJoins, targetTable) {
|
|
90
|
+
if (!navigationJoins || navigationJoins.length === 0) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
const joinClauses = [];
|
|
94
|
+
for (const join of navigationJoins) {
|
|
95
|
+
const joinType = join.isMandatory ? 'INNER JOIN' : 'LEFT JOIN';
|
|
96
|
+
const qualifiedTable = join.targetSchema
|
|
97
|
+
? `"${join.targetSchema}"."${join.targetTable}"`
|
|
98
|
+
: `"${join.targetTable}"`;
|
|
99
|
+
// Build the ON clause
|
|
100
|
+
// foreignKeys are the columns in the source table
|
|
101
|
+
// matches are the columns in the target table (usually primary keys)
|
|
102
|
+
const onConditions = [];
|
|
103
|
+
for (let i = 0; i < join.foreignKeys.length; i++) {
|
|
104
|
+
const fk = join.foreignKeys[i];
|
|
105
|
+
const pk = join.matches[i] || 'id';
|
|
106
|
+
onConditions.push(`"${join.sourceAlias}"."${fk}" = "${join.alias}"."${pk}"`);
|
|
107
|
+
}
|
|
108
|
+
joinClauses.push(`${joinType} ${qualifiedTable} "${join.alias}" ON ${onConditions.join(' AND ')}`);
|
|
109
|
+
}
|
|
110
|
+
return joinClauses.join('\n ');
|
|
111
|
+
}
|
|
86
112
|
/**
|
|
87
113
|
* Build JSONB aggregation using LATERAL
|
|
88
114
|
*/
|
|
89
115
|
buildJsonbAggregation(config, lateralAlias, context) {
|
|
90
|
-
const { selectedFields, targetTable, foreignKey, sourceTable, whereClause, orderByClause, limitValue, offsetValue, isDistinct } = config;
|
|
116
|
+
const { selectedFields, targetTable, foreignKey, sourceTable, whereClause, orderByClause, limitValue, offsetValue, isDistinct, navigationJoins } = config;
|
|
91
117
|
// Helper to collect all leaf fields from a potentially nested structure
|
|
92
118
|
const collectLeafFields = (fields, prefix = '') => {
|
|
93
119
|
const result = [];
|
|
@@ -119,8 +145,19 @@ class LateralCollectionStrategy {
|
|
|
119
145
|
};
|
|
120
146
|
// Collect all leaf fields for the SELECT clause
|
|
121
147
|
const leafFields = collectLeafFields(selectedFields);
|
|
148
|
+
// When there are navigation joins, we need to qualify unqualified field expressions
|
|
149
|
+
// with the target table name to avoid ambiguous column references
|
|
150
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
122
151
|
// Build the subquery SELECT fields (no foreign key needed since we correlate with parent)
|
|
123
152
|
const allSelectFields = leafFields.map(f => {
|
|
153
|
+
// If expression is just a quoted column name (e.g., `"id"`), qualify it with target table
|
|
154
|
+
// But if it's already qualified (e.g., `"user"."username"`), leave it as is
|
|
155
|
+
const isSimpleColumn = /^"[^".]+"$/.test(f.expression);
|
|
156
|
+
if (isSimpleColumn && hasNavigationJoins) {
|
|
157
|
+
// Extract column name and qualify with target table
|
|
158
|
+
const columnName = f.expression.slice(1, -1); // Remove quotes
|
|
159
|
+
return `"${targetTable}"."${columnName}" as "${f.alias}"`;
|
|
160
|
+
}
|
|
124
161
|
if (f.expression !== `"${f.alias}"`) {
|
|
125
162
|
return `${f.expression} as "${f.alias}"`;
|
|
126
163
|
}
|
|
@@ -128,6 +165,8 @@ class LateralCollectionStrategy {
|
|
|
128
165
|
});
|
|
129
166
|
// Build the JSONB fields for jsonb_build_object
|
|
130
167
|
const jsonbObjectExpr = buildJsonbObject(selectedFields);
|
|
168
|
+
// Build navigation JOINs for multi-level navigation
|
|
169
|
+
const navJoinsSQL = this.buildNavigationJoins(navigationJoins, targetTable);
|
|
131
170
|
// Build WHERE clause - LATERAL correlates with parent via foreign key
|
|
132
171
|
// The correlation is: target.foreignKey = source.id
|
|
133
172
|
let whereSQL = `WHERE "${targetTable}"."${foreignKey}" = "${sourceTable}"."id"`;
|
|
@@ -150,17 +189,18 @@ class LateralCollectionStrategy {
|
|
|
150
189
|
// 1. The inner subquery already applies ORDER BY before LIMIT/OFFSET
|
|
151
190
|
// 2. Column aliases in the subquery may differ from original column names
|
|
152
191
|
// The order is preserved from the inner query's ORDER BY
|
|
153
|
-
const lateralSQL = `
|
|
154
|
-
SELECT jsonb_agg(
|
|
155
|
-
${jsonbObjectExpr}
|
|
156
|
-
) as data
|
|
157
|
-
FROM (
|
|
158
|
-
SELECT ${distinctClause}${allSelectFields.join(', ')}
|
|
159
|
-
FROM "${targetTable}"
|
|
160
|
-
${
|
|
161
|
-
${
|
|
162
|
-
${
|
|
163
|
-
|
|
192
|
+
const lateralSQL = `
|
|
193
|
+
SELECT jsonb_agg(
|
|
194
|
+
${jsonbObjectExpr}
|
|
195
|
+
) as data
|
|
196
|
+
FROM (
|
|
197
|
+
SELECT ${distinctClause}${allSelectFields.join(', ')}
|
|
198
|
+
FROM "${targetTable}"
|
|
199
|
+
${navJoinsSQL}
|
|
200
|
+
${whereSQL}
|
|
201
|
+
${orderBySQL}
|
|
202
|
+
${limitOffsetClause}
|
|
203
|
+
) sub
|
|
164
204
|
`.trim();
|
|
165
205
|
return lateralSQL;
|
|
166
206
|
}
|
|
@@ -168,10 +208,27 @@ FROM (
|
|
|
168
208
|
* Build array aggregation using LATERAL (for toNumberList/toStringList)
|
|
169
209
|
*/
|
|
170
210
|
buildArrayAggregation(config, lateralAlias, context) {
|
|
171
|
-
const { arrayField, targetTable, foreignKey, sourceTable, whereClause, orderByClause, limitValue, offsetValue, isDistinct } = config;
|
|
211
|
+
const { arrayField, targetTable, foreignKey, sourceTable, whereClause, orderByClause, limitValue, offsetValue, isDistinct, navigationJoins, selectedFields } = config;
|
|
172
212
|
if (!arrayField) {
|
|
173
213
|
throw new Error('arrayField is required for array aggregation');
|
|
174
214
|
}
|
|
215
|
+
const hasNavigationJoins = navigationJoins && navigationJoins.length > 0;
|
|
216
|
+
// Get the actual field expression from selectedFields (if available)
|
|
217
|
+
// This handles navigation properties like p.user!.id which need to be "user"."id"
|
|
218
|
+
let fieldExpression = `"${arrayField}"`;
|
|
219
|
+
if (selectedFields && selectedFields.length > 0) {
|
|
220
|
+
const firstField = selectedFields[0];
|
|
221
|
+
if (firstField.expression && firstField.expression !== `"${arrayField}"`) {
|
|
222
|
+
// Use the actual expression (e.g., "user"."id") instead of just the alias
|
|
223
|
+
fieldExpression = firstField.expression;
|
|
224
|
+
}
|
|
225
|
+
else if (hasNavigationJoins) {
|
|
226
|
+
// If we have navigation joins but no explicit expression, qualify with target table
|
|
227
|
+
fieldExpression = `"${targetTable}"."${arrayField}"`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Build navigation JOINs for multi-level navigation
|
|
231
|
+
const navJoinsSQL = this.buildNavigationJoins(navigationJoins, targetTable);
|
|
175
232
|
// Build WHERE clause with LATERAL correlation
|
|
176
233
|
let whereSQL = `WHERE "${targetTable}"."${foreignKey}" = "${sourceTable}"."id"`;
|
|
177
234
|
if (whereClause) {
|
|
@@ -190,17 +247,18 @@ FROM (
|
|
|
190
247
|
// Build DISTINCT clause
|
|
191
248
|
const distinctClause = isDistinct ? 'DISTINCT ' : '';
|
|
192
249
|
// Note: We don't add ORDER BY inside array_agg because the inner subquery already sorts
|
|
193
|
-
const lateralSQL = `
|
|
194
|
-
SELECT array_agg(
|
|
195
|
-
"${arrayField}"
|
|
196
|
-
) as data
|
|
197
|
-
FROM (
|
|
198
|
-
SELECT ${distinctClause}"${arrayField}"
|
|
199
|
-
FROM "${targetTable}"
|
|
200
|
-
${
|
|
201
|
-
${
|
|
202
|
-
${
|
|
203
|
-
|
|
250
|
+
const lateralSQL = `
|
|
251
|
+
SELECT array_agg(
|
|
252
|
+
"${arrayField}"
|
|
253
|
+
) as data
|
|
254
|
+
FROM (
|
|
255
|
+
SELECT ${distinctClause}${fieldExpression} as "${arrayField}"
|
|
256
|
+
FROM "${targetTable}"
|
|
257
|
+
${navJoinsSQL}
|
|
258
|
+
${whereSQL}
|
|
259
|
+
${orderBySQL}
|
|
260
|
+
${limitOffsetClause}
|
|
261
|
+
) sub
|
|
204
262
|
`.trim();
|
|
205
263
|
return lateralSQL;
|
|
206
264
|
}
|
|
@@ -231,10 +289,10 @@ FROM (
|
|
|
231
289
|
default:
|
|
232
290
|
throw new Error(`Unknown aggregation type: ${aggregationType}`);
|
|
233
291
|
}
|
|
234
|
-
const lateralSQL = `
|
|
235
|
-
SELECT ${aggregateExpression} as data
|
|
236
|
-
FROM "${targetTable}"
|
|
237
|
-
${whereSQL}
|
|
292
|
+
const lateralSQL = `
|
|
293
|
+
SELECT ${aggregateExpression} as data
|
|
294
|
+
FROM "${targetTable}"
|
|
295
|
+
${whereSQL}
|
|
238
296
|
`.trim();
|
|
239
297
|
return lateralSQL;
|
|
240
298
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lateral-collection-strategy.js","sourceRoot":"","sources":["../../../src/query/strategies/lateral-collection-strategy.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"lateral-collection-strategy.js","sourceRoot":"","sources":["../../../src/query/strategies/lateral-collection-strategy.ts"],"names":[],"mappings":"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"}
|