linkgress-orm 0.1.0 → 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.
- package/LICENSE +21 -21
- package/README.md +196 -196
- package/dist/migration/db-schema-manager.js +77 -77
- package/dist/migration/enum-migrator.js +6 -6
- package/dist/query/cte-builder.d.ts +3 -0
- package/dist/query/cte-builder.d.ts.map +1 -1
- package/dist/query/cte-builder.js +14 -0
- package/dist/query/cte-builder.js.map +1 -1
- package/dist/query/grouped-query.d.ts +11 -0
- package/dist/query/grouped-query.d.ts.map +1 -1
- package/dist/query/grouped-query.js +113 -67
- 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 +29 -0
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +215 -133
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/strategies/cte-collection-strategy.js +68 -68
- package/dist/query/strategies/lateral-collection-strategy.js +26 -26
- 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
|
@@ -14,12 +14,12 @@ class EnumMigrator {
|
|
|
14
14
|
* Get existing enum values from the database
|
|
15
15
|
*/
|
|
16
16
|
async getExistingEnumValues(enumName) {
|
|
17
|
-
const query = `
|
|
18
|
-
SELECT e.enumlabel as value
|
|
19
|
-
FROM pg_type t
|
|
20
|
-
JOIN pg_enum e ON t.oid = e.enumtypid
|
|
21
|
-
WHERE t.typname = $1
|
|
22
|
-
ORDER BY e.enumsortorder
|
|
17
|
+
const query = `
|
|
18
|
+
SELECT e.enumlabel as value
|
|
19
|
+
FROM pg_type t
|
|
20
|
+
JOIN pg_enum e ON t.oid = e.enumtypid
|
|
21
|
+
WHERE t.typname = $1
|
|
22
|
+
ORDER BY e.enumsortorder
|
|
23
23
|
`;
|
|
24
24
|
const result = await this.client.query(query, [enumName]);
|
|
25
25
|
if (result.rows.length === 0) {
|
|
@@ -73,6 +73,9 @@ export declare class DbCteBuilder {
|
|
|
73
73
|
* - SelectQueryBuilder: uses createMockRow() and selector()
|
|
74
74
|
* - GroupedSelectQueryBuilder: uses buildCteQuery()
|
|
75
75
|
* - GroupedJoinedQueryBuilder: uses buildCteQuery()
|
|
76
|
+
*
|
|
77
|
+
* This also extracts any CTEs referenced by the inner query and adds them to this builder
|
|
78
|
+
* to avoid duplicate CTE definitions in nested queries.
|
|
76
79
|
*/
|
|
77
80
|
private buildInnerQuerySql;
|
|
78
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cte-builder.d.ts","sourceRoot":"","sources":["../../src/query/cte-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAA6B,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1E;;;;GAIG;AACH,UAAU,kBAAkB,CAAC,UAAU;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;CAC9E;AAwED;;GAEG;AACH,qBAAa,KAAK,CAAC,QAAQ;aAEP,IAAI,EAAE,MAAM;aACZ,KAAK,EAAE,MAAM;aACb,MAAM,EAAE,OAAO,EAAE;aACjB,UAAU,EAAE,QAAQ;aACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAJvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EAAE,EACjB,UAAU,EAAE,QAAQ,EACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA;IAGzD;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CAGhE;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,WAAW,CAAa;;IAIhC;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;KAAE,GAC9E;QAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;KAAE;IA6B7B;;;;;;;;;;;;;;OAcG;IACH,eAAe,CACb,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,SAAS,MAAM,GAAG,OAAO,EAE/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,EACtE,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACxC,gBAAgB,CAAC,EAAE,MAAM,GACxB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG;SAAG,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KAAE,CAAC;IAkDhG
|
|
1
|
+
{"version":3,"file":"cte-builder.d.ts","sourceRoot":"","sources":["../../src/query/cte-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,9 @@ class DbCteBuilder {
|
|
|
125
125
|
* - SelectQueryBuilder: uses createMockRow() and selector()
|
|
126
126
|
* - GroupedSelectQueryBuilder: uses buildCteQuery()
|
|
127
127
|
* - GroupedJoinedQueryBuilder: uses buildCteQuery()
|
|
128
|
+
*
|
|
129
|
+
* This also extracts any CTEs referenced by the inner query and adds them to this builder
|
|
130
|
+
* to avoid duplicate CTE definitions in nested queries.
|
|
128
131
|
*/
|
|
129
132
|
buildInnerQuerySql(query, context) {
|
|
130
133
|
const queryContext = {
|
|
@@ -133,6 +136,17 @@ class DbCteBuilder {
|
|
|
133
136
|
paramCounter: context.paramCounter,
|
|
134
137
|
allParams: context.params,
|
|
135
138
|
};
|
|
139
|
+
// Extract referenced CTEs from the query and add them to this builder
|
|
140
|
+
// This ensures CTEs are defined at the outermost level, not nested
|
|
141
|
+
if (typeof query.getReferencedCtes === 'function') {
|
|
142
|
+
const referencedCtes = query.getReferencedCtes();
|
|
143
|
+
for (const cte of referencedCtes) {
|
|
144
|
+
// Only add if not already present (avoid duplicates)
|
|
145
|
+
if (!this.ctes.some(existing => existing.name === cte.name)) {
|
|
146
|
+
this.ctes.push(cte);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
136
150
|
// Check for grouped query builders that have buildCteQuery method
|
|
137
151
|
if (typeof query.buildCteQuery === 'function') {
|
|
138
152
|
const result = query.buildCteQuery(queryContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cte-builder.js","sourceRoot":"","sources":["../../src/query/cte-builder.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"cte-builder.js","sourceRoot":"","sources":["../../src/query/cte-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -276,6 +276,10 @@ export declare class GroupedSelectQueryBuilder<TSelection, TOriginalRow, TGroupi
|
|
|
276
276
|
* Detect navigation properties in a selection and add JOINs for them
|
|
277
277
|
*/
|
|
278
278
|
private detectAndAddJoinsFromSelection;
|
|
279
|
+
/**
|
|
280
|
+
* Add a JOIN for a FieldRef if it references a related table
|
|
281
|
+
*/
|
|
282
|
+
private addJoinForFieldRef;
|
|
279
283
|
/**
|
|
280
284
|
* Build HAVING condition SQL - handles aggregate field refs specially
|
|
281
285
|
*/
|
|
@@ -346,8 +350,14 @@ export declare class GroupedJoinedQueryBuilder<TSelection, TLeft, TRight> {
|
|
|
346
350
|
* Convert to subquery for use in other queries
|
|
347
351
|
*/
|
|
348
352
|
asSubquery<TMode extends 'scalar' | 'array' | 'table' = 'table'>(mode?: TMode): Subquery<TMode extends 'scalar' ? ResolveFieldRefs<TSelection> : TMode extends 'array' ? ResolveFieldRefs<TSelection>[] : ResolveFieldRefs<TSelection>, TMode>;
|
|
353
|
+
/**
|
|
354
|
+
* Get CTEs used by this query builder
|
|
355
|
+
* @internal
|
|
356
|
+
*/
|
|
357
|
+
getReferencedCtes(): DbCte<any>[];
|
|
349
358
|
/**
|
|
350
359
|
* Build SQL for use in CTEs - public interface for CTE builder
|
|
360
|
+
* This returns SQL WITHOUT the WITH clause - CTEs should be extracted separately via getReferencedCtes()
|
|
351
361
|
* @internal
|
|
352
362
|
*/
|
|
353
363
|
buildCteQuery(queryContext: QueryContext): {
|
|
@@ -356,6 +366,7 @@ export declare class GroupedJoinedQueryBuilder<TSelection, TLeft, TRight> {
|
|
|
356
366
|
};
|
|
357
367
|
/**
|
|
358
368
|
* Build the SQL query
|
|
369
|
+
* @param skipCteClause If true, don't include WITH clause (for embedding in outer CTEs)
|
|
359
370
|
*/
|
|
360
371
|
private buildQuery;
|
|
361
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped-query.d.ts","sourceRoot":"","sources":["../../src/query/grouped-query.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"grouped-query.d.ts","sourceRoot":"","sources":["../../src/query/grouped-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,9 +83,9 @@ class GroupedQueryBuilder {
|
|
|
83
83
|
*/
|
|
84
84
|
createMockRow() {
|
|
85
85
|
const mock = {};
|
|
86
|
-
// Add columns as FieldRef objects
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
// Add columns as FieldRef objects - use pre-computed column name map if available
|
|
87
|
+
const columnNameMap = (0, query_builder_1.getColumnNameMapForSchema)(this.schema);
|
|
88
|
+
for (const [colName, dbColumnName] of columnNameMap) {
|
|
89
89
|
Object.defineProperty(mock, colName, {
|
|
90
90
|
get: () => ({
|
|
91
91
|
__fieldName: colName,
|
|
@@ -97,15 +97,11 @@ class GroupedQueryBuilder {
|
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
// Add navigation properties (collections and single references)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
for (const [relName, relConfig] of Object.entries(this.schema.relations)) {
|
|
100
|
+
// Performance: Use pre-computed relation entries and cached schemas
|
|
101
|
+
const relationEntries = (0, query_builder_1.getRelationEntriesForSchema)(this.schema);
|
|
102
|
+
for (const [relName, relConfig] of relationEntries) {
|
|
103
|
+
const targetSchema = (0, query_builder_1.getTargetSchemaForRelation)(this.schema, relName, relConfig);
|
|
107
104
|
if (relConfig.type === 'many') {
|
|
108
|
-
const targetSchema = relationSchemas.get(relName);
|
|
109
105
|
Object.defineProperty(mock, relName, {
|
|
110
106
|
get: () => {
|
|
111
107
|
return new query_builder_1.CollectionQueryBuilder(relName, relConfig.targetTable, relConfig.foreignKey || relConfig.foreignKeys?.[0] || '', this.schema.name, targetSchema);
|
|
@@ -115,7 +111,6 @@ class GroupedQueryBuilder {
|
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
113
|
else {
|
|
118
|
-
const targetSchema = relationSchemas.get(relName);
|
|
119
114
|
Object.defineProperty(mock, relName, {
|
|
120
115
|
get: () => {
|
|
121
116
|
const refBuilder = new query_builder_1.ReferenceQueryBuilder(relName, relConfig.targetTable, relConfig.foreignKeys || [relConfig.foreignKey || ''], relConfig.matches || [], relConfig.isMandatory ?? false, targetSchema);
|
|
@@ -131,8 +126,8 @@ class GroupedQueryBuilder {
|
|
|
131
126
|
if (join.isSubquery || !join.schema) {
|
|
132
127
|
continue;
|
|
133
128
|
}
|
|
134
|
-
|
|
135
|
-
|
|
129
|
+
const joinColumnNameMap = (0, query_builder_1.getColumnNameMapForSchema)(join.schema);
|
|
130
|
+
for (const [colName, dbColumnName] of joinColumnNameMap) {
|
|
136
131
|
if (!mock[join.alias]) {
|
|
137
132
|
mock[join.alias] = {};
|
|
138
133
|
}
|
|
@@ -453,12 +448,34 @@ class GroupedSelectQueryBuilder {
|
|
|
453
448
|
const mockRow = this.createMockRow();
|
|
454
449
|
const mockOriginalSelection = this.originalSelector(mockRow);
|
|
455
450
|
const mockGroupingKey = this.groupingKeySelector(mockOriginalSelection);
|
|
456
|
-
|
|
451
|
+
// Create mock grouped item using the SAME grouping key (not a fresh one)
|
|
452
|
+
// This ensures SqlFragment instances are shared between GROUP BY and SELECT
|
|
453
|
+
const mockGroup = {
|
|
454
|
+
key: mockGroupingKey,
|
|
455
|
+
count: () => createAggregateFieldRef('COUNT'),
|
|
456
|
+
sum: (selector) => createAggregateFieldRef('SUM', selector),
|
|
457
|
+
min: (selector) => createAggregateFieldRef('MIN', selector),
|
|
458
|
+
max: (selector) => createAggregateFieldRef('MAX', selector),
|
|
459
|
+
avg: (selector) => createAggregateFieldRef('AVG', selector),
|
|
460
|
+
};
|
|
457
461
|
const mockResult = this.resultSelector(mockGroup);
|
|
458
462
|
// Extract GROUP BY fields from the grouping key
|
|
463
|
+
// We build these first and cache the SQL for SqlFragments so they can be reused in SELECT
|
|
459
464
|
const groupByFields = [];
|
|
465
|
+
const sqlFragmentCache = new Map(); // Cache built SQL for reuse in SELECT
|
|
460
466
|
for (const [key, value] of Object.entries(mockGroupingKey)) {
|
|
461
|
-
if (
|
|
467
|
+
if (value instanceof conditions_1.SqlFragment) {
|
|
468
|
+
// SqlFragment in GROUP BY - build the SQL expression and cache it
|
|
469
|
+
const sqlBuildContext = {
|
|
470
|
+
paramCounter: context.paramCounter,
|
|
471
|
+
params: context.allParams,
|
|
472
|
+
};
|
|
473
|
+
const fragmentSql = value.buildSql(sqlBuildContext);
|
|
474
|
+
context.paramCounter = sqlBuildContext.paramCounter;
|
|
475
|
+
groupByFields.push(fragmentSql);
|
|
476
|
+
sqlFragmentCache.set(value, fragmentSql);
|
|
477
|
+
}
|
|
478
|
+
else if (typeof value === 'object' && value !== null && '__dbColumnName' in value) {
|
|
462
479
|
const field = value;
|
|
463
480
|
const tableAlias = field.__tableAlias || this.schema.name;
|
|
464
481
|
groupByFields.push(`"${tableAlias}"."${field.__dbColumnName}"`);
|
|
@@ -477,8 +494,9 @@ class GroupedSelectQueryBuilder {
|
|
|
477
494
|
}
|
|
478
495
|
else if (aggField.__aggregateSelector) {
|
|
479
496
|
// SUM, MIN, MAX, AVG with selector
|
|
480
|
-
|
|
481
|
-
|
|
497
|
+
// Note: The selector references fields from the ORIGINAL SELECTION (after first .select()),
|
|
498
|
+
// not the raw table row. So we need to use mockOriginalSelection, not a fresh mock row.
|
|
499
|
+
const field = aggField.__aggregateSelector(mockOriginalSelection);
|
|
482
500
|
if (typeof field === 'object' && field !== null && '__dbColumnName' in field) {
|
|
483
501
|
const fieldRef = field;
|
|
484
502
|
const tableAlias = fieldRef.__tableAlias || this.schema.name;
|
|
@@ -505,8 +523,8 @@ class GroupedSelectQueryBuilder {
|
|
|
505
523
|
selectParts.push(`CAST(COUNT(*) AS INTEGER) as "${alias}"`);
|
|
506
524
|
}
|
|
507
525
|
else if (agg.__selector) {
|
|
508
|
-
|
|
509
|
-
const field = agg.__selector(
|
|
526
|
+
// Use mockOriginalSelection - the selector references fields from the first .select()
|
|
527
|
+
const field = agg.__selector(mockOriginalSelection);
|
|
510
528
|
if (typeof field === 'object' && field !== null && '__dbColumnName' in field) {
|
|
511
529
|
const fieldRef = field;
|
|
512
530
|
const tableAlias = fieldRef.__tableAlias || this.schema.name;
|
|
@@ -526,14 +544,22 @@ class GroupedSelectQueryBuilder {
|
|
|
526
544
|
selectParts.push(`"${tableAlias}"."${field.__dbColumnName}" as "${alias}"`);
|
|
527
545
|
}
|
|
528
546
|
else if (value instanceof conditions_1.SqlFragment) {
|
|
529
|
-
// SQL fragment
|
|
530
|
-
const
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
547
|
+
// SQL fragment - check if we already built this for GROUP BY
|
|
548
|
+
const cachedSql = sqlFragmentCache.get(value);
|
|
549
|
+
if (cachedSql) {
|
|
550
|
+
// Reuse the cached SQL to ensure same parameter numbers
|
|
551
|
+
selectParts.push(`${cachedSql} as "${alias}"`);
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
// Build new SQL for this fragment
|
|
555
|
+
const sqlBuildContext = {
|
|
556
|
+
paramCounter: context.paramCounter,
|
|
557
|
+
params: context.allParams,
|
|
558
|
+
};
|
|
559
|
+
const fragmentSql = value.buildSql(sqlBuildContext);
|
|
560
|
+
context.paramCounter = sqlBuildContext.paramCounter;
|
|
561
|
+
selectParts.push(`${fragmentSql} as "${alias}"`);
|
|
562
|
+
}
|
|
537
563
|
}
|
|
538
564
|
}
|
|
539
565
|
// Detect navigation property references in WHERE and add JOINs
|
|
@@ -621,9 +647,9 @@ class GroupedSelectQueryBuilder {
|
|
|
621
647
|
*/
|
|
622
648
|
createMockRow() {
|
|
623
649
|
const mock = {};
|
|
624
|
-
// Add columns as FieldRef objects
|
|
625
|
-
|
|
626
|
-
|
|
650
|
+
// Add columns as FieldRef objects - use pre-computed column name map if available
|
|
651
|
+
const columnNameMap = (0, query_builder_1.getColumnNameMapForSchema)(this.schema);
|
|
652
|
+
for (const [colName, dbColumnName] of columnNameMap) {
|
|
627
653
|
Object.defineProperty(mock, colName, {
|
|
628
654
|
get: () => ({
|
|
629
655
|
__fieldName: colName,
|
|
@@ -635,15 +661,11 @@ class GroupedSelectQueryBuilder {
|
|
|
635
661
|
});
|
|
636
662
|
}
|
|
637
663
|
// Add navigation properties (collections and single references)
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
for (const [relName, relConfig] of Object.entries(this.schema.relations)) {
|
|
664
|
+
// Performance: Use pre-computed relation entries and cached schemas
|
|
665
|
+
const relationEntries = (0, query_builder_1.getRelationEntriesForSchema)(this.schema);
|
|
666
|
+
for (const [relName, relConfig] of relationEntries) {
|
|
667
|
+
const targetSchema = (0, query_builder_1.getTargetSchemaForRelation)(this.schema, relName, relConfig);
|
|
645
668
|
if (relConfig.type === 'many') {
|
|
646
|
-
const targetSchema = relationSchemas.get(relName);
|
|
647
669
|
Object.defineProperty(mock, relName, {
|
|
648
670
|
get: () => {
|
|
649
671
|
return new query_builder_1.CollectionQueryBuilder(relName, relConfig.targetTable, relConfig.foreignKey || relConfig.foreignKeys?.[0] || '', this.schema.name, targetSchema);
|
|
@@ -653,7 +675,6 @@ class GroupedSelectQueryBuilder {
|
|
|
653
675
|
});
|
|
654
676
|
}
|
|
655
677
|
else {
|
|
656
|
-
const targetSchema = relationSchemas.get(relName);
|
|
657
678
|
Object.defineProperty(mock, relName, {
|
|
658
679
|
get: () => {
|
|
659
680
|
const refBuilder = new query_builder_1.ReferenceQueryBuilder(relName, relConfig.targetTable, relConfig.foreignKeys || [relConfig.foreignKey || ''], relConfig.matches || [], relConfig.isMandatory ?? false, targetSchema);
|
|
@@ -669,8 +690,8 @@ class GroupedSelectQueryBuilder {
|
|
|
669
690
|
if (join.isSubquery || !join.schema) {
|
|
670
691
|
continue;
|
|
671
692
|
}
|
|
672
|
-
|
|
673
|
-
|
|
693
|
+
const joinColumnNameMap = (0, query_builder_1.getColumnNameMapForSchema)(join.schema);
|
|
694
|
+
for (const [colName, dbColumnName] of joinColumnNameMap) {
|
|
674
695
|
if (!mock[join.alias]) {
|
|
675
696
|
mock[join.alias] = {};
|
|
676
697
|
}
|
|
@@ -760,27 +781,13 @@ class GroupedSelectQueryBuilder {
|
|
|
760
781
|
for (const [, value] of Object.entries(selection)) {
|
|
761
782
|
if (value && typeof value === 'object' && '__tableAlias' in value && '__dbColumnName' in value) {
|
|
762
783
|
// This is a FieldRef with a table alias - check if it's from a related table
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
if (relation.targetTableBuilder) {
|
|
771
|
-
const targetTableSchema = relation.targetTableBuilder.build();
|
|
772
|
-
targetSchema = targetTableSchema.schema;
|
|
773
|
-
}
|
|
774
|
-
// Add a JOIN for this reference
|
|
775
|
-
joins.push({
|
|
776
|
-
alias: tableAlias,
|
|
777
|
-
targetTable: relation.targetTable,
|
|
778
|
-
targetSchema,
|
|
779
|
-
foreignKeys: relation.foreignKeys || [relation.foreignKey || ''],
|
|
780
|
-
matches: relation.matches || [],
|
|
781
|
-
isMandatory: relation.isMandatory ?? false,
|
|
782
|
-
});
|
|
783
|
-
}
|
|
784
|
+
this.addJoinForFieldRef(value, joins);
|
|
785
|
+
}
|
|
786
|
+
else if (value instanceof conditions_1.SqlFragment) {
|
|
787
|
+
// SqlFragment may contain navigation property references - extract them
|
|
788
|
+
const fieldRefs = value.getFieldRefs();
|
|
789
|
+
for (const fieldRef of fieldRefs) {
|
|
790
|
+
this.addJoinForFieldRef(fieldRef, joins);
|
|
784
791
|
}
|
|
785
792
|
}
|
|
786
793
|
else if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
@@ -789,6 +796,36 @@ class GroupedSelectQueryBuilder {
|
|
|
789
796
|
}
|
|
790
797
|
}
|
|
791
798
|
}
|
|
799
|
+
/**
|
|
800
|
+
* Add a JOIN for a FieldRef if it references a related table
|
|
801
|
+
*/
|
|
802
|
+
addJoinForFieldRef(fieldRef, joins) {
|
|
803
|
+
if (!fieldRef || typeof fieldRef !== 'object' || !('__tableAlias' in fieldRef) || !('__dbColumnName' in fieldRef)) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
const tableAlias = fieldRef.__tableAlias;
|
|
807
|
+
if (tableAlias && tableAlias !== this.schema.name && !joins.some(j => j.alias === tableAlias)) {
|
|
808
|
+
// This references a related table - find the relation and add a JOIN
|
|
809
|
+
const relation = this.schema.relations[tableAlias];
|
|
810
|
+
if (relation && relation.type === 'one') {
|
|
811
|
+
// Get target schema from targetTableBuilder if available
|
|
812
|
+
let targetSchema;
|
|
813
|
+
if (relation.targetTableBuilder) {
|
|
814
|
+
const targetTableSchema = relation.targetTableBuilder.build();
|
|
815
|
+
targetSchema = targetTableSchema.schema;
|
|
816
|
+
}
|
|
817
|
+
// Add a JOIN for this reference
|
|
818
|
+
joins.push({
|
|
819
|
+
alias: tableAlias,
|
|
820
|
+
targetTable: relation.targetTable,
|
|
821
|
+
targetSchema,
|
|
822
|
+
foreignKeys: relation.foreignKeys || [relation.foreignKey || ''],
|
|
823
|
+
matches: relation.matches || [],
|
|
824
|
+
isMandatory: relation.isMandatory ?? false,
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
792
829
|
/**
|
|
793
830
|
* Build HAVING condition SQL - handles aggregate field refs specially
|
|
794
831
|
*/
|
|
@@ -974,20 +1011,29 @@ class GroupedJoinedQueryBuilder {
|
|
|
974
1011
|
const selectionMetadata = this.resultSelector(mockLeft, mockRight);
|
|
975
1012
|
return new subquery_1.Subquery(sqlBuilder, mode, selectionMetadata);
|
|
976
1013
|
}
|
|
1014
|
+
/**
|
|
1015
|
+
* Get CTEs used by this query builder
|
|
1016
|
+
* @internal
|
|
1017
|
+
*/
|
|
1018
|
+
getReferencedCtes() {
|
|
1019
|
+
return this.cte ? [this.cte] : [];
|
|
1020
|
+
}
|
|
977
1021
|
/**
|
|
978
1022
|
* Build SQL for use in CTEs - public interface for CTE builder
|
|
1023
|
+
* This returns SQL WITHOUT the WITH clause - CTEs should be extracted separately via getReferencedCtes()
|
|
979
1024
|
* @internal
|
|
980
1025
|
*/
|
|
981
1026
|
buildCteQuery(queryContext) {
|
|
982
|
-
return this.buildQuery(queryContext);
|
|
1027
|
+
return this.buildQuery(queryContext, true);
|
|
983
1028
|
}
|
|
984
1029
|
/**
|
|
985
1030
|
* Build the SQL query
|
|
1031
|
+
* @param skipCteClause If true, don't include WITH clause (for embedding in outer CTEs)
|
|
986
1032
|
*/
|
|
987
|
-
buildQuery(context) {
|
|
988
|
-
// Build CTE clause if needed
|
|
1033
|
+
buildQuery(context, skipCteClause = false) {
|
|
1034
|
+
// Build CTE clause if needed (unless we're being embedded in another CTE)
|
|
989
1035
|
let cteClause = '';
|
|
990
|
-
if (this.cte) {
|
|
1036
|
+
if (this.cte && !skipCteClause) {
|
|
991
1037
|
cteClause = `WITH "${this.cte.name}" AS (${this.cte.query})\n`;
|
|
992
1038
|
context.allParams.push(...this.cte.params);
|
|
993
1039
|
context.paramCounter += this.cte.params.length;
|