linkgress-orm 0.4.61 → 0.4.63
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/dist/entity/db-context.d.ts +1 -1
- package/dist/entity/db-context.js +65 -65
- package/dist/entity/db-context.js.map +1 -1
- package/dist/entity/entity-base.d.ts +1 -1
- package/dist/entity/entity-base.js +1 -1
- package/dist/entity/entity-builder.d.ts +9 -9
- package/dist/entity/entity-builder.js +9 -9
- package/dist/query/collection-strategy.interface.d.ts +1 -1
- package/dist/query/conditions.d.ts +25 -10
- package/dist/query/conditions.d.ts.map +1 -1
- package/dist/query/conditions.js +39 -11
- package/dist/query/conditions.js.map +1 -1
- package/dist/query/cte-root-query.d.ts +66 -0
- package/dist/query/cte-root-query.d.ts.map +1 -1
- package/dist/query/cte-root-query.js +135 -18
- package/dist/query/cte-root-query.js.map +1 -1
- package/dist/query/grouped-query.d.ts +7 -0
- package/dist/query/grouped-query.d.ts.map +1 -1
- package/dist/query/grouped-query.js +7 -1
- package/dist/query/grouped-query.js.map +1 -1
- package/dist/query/mutation-batch.d.ts +2 -2
- package/dist/query/mutation-batch.js +2 -2
- package/dist/query/query-builder.d.ts +1 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +26 -21
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/strategies/cte-collection-strategy.d.ts +1 -1
- package/dist/query/strategies/cte-collection-strategy.js +1 -1
- package/dist/query/strategies/lateral-collection-strategy.d.ts +1 -1
- package/dist/query/strategies/lateral-collection-strategy.js +1 -1
- package/dist/query/strategies/temptable-collection-strategy.d.ts +1 -1
- package/dist/query/strategies/temptable-collection-strategy.js +1 -1
- package/package.json +1 -1
|
@@ -1027,7 +1027,7 @@ export interface IEntityQueryable<TEntity extends DbEntity> {
|
|
|
1027
1027
|
/**
|
|
1028
1028
|
* INNER JOIN used purely as a row FILTER — keeps the entity shape (no
|
|
1029
1029
|
* selector), so scope-style predicates can hop across an N:1 FK in ONE
|
|
1030
|
-
* query level (e.g.
|
|
1030
|
+
* query level (e.g. loan ⋈ borrower_data). The optional
|
|
1031
1031
|
* third callback contributes an extra WHERE predicate with the same
|
|
1032
1032
|
* (left, right) arguments. Only the right table's COLUMNS are addressable
|
|
1033
1033
|
* (no navigations). Joining a 1:N side duplicates left rows — use
|
|
@@ -756,10 +756,10 @@ class TableAccessor {
|
|
|
756
756
|
}
|
|
757
757
|
const returningColumns = (0, sql_utils_2.buildReturningColumnList)(this.schema);
|
|
758
758
|
const qualifiedTableName = (0, sql_utils_2.getQualifiedTableName)(this.schema);
|
|
759
|
-
const sql = `
|
|
760
|
-
INSERT INTO ${qualifiedTableName} (${columns.join(', ')})
|
|
761
|
-
VALUES (${placeholders.join(', ')})
|
|
762
|
-
RETURNING ${returningColumns}
|
|
759
|
+
const sql = `
|
|
760
|
+
INSERT INTO ${qualifiedTableName} (${columns.join(', ')})
|
|
761
|
+
VALUES (${placeholders.join(', ')})
|
|
762
|
+
RETURNING ${returningColumns}
|
|
763
763
|
`;
|
|
764
764
|
const result = this.executor
|
|
765
765
|
? await this.executor.query(sql, values)
|
|
@@ -808,20 +808,20 @@ class TableAccessor {
|
|
|
808
808
|
const columnNames = columnConfigs.map(c => `"${c.dbName}"`);
|
|
809
809
|
const returningColumns = (0, sql_utils_2.buildReturningColumnList)(this.schema);
|
|
810
810
|
const qualifiedTableName = (0, sql_utils_2.getQualifiedTableName)(this.schema);
|
|
811
|
-
let sql = `
|
|
811
|
+
let sql = `
|
|
812
812
|
INSERT INTO ${qualifiedTableName} (${columnNames.join(', ')})`;
|
|
813
813
|
// Add OVERRIDING SYSTEM VALUE if specified
|
|
814
814
|
if (insertConfig?.overridingSystemValue) {
|
|
815
815
|
sql += '\n OVERRIDING SYSTEM VALUE';
|
|
816
816
|
}
|
|
817
|
-
sql += `
|
|
817
|
+
sql += `
|
|
818
818
|
VALUES ${valueClauses.join(', ')}`;
|
|
819
819
|
// Add ON CONFLICT DO NOTHING if specified
|
|
820
820
|
if (insertConfig?.onConflictDoNothing) {
|
|
821
821
|
sql += '\n ON CONFLICT DO NOTHING';
|
|
822
822
|
}
|
|
823
|
-
sql += `
|
|
824
|
-
RETURNING ${returningColumns}
|
|
823
|
+
sql += `
|
|
824
|
+
RETURNING ${returningColumns}
|
|
825
825
|
`;
|
|
826
826
|
const result = this.executor
|
|
827
827
|
? await this.executor.query(sql, params)
|
|
@@ -937,11 +937,11 @@ class TableAccessor {
|
|
|
937
937
|
.map(([_, col]) => `"${col.build().name}"`)
|
|
938
938
|
.join(', ');
|
|
939
939
|
const qualifiedTableName = (0, sql_utils_2.getQualifiedTableName)(this.schema);
|
|
940
|
-
const sql = `
|
|
941
|
-
UPDATE ${qualifiedTableName}
|
|
942
|
-
SET ${setClauses.join(', ')}
|
|
943
|
-
WHERE "${pkColumnName}" = $${paramIndex}
|
|
944
|
-
RETURNING ${returningColumns}
|
|
940
|
+
const sql = `
|
|
941
|
+
UPDATE ${qualifiedTableName}
|
|
942
|
+
SET ${setClauses.join(', ')}
|
|
943
|
+
WHERE "${pkColumnName}" = $${paramIndex}
|
|
944
|
+
RETURNING ${returningColumns}
|
|
945
945
|
`;
|
|
946
946
|
const result = this.executor
|
|
947
947
|
? await this.executor.query(sql, values)
|
|
@@ -2115,7 +2115,7 @@ class DbEntityTable {
|
|
|
2115
2115
|
const colEntry = Object.entries(parentSchema.columns).find(([, colBuilder]) => colBuilder.build().name === dbColumnName);
|
|
2116
2116
|
parentSelCols.push({ prop, dbName: dbColumnName, mapper: colEntry ? colEntry[1].build().mapper : undefined });
|
|
2117
2117
|
}
|
|
2118
|
-
let parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2118
|
+
let parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2119
2119
|
SELECT ${parentSelectCols} FROM (VALUES (${parentCompiled.valueRows[0]})) AS v(${parentColNames})`;
|
|
2120
2120
|
if (config.unlessExists) {
|
|
2121
2121
|
const guardFuture = config.unlessExists.future();
|
|
@@ -2139,16 +2139,16 @@ SELECT ${parentSelectCols} FROM (VALUES (${parentCompiled.valueRows[0]})) AS v($
|
|
|
2139
2139
|
const childValuesRows = childCompiled.valueRows.map((row, ix) => `(${ix}, ${row})`);
|
|
2140
2140
|
const childOffset = params.length;
|
|
2141
2141
|
const childValueList = childValuesRows.join(', ');
|
|
2142
|
-
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2143
|
-
SELECT p."${parentPkDbName}", ${childSelectCols} FROM "__iwc_parent__" p CROSS JOIN (VALUES ${childValueList}) AS v("__iwc_ord", ${childColNames})
|
|
2142
|
+
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2143
|
+
SELECT p."${parentPkDbName}", ${childSelectCols} FROM "__iwc_parent__" p CROSS JOIN (VALUES ${childValueList}) AS v("__iwc_ord", ${childColNames})
|
|
2144
2144
|
ORDER BY v."__iwc_ord"`;
|
|
2145
2145
|
childSql = childOffset === 0 ? childSql : (0, sql_utils_1.renumberPlaceholders)(childSql, childOffset);
|
|
2146
2146
|
params.push(...childCompiled.params);
|
|
2147
2147
|
// ---- returning assembly ----
|
|
2148
2148
|
const childPkEntries = Object.entries(childSchema.columns).filter(([, colBuilder]) => colBuilder.build().primaryKey);
|
|
2149
2149
|
const childPkDbName = childPkEntries.length === 1 ? childPkEntries[0][1].build().name : null;
|
|
2150
|
-
const prefixCtes = `"__iwc_parent__" AS (
|
|
2151
|
-
${parentSql}
|
|
2150
|
+
const prefixCtes = `"__iwc_parent__" AS (
|
|
2151
|
+
${parentSql}
|
|
2152
2152
|
)`;
|
|
2153
2153
|
const extraJoins = ['CROSS JOIN "__iwc_parent__" AS "__iwc_parent_j__"'];
|
|
2154
2154
|
const extraSelects = parentSelCols.map(c => `"__iwc_parent_j__"."${c.dbName}" AS "__iwc_parent__.${c.prop}"`);
|
|
@@ -2175,13 +2175,13 @@ ${parentSql}
|
|
|
2175
2175
|
const returningClause = childTable.buildReturningClause(config.returning.children);
|
|
2176
2176
|
const pkExtra = childPkDbName ? `, "${childPkDbName}" AS "__iwc_child_pk__"` : '';
|
|
2177
2177
|
const orderBy = childPkDbName ? '\nORDER BY "__mutation__"."__iwc_child_pk__"' : '';
|
|
2178
|
-
const sql = `WITH ${prefixCtes},
|
|
2179
|
-
"__mutation__" AS (
|
|
2180
|
-
${childSql}
|
|
2181
|
-
RETURNING ${returningClause.sql}${pkExtra}
|
|
2182
|
-
)
|
|
2183
|
-
SELECT "__mutation__".*, ${extraSelects.join(', ')}
|
|
2184
|
-
FROM "__mutation__"
|
|
2178
|
+
const sql = `WITH ${prefixCtes},
|
|
2179
|
+
"__mutation__" AS (
|
|
2180
|
+
${childSql}
|
|
2181
|
+
RETURNING ${returningClause.sql}${pkExtra}
|
|
2182
|
+
)
|
|
2183
|
+
SELECT "__mutation__".*, ${extraSelects.join(', ')}
|
|
2184
|
+
FROM "__mutation__"
|
|
2185
2185
|
${extraJoins.join('\n')}${orderBy}`;
|
|
2186
2186
|
const result = executor ? await executor.query(sql, params) : await client.query(sql, params);
|
|
2187
2187
|
rawRows = result.rows;
|
|
@@ -2308,9 +2308,9 @@ ${extraJoins.join('\n')}${orderBy}`;
|
|
|
2308
2308
|
const colEntry = Object.entries(parentSchema.columns).find(([, colBuilder]) => colBuilder.build().name === dbColumnName);
|
|
2309
2309
|
parentSelCols.push({ prop, dbName: dbColumnName, mapper: colEntry ? colEntry[1].build().mapper : undefined });
|
|
2310
2310
|
}
|
|
2311
|
-
const parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2312
|
-
SELECT ${parentSelectCols} FROM (VALUES ${parentValueRows}) AS v("__ibwc_ord", ${parentColNames})
|
|
2313
|
-
ORDER BY v."__ibwc_ord"
|
|
2311
|
+
const parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2312
|
+
SELECT ${parentSelectCols} FROM (VALUES ${parentValueRows}) AS v("__ibwc_ord", ${parentColNames})
|
|
2313
|
+
ORDER BY v."__ibwc_ord"
|
|
2314
2314
|
RETURNING *`;
|
|
2315
2315
|
// ---- child leg: (childOrd, parentIx, cells) VALUES joined to the ordinal CTE ----
|
|
2316
2316
|
const childSchema = childTable._getSchema();
|
|
@@ -2324,10 +2324,10 @@ RETURNING *`;
|
|
|
2324
2324
|
const childSelectCols = childCompiled.columns.map(c => `v."${c.dbName}"`).join(', ');
|
|
2325
2325
|
const childValueRows = childCompiled.valueRows.map((row, ix) => `(${ix}, ${config.children.rows[ix].parentIndex}, ${row})`).join(', ');
|
|
2326
2326
|
const childOffset = params.length;
|
|
2327
|
-
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2328
|
-
SELECT p."${parentPkDbName}", ${childSelectCols}
|
|
2329
|
-
FROM (VALUES ${childValueRows}) AS v("__ibwc_cord", "__ibwc_pix", ${childColNames})
|
|
2330
|
-
JOIN "__ibwc_pord__" p ON p."__ibwc_ord" = v."__ibwc_pix"
|
|
2327
|
+
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2328
|
+
SELECT p."${parentPkDbName}", ${childSelectCols}
|
|
2329
|
+
FROM (VALUES ${childValueRows}) AS v("__ibwc_cord", "__ibwc_pix", ${childColNames})
|
|
2330
|
+
JOIN "__ibwc_pord__" p ON p."__ibwc_ord" = v."__ibwc_pix"
|
|
2331
2331
|
ORDER BY v."__ibwc_cord"`;
|
|
2332
2332
|
childSql = childOffset === 0 ? childSql : (0, sql_utils_1.renumberPlaceholders)(childSql, childOffset);
|
|
2333
2333
|
params.push(...childCompiled.params);
|
|
@@ -2345,20 +2345,20 @@ ORDER BY v."__ibwc_cord"`;
|
|
|
2345
2345
|
`"__ibwc_pj__"."__ibwc_ord" AS "__ibwc_parent__.__ord"`,
|
|
2346
2346
|
...parentSelCols.map(c => `"__ibwc_pj__"."${c.dbName}" AS "__ibwc_parent__.${c.prop}"`),
|
|
2347
2347
|
];
|
|
2348
|
-
const sql = `WITH "__ibwc_parent__" AS (
|
|
2349
|
-
${parentSql}
|
|
2350
|
-
),
|
|
2351
|
-
"__ibwc_pord__" AS (
|
|
2352
|
-
SELECT p.*, row_number() OVER (ORDER BY p."${parentPkDbName}") - 1 AS "__ibwc_ord"
|
|
2353
|
-
FROM "__ibwc_parent__" p
|
|
2354
|
-
),
|
|
2355
|
-
"__mutation__" AS (
|
|
2356
|
-
${childSql}
|
|
2357
|
-
RETURNING ${returningClause.sql}, "${fkDbName}" AS "__ibwc_child_fk__", "${childPkDbName}" AS "__ibwc_child_pk__"
|
|
2358
|
-
)
|
|
2359
|
-
SELECT "__mutation__".*, ${parentJoinSelects.join(', ')}
|
|
2360
|
-
FROM "__mutation__"
|
|
2361
|
-
JOIN "__ibwc_pord__" "__ibwc_pj__" ON "__ibwc_pj__"."${parentPkDbName}" = "__mutation__"."__ibwc_child_fk__"
|
|
2348
|
+
const sql = `WITH "__ibwc_parent__" AS (
|
|
2349
|
+
${parentSql}
|
|
2350
|
+
),
|
|
2351
|
+
"__ibwc_pord__" AS (
|
|
2352
|
+
SELECT p.*, row_number() OVER (ORDER BY p."${parentPkDbName}") - 1 AS "__ibwc_ord"
|
|
2353
|
+
FROM "__ibwc_parent__" p
|
|
2354
|
+
),
|
|
2355
|
+
"__mutation__" AS (
|
|
2356
|
+
${childSql}
|
|
2357
|
+
RETURNING ${returningClause.sql}, "${fkDbName}" AS "__ibwc_child_fk__", "${childPkDbName}" AS "__ibwc_child_pk__"
|
|
2358
|
+
)
|
|
2359
|
+
SELECT "__mutation__".*, ${parentJoinSelects.join(', ')}
|
|
2360
|
+
FROM "__mutation__"
|
|
2361
|
+
JOIN "__ibwc_pord__" "__ibwc_pj__" ON "__ibwc_pj__"."${parentPkDbName}" = "__mutation__"."__ibwc_child_fk__"
|
|
2362
2362
|
ORDER BY "__mutation__"."__ibwc_child_pk__"`;
|
|
2363
2363
|
const result = executor ? await executor.query(sql, params) : await client.query(sql, params);
|
|
2364
2364
|
const rawRows = result.rows;
|
|
@@ -2936,11 +2936,11 @@ ORDER BY "__mutation__"."__ibwc_child_pk__"`;
|
|
|
2936
2936
|
const parentColNames = parentCompiled.columns.map(c => `"${c.dbName}"`).join(', ');
|
|
2937
2937
|
const parentSelectCols = parentCompiled.columns.map(c => `v."${c.dbName}"`).join(', ');
|
|
2938
2938
|
const parentValueRows = parentCompiled.valueRows.map((row, ix) => `(${ix}, ${row})`).join(', ');
|
|
2939
|
-
const parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2940
|
-
SELECT ${parentSelectCols} FROM (VALUES ${parentValueRows}) AS v("__mbw_ord", ${parentColNames})
|
|
2941
|
-
ORDER BY v."__mbw_ord"
|
|
2939
|
+
const parentSql = `INSERT INTO ${this._getQualifiedTableName()} (${parentColNames})
|
|
2940
|
+
SELECT ${parentSelectCols} FROM (VALUES ${parentValueRows}) AS v("__mbw_ord", ${parentColNames})
|
|
2941
|
+
ORDER BY v."__mbw_ord"
|
|
2942
2942
|
RETURNING *`;
|
|
2943
|
-
const ordinalSql = `SELECT p.*, row_number() OVER (ORDER BY p."${parentPkDbName}") - 1 AS "__mbw_ord"
|
|
2943
|
+
const ordinalSql = `SELECT p.*, row_number() OVER (ORDER BY p."${parentPkDbName}") - 1 AS "__mbw_ord"
|
|
2944
2944
|
FROM "__MB_SELF___p" p`;
|
|
2945
2945
|
const childSchema = childTable._getSchema();
|
|
2946
2946
|
const fkColBuilder = childSchema.columns[config.children.foreignKey];
|
|
@@ -2952,11 +2952,11 @@ FROM "__MB_SELF___p" p`;
|
|
|
2952
2952
|
const childColNames = childCompiled.columns.map((c) => `"${c.dbName}"`).join(', ');
|
|
2953
2953
|
const childSelectCols = childCompiled.columns.map((c) => `v."${c.dbName}"`).join(', ');
|
|
2954
2954
|
const childValueRows = childCompiled.valueRows.map((row, ix) => `(${ix}, ${config.children.rows[ix].parentIndex}, ${row})`).join(', ');
|
|
2955
|
-
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2956
|
-
SELECT o."${parentPkDbName}", ${childSelectCols}
|
|
2957
|
-
FROM (VALUES ${childValueRows}) AS v("__mbw_cord", "__mbw_pix", ${childColNames})
|
|
2958
|
-
JOIN "__MB_SELF___o" o ON o."__mbw_ord" = v."__mbw_pix"
|
|
2959
|
-
ORDER BY v."__mbw_cord"
|
|
2955
|
+
let childSql = `INSERT INTO ${childTable._getQualifiedTableName()} ("${fkDbName}", ${childColNames})
|
|
2956
|
+
SELECT o."${parentPkDbName}", ${childSelectCols}
|
|
2957
|
+
FROM (VALUES ${childValueRows}) AS v("__mbw_cord", "__mbw_pix", ${childColNames})
|
|
2958
|
+
JOIN "__MB_SELF___o" o ON o."__mbw_ord" = v."__mbw_pix"
|
|
2959
|
+
ORDER BY v."__mbw_cord"
|
|
2960
2960
|
RETURNING 1`;
|
|
2961
2961
|
childSql = parentCompiled.params.length === 0 ? childSql : (0, sql_utils_1.renumberPlaceholders)(childSql, parentCompiled.params.length);
|
|
2962
2962
|
return {
|
|
@@ -3646,10 +3646,10 @@ RETURNING 1`;
|
|
|
3646
3646
|
}
|
|
3647
3647
|
valuesClauses.push(`(${rowValues.join(', ')})`);
|
|
3648
3648
|
}
|
|
3649
|
-
const sql = `
|
|
3650
|
-
UPDATE ${qualifiedTableName} AS t
|
|
3651
|
-
SET ${setClauses.join(', ')}
|
|
3652
|
-
FROM (VALUES ${valuesClauses.join(', ')}) AS v(${valueColumnList})
|
|
3649
|
+
const sql = `
|
|
3650
|
+
UPDATE ${qualifiedTableName} AS t
|
|
3651
|
+
SET ${setClauses.join(', ')}
|
|
3652
|
+
FROM (VALUES ${valuesClauses.join(', ')}) AS v(${valueColumnList})
|
|
3653
3653
|
WHERE ${whereClause}`.trim();
|
|
3654
3654
|
return { sql, params };
|
|
3655
3655
|
}
|
|
@@ -4177,11 +4177,11 @@ WHERE ${whereClause}`.trim();
|
|
|
4177
4177
|
const extraJoins = options?.extraJoins?.length ? `${options.extraJoins.join('\n')}\n` : '';
|
|
4178
4178
|
const extraSelects = options?.extraSelects?.length ? `, ${options.extraSelects.join(', ')}` : '';
|
|
4179
4179
|
const orderBy = options?.orderByCteColumn ? `\nORDER BY "__mutation__"."${options.orderByCteColumn}"` : '';
|
|
4180
|
-
const sql = `WITH ${prefixCtes}"__mutation__" AS (
|
|
4181
|
-
${mutationWithReturning}
|
|
4182
|
-
)
|
|
4183
|
-
SELECT ${selectParts.join(', ')}${extraSelects}
|
|
4184
|
-
FROM "__mutation__"
|
|
4180
|
+
const sql = `WITH ${prefixCtes}"__mutation__" AS (
|
|
4181
|
+
${mutationWithReturning}
|
|
4182
|
+
)
|
|
4183
|
+
SELECT ${selectParts.join(', ')}${extraSelects}
|
|
4184
|
+
FROM "__mutation__"
|
|
4185
4185
|
${extraJoins}${joinClauses.join('\n')}${orderBy}`;
|
|
4186
4186
|
return { sql, params: allParams, nestedPaths };
|
|
4187
4187
|
}
|
|
@@ -4215,7 +4215,7 @@ ${extraJoins}${joinClauses.join('\n')}${orderBy}`;
|
|
|
4215
4215
|
return rows.map(row => {
|
|
4216
4216
|
const mapped = {};
|
|
4217
4217
|
for (const [key, value] of Object.entries(row)) {
|
|
4218
|
-
// Handle nested paths (e.g., "
|
|
4218
|
+
// Handle nested paths (e.g., "borrower.id" -> { borrower: { id: value } })
|
|
4219
4219
|
if (key.includes('.')) {
|
|
4220
4220
|
const parts = key.split('.');
|
|
4221
4221
|
let current = mapped;
|