linkgress-orm 0.4.55 → 0.4.56
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 +100 -0
- package/dist/entity/db-context.d.ts.map +1 -1
- package/dist/entity/db-context.js +386 -94
- package/dist/entity/db-context.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/query/mutation-batch.d.ts +101 -0
- package/dist/query/mutation-batch.d.ts.map +1 -0
- package/dist/query/mutation-batch.js +154 -0
- package/dist/query/mutation-batch.js.map +1 -0
- package/dist/query/query-batch.d.ts +6 -0
- package/dist/query/query-batch.d.ts.map +1 -1
- package/dist/query/query-batch.js +8 -9
- package/dist/query/query-batch.js.map +1 -1
- package/dist/query/sql-utils.d.ts +1 -0
- package/dist/query/sql-utils.d.ts.map +1 -1
- package/dist/query/sql-utils.js +12 -1
- package/dist/query/sql-utils.js.map +1 -1
- package/package.json +80 -79
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.BunClient = exports.PgClient = exports.PostgresClient = exports.QueryTimeoutError = exports.DatabaseClient = exports.MigrationScaffold = exports.MigrationLoader = void 0;
|
|
3
|
+
exports.Placeholder = exports.RawSql = exports.SqlFragment = exports.ConditionBuilder = exports.JoinQueryBuilder = exports.GroupedJoinedQueryBuilder = exports.GroupedSelectQueryBuilder = exports.GroupedQueryBuilder = exports.PreparedQuery = exports.MutationBatch = exports.QueryBatch = exports.isFutureCountQuery = exports.isFutureSingleQuery = exports.isFutureQuery = exports.FutureQueryRunner = exports.FutureCountQuery = exports.FutureSingleQuery = exports.FutureQuery = exports.isUnionQueryBuilder = exports.UnionQueryBuilder = exports.CollectionQueryBuilder = exports.SelectQueryBuilder = exports.QueryBuilder = exports.CollationRegistry = exports.pgCollation = exports.EnumTypeRegistry = exports.pgEnum = exports.ColumnBuilder = exports.enumColumn = exports.bytea = exports.jsonb = exports.json = exports.uuid = exports.time = exports.date = exports.timestamptz = exports.timestamp = exports.boolean = exports.text = exports.char = exports.varchar = exports.doublePrecision = exports.real = exports.numeric = exports.decimal = exports.smallint = exports.bigserial = exports.bigint = exports.serial = exports.integer = void 0;
|
|
4
|
+
exports.eqSubquery = exports.notInSubquery = exports.inSubquery = exports.notExists = exports.exists = exports.isSubquery = exports.Subquery = exports.flagHasNone = exports.flagHasAny = exports.flagHasAll = exports.flagHas = exports.div = exports.mul = exports.sub = exports.add = exports.jsonbConditionUnwrap = exports.jsonbArraySome = exports.jsonbSelectText = exports.jsonbSelect = exports.jsonbMerge = exports.coalesce = exports.sql = exports.not = exports.or = exports.and = exports.between = exports.isNotNull = exports.isNull = exports.notInArray = exports.inArray = exports.regexNoMatchCaseInsensitive = exports.regexNoMatch = exports.regexMatchesCaseInsensitive = exports.regexMatches = exports.normalizedStartsWith = exports.normalizedLike = exports.normalizedEq = exports.endsWithSearch = exports.startsWithSearch = exports.containsSearch = exports.searchNormalize = exports.startsWith = exports.ilike = exports.like = exports.lte = exports.lt = exports.gte = exports.gt = exports.ne = exports.eq = void 0;
|
|
5
|
+
exports.MigrationRunner = exports.EnumMigrator = exports.DbSchemaManager = exports.sequence = exports.SequenceBuilder = exports.DbSequence = exports.applyFromDriverArray = exports.applyFromDriver = exports.applyToDriver = exports.identityMapper = exports.createCustomType = exports.interval = exports.vector = exports.point = exports.enumType = exports.array = exports.jsonType = exports.customType = exports.CustomTypeBuilder = exports.TypeAliases = exports.EntityInsertBuilder = exports.DbEntityTable = exports.DbContext = exports.DbModelConfig = exports.HasOneNavigationBuilder = exports.HasManyNavigationBuilder = exports.EntityNavigationBuilder = exports.EntityPropertyBuilder = exports.EntityConfigBuilder = exports.isDbColumn = exports.DbColumn = exports.ixNormalized = exports.ixUnaccent = exports.ixLower = exports.EntityMetadataStore = exports.DbEntity = exports.CollectionStrategyFactory = exports.TimeTracer = exports.defaultLogger = exports.onTrue = exports.CteJoinedQueryBuilder = exports.CteRootQueryBuilder = exports.isCte = exports.DbCteBuilder = exports.DbCte = exports.lteSubquery = exports.ltSubquery = exports.gteSubquery = exports.gtSubquery = exports.neSubquery = void 0;
|
|
6
|
+
exports.BunClient = exports.PgClient = exports.PostgresClient = exports.QueryTimeoutError = exports.DatabaseClient = exports.MigrationScaffold = exports.MigrationLoader = exports.MigrationJournal = void 0;
|
|
7
7
|
// Internal schema builders (exported for DbContext use only)
|
|
8
8
|
var column_builder_1 = require("./schema/column-builder");
|
|
9
9
|
Object.defineProperty(exports, "integer", { enumerable: true, get: function () { return column_builder_1.integer; } });
|
|
@@ -58,6 +58,9 @@ Object.defineProperty(exports, "isFutureCountQuery", { enumerable: true, get: fu
|
|
|
58
58
|
// QueryBatch — heterogeneous queries in ONE round trip (UNION ALL + json envelopes)
|
|
59
59
|
var query_batch_1 = require("./query/query-batch");
|
|
60
60
|
Object.defineProperty(exports, "QueryBatch", { enumerable: true, get: function () { return query_batch_1.QueryBatch; } });
|
|
61
|
+
// MutationBatch — independent insertBulk/bulkUpdate legs in ONE round trip (data-modifying CTEs)
|
|
62
|
+
var mutation_batch_1 = require("./query/mutation-batch");
|
|
63
|
+
Object.defineProperty(exports, "MutationBatch", { enumerable: true, get: function () { return mutation_batch_1.MutationBatch; } });
|
|
61
64
|
// Prepared statements
|
|
62
65
|
var prepared_query_1 = require("./query/prepared-query");
|
|
63
66
|
Object.defineProperty(exports, "PreparedQuery", { enumerable: true, get: function () { return prepared_query_1.PreparedQuery; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,6DAA6D;AAC7D,0DAwBiC;AAvB/B,yGAAA,OAAO,OAAA;AACP,wGAAA,MAAM,OAAA;AACN,wGAAA,MAAM,OAAA;AACN,2GAAA,SAAS,OAAA;AACT,0GAAA,QAAQ,OAAA;AACR,yGAAA,OAAO,OAAA;AACP,yGAAA,OAAO,OAAA;AACP,sGAAA,IAAI,OAAA;AACJ,iHAAA,eAAe,OAAA;AACf,yGAAA,OAAO,OAAA;AACP,sGAAA,IAAI,OAAA;AACJ,sGAAA,IAAI,OAAA;AACJ,yGAAA,OAAO,OAAA;AACP,2GAAA,SAAS,OAAA;AACT,6GAAA,WAAW,OAAA;AACX,sGAAA,IAAI,OAAA;AACJ,sGAAA,IAAI,OAAA;AACJ,sGAAA,IAAI,OAAA;AACJ,sGAAA,IAAI,OAAA;AACJ,uGAAA,KAAK,OAAA;AACL,uGAAA,KAAK,OAAA;AACL,4GAAA,UAAU,OAAA;AACV,+GAAA,aAAa,OAAA;AAOf,aAAa;AACb,qDAG8B;AAF5B,sGAAA,MAAM,OAAA;AACN,gHAAA,gBAAgB,OAAA;AAQlB,kBAAkB;AAClB,+DAGmC;AAFjC,gHAAA,WAAW,OAAA;AACX,sHAAA,iBAAiB,OAAA;AAOnB,iBAAiB;AACjB,uDAI+B;AAH7B,6GAAA,YAAY,OAAA;AACZ,mHAAA,kBAAkB,OAAA;AAClB,uHAAA,sBAAsB,OAAA;AAGxB,sBAAsB;AACtB,uDAG+B;AAF7B,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAOrB,qCAAqC;AACrC,qDAQ8B;AAP5B,2GAAA,WAAW,OAAA;AACX,iHAAA,iBAAiB,OAAA;AACjB,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,mHAAA,mBAAmB,OAAA;AACnB,kHAAA,kBAAkB,OAAA;AASpB,oFAAoF;AACpF,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { DatabaseClient } from '../database/database-client.interface';
|
|
2
|
+
/** Typed handle returned by MutationBatch.addInsertBulk / addBulkUpdate. */
|
|
3
|
+
export interface MutationBatchKey {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The structural surface MutationBatch needs from an entity table — the
|
|
8
|
+
* internal compile methods {@link DbEntityTable} exposes for it. Structural on
|
|
9
|
+
* purpose: it avoids a value import of the (heavyweight) entity module from
|
|
10
|
+
* the query layer.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
interface MutationCapableTable {
|
|
14
|
+
_buildInsertBulkStatement(data: Record<string, any>[], overridingSystemValue?: boolean, onConflictDoNothing?: boolean): {
|
|
15
|
+
sql: string;
|
|
16
|
+
params: any[];
|
|
17
|
+
} | null;
|
|
18
|
+
_buildBulkUpdateStatement(data: Record<string, any>[], primaryKeys: string[]): {
|
|
19
|
+
sql: string;
|
|
20
|
+
params: any[];
|
|
21
|
+
};
|
|
22
|
+
_resolveBulkUpdatePrimaryKeys(data: Record<string, any>[], config?: {
|
|
23
|
+
primaryKey?: string | string[];
|
|
24
|
+
}): string[];
|
|
25
|
+
_getClient(): DatabaseClient;
|
|
26
|
+
_getExecutor(): {
|
|
27
|
+
query: (sql: string, params: any[]) => Promise<any>;
|
|
28
|
+
} | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Composes heterogeneous INDEPENDENT mutations (insertBulk / bulkUpdate legs)
|
|
32
|
+
* into ONE data-modifying-CTE statement executed in a single round trip:
|
|
33
|
+
*
|
|
34
|
+
* WITH "__mb_0" AS (INSERT ... RETURNING 1),
|
|
35
|
+
* "__mb_1" AS (UPDATE ... RETURNING 1)
|
|
36
|
+
* SELECT (SELECT count(*)::int FROM "__mb_0") AS "0", ...
|
|
37
|
+
*
|
|
38
|
+
* Each leg's SQL is EXACTLY what its standalone execution would run (same
|
|
39
|
+
* column mappers, same `"col__provided"` CASE semantics for bulkUpdate), so
|
|
40
|
+
* batched results are value-identical to sequential execution — under
|
|
41
|
+
* PostgreSQL's data-modifying-CTE rules:
|
|
42
|
+
*
|
|
43
|
+
* - all legs run against the SAME snapshot; one leg's writes are INVISIBLE to
|
|
44
|
+
* the others — legs must be mutually independent;
|
|
45
|
+
* - modifying the same ROW from two legs is unsupported by PostgreSQL (one
|
|
46
|
+
* silently wins) — never point two legs at the same rows;
|
|
47
|
+
* - the statement is atomic: any leg's error rolls back every leg.
|
|
48
|
+
*
|
|
49
|
+
* Registration semantics: empty row arrays register NOTHING and return null
|
|
50
|
+
* (mirroring insertBulk/bulkUpdate early returns), so call sites with
|
|
51
|
+
* conditional legs need no guards; an empty batch's executeBatch() is a no-op.
|
|
52
|
+
* A leg larger than the single-statement parameter budget throws at
|
|
53
|
+
* registration — chunked mutations cannot ride one statement, execute those
|
|
54
|
+
* standalone.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const batch = new MutationBatch();
|
|
58
|
+
* batch.addBulkUpdate(db.orderItems, itemUpdates, 'items');
|
|
59
|
+
* batch.addInsertBulk(db.cfOrderItemDdValues, ddRows, 'dd');
|
|
60
|
+
* batch.addInsertBulk(db.orderItemAttributes, attrRows, 'attrs');
|
|
61
|
+
* await batch.executeBatch(); // ONE round trip (no-op when all legs were empty)
|
|
62
|
+
* batch.getAffectedCount('items'); // rows the update leg matched
|
|
63
|
+
*/
|
|
64
|
+
export declare class MutationBatch {
|
|
65
|
+
private readonly legs;
|
|
66
|
+
private counts;
|
|
67
|
+
/**
|
|
68
|
+
* Register a bulk INSERT leg. Returns null (and registers nothing) for an
|
|
69
|
+
* empty row array or rows resolving to zero insertable columns.
|
|
70
|
+
*/
|
|
71
|
+
addInsertBulk(table: MutationCapableTable, rows: Record<string, any>[], id: string, options?: {
|
|
72
|
+
overridingSystemValue?: boolean;
|
|
73
|
+
onConflictDoNothing?: boolean;
|
|
74
|
+
}): MutationBatchKey | null;
|
|
75
|
+
/**
|
|
76
|
+
* Register a bulk UPDATE leg (same per-row `"col__provided"` semantics as
|
|
77
|
+
* standalone bulkUpdate). Returns null for an empty row array.
|
|
78
|
+
*/
|
|
79
|
+
addBulkUpdate(table: MutationCapableTable, rows: Record<string, any>[], id: string, config?: {
|
|
80
|
+
primaryKey?: string | string[];
|
|
81
|
+
}): MutationBatchKey | null;
|
|
82
|
+
/** Number of registered (non-empty) legs. */
|
|
83
|
+
get size(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Execute every registered leg as ONE statement and store the per-leg
|
|
86
|
+
* affected counts. A batch with zero legs resolves without touching the
|
|
87
|
+
* database. One-shot: a batch that already executed throws.
|
|
88
|
+
*/
|
|
89
|
+
executeBatch(): Promise<void>;
|
|
90
|
+
/** Rows the leg inserted/matched. Only valid after executeBatch(). */
|
|
91
|
+
getAffectedCount(key: MutationBatchKey | string): number;
|
|
92
|
+
private assertRegisterable;
|
|
93
|
+
/**
|
|
94
|
+
* A leg must fit one statement — the same parameter-budget formula the
|
|
95
|
+
* standalone mutations use to CHUNK large inputs. A chunked mutation cannot
|
|
96
|
+
* ride a single-statement batch, so oversize inputs are rejected here.
|
|
97
|
+
*/
|
|
98
|
+
private static assertSingleStatementBudget;
|
|
99
|
+
}
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=mutation-batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-batch.d.ts","sourceRoot":"","sources":["../../src/query/mutation-batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAK5E,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,UAAU,oBAAoB;IAC5B,yBAAyB,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC3B,qBAAqB,CAAC,EAAE,OAAO,EAC/B,mBAAmB,CAAC,EAAE,OAAO,GAC5B;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAC9G,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM,EAAE,CAAC;IAClH,UAAU,IAAI,cAAc,CAAC;IAC7B,YAAY,IAAI;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC;CACrF;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAoC;IAElD;;;OAGG;IACH,aAAa,CACX,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC3B,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3E,gBAAgB,GAAG,IAAI;IAmB1B;;;OAGG;IACH,aAAa,CACX,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC3B,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAC1C,gBAAgB,GAAG,IAAI;IAgB1B,6CAA6C;IAC7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CnC,sEAAsE;IACtE,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM;IAexD,OAAO,CAAC,kBAAkB;IAU1B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;CAW3C"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MutationBatch = void 0;
|
|
4
|
+
const query_batch_1 = require("./query-batch");
|
|
5
|
+
const POSTGRES_MAX_PARAMS = 65535;
|
|
6
|
+
/**
|
|
7
|
+
* Composes heterogeneous INDEPENDENT mutations (insertBulk / bulkUpdate legs)
|
|
8
|
+
* into ONE data-modifying-CTE statement executed in a single round trip:
|
|
9
|
+
*
|
|
10
|
+
* WITH "__mb_0" AS (INSERT ... RETURNING 1),
|
|
11
|
+
* "__mb_1" AS (UPDATE ... RETURNING 1)
|
|
12
|
+
* SELECT (SELECT count(*)::int FROM "__mb_0") AS "0", ...
|
|
13
|
+
*
|
|
14
|
+
* Each leg's SQL is EXACTLY what its standalone execution would run (same
|
|
15
|
+
* column mappers, same `"col__provided"` CASE semantics for bulkUpdate), so
|
|
16
|
+
* batched results are value-identical to sequential execution — under
|
|
17
|
+
* PostgreSQL's data-modifying-CTE rules:
|
|
18
|
+
*
|
|
19
|
+
* - all legs run against the SAME snapshot; one leg's writes are INVISIBLE to
|
|
20
|
+
* the others — legs must be mutually independent;
|
|
21
|
+
* - modifying the same ROW from two legs is unsupported by PostgreSQL (one
|
|
22
|
+
* silently wins) — never point two legs at the same rows;
|
|
23
|
+
* - the statement is atomic: any leg's error rolls back every leg.
|
|
24
|
+
*
|
|
25
|
+
* Registration semantics: empty row arrays register NOTHING and return null
|
|
26
|
+
* (mirroring insertBulk/bulkUpdate early returns), so call sites with
|
|
27
|
+
* conditional legs need no guards; an empty batch's executeBatch() is a no-op.
|
|
28
|
+
* A leg larger than the single-statement parameter budget throws at
|
|
29
|
+
* registration — chunked mutations cannot ride one statement, execute those
|
|
30
|
+
* standalone.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const batch = new MutationBatch();
|
|
34
|
+
* batch.addBulkUpdate(db.orderItems, itemUpdates, 'items');
|
|
35
|
+
* batch.addInsertBulk(db.cfOrderItemDdValues, ddRows, 'dd');
|
|
36
|
+
* batch.addInsertBulk(db.orderItemAttributes, attrRows, 'attrs');
|
|
37
|
+
* await batch.executeBatch(); // ONE round trip (no-op when all legs were empty)
|
|
38
|
+
* batch.getAffectedCount('items'); // rows the update leg matched
|
|
39
|
+
*/
|
|
40
|
+
class MutationBatch {
|
|
41
|
+
constructor() {
|
|
42
|
+
this.legs = [];
|
|
43
|
+
this.counts = null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register a bulk INSERT leg. Returns null (and registers nothing) for an
|
|
47
|
+
* empty row array or rows resolving to zero insertable columns.
|
|
48
|
+
*/
|
|
49
|
+
addInsertBulk(table, rows, id, options) {
|
|
50
|
+
if (rows.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
this.assertRegisterable(id);
|
|
54
|
+
MutationBatch.assertSingleStatementBudget(rows, id);
|
|
55
|
+
const built = table._buildInsertBulkStatement(rows, options?.overridingSystemValue, options?.onConflictDoNothing);
|
|
56
|
+
if (!built) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
this.legs.push({ id, sql: built.sql, params: built.params, client: table._getClient(), executor: table._getExecutor() });
|
|
60
|
+
return { id };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Register a bulk UPDATE leg (same per-row `"col__provided"` semantics as
|
|
64
|
+
* standalone bulkUpdate). Returns null for an empty row array.
|
|
65
|
+
*/
|
|
66
|
+
addBulkUpdate(table, rows, id, config) {
|
|
67
|
+
if (rows.length === 0) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
this.assertRegisterable(id);
|
|
71
|
+
MutationBatch.assertSingleStatementBudget(rows, id);
|
|
72
|
+
const primaryKeys = table._resolveBulkUpdatePrimaryKeys(rows, config);
|
|
73
|
+
const built = table._buildBulkUpdateStatement(rows, primaryKeys);
|
|
74
|
+
this.legs.push({ id, sql: built.sql, params: built.params, client: table._getClient(), executor: table._getExecutor() });
|
|
75
|
+
return { id };
|
|
76
|
+
}
|
|
77
|
+
/** Number of registered (non-empty) legs. */
|
|
78
|
+
get size() {
|
|
79
|
+
return this.legs.length;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Execute every registered leg as ONE statement and store the per-leg
|
|
83
|
+
* affected counts. A batch with zero legs resolves without touching the
|
|
84
|
+
* database. One-shot: a batch that already executed throws.
|
|
85
|
+
*/
|
|
86
|
+
async executeBatch() {
|
|
87
|
+
if (this.counts) {
|
|
88
|
+
throw new Error('MutationBatch has already been executed — create a new batch for further mutations');
|
|
89
|
+
}
|
|
90
|
+
if (this.legs.length === 0) {
|
|
91
|
+
this.counts = new Map();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const first = this.legs[0];
|
|
95
|
+
for (const leg of this.legs) {
|
|
96
|
+
if (leg.client !== first.client || leg.executor !== first.executor) {
|
|
97
|
+
throw new Error(`MutationBatch: leg "${leg.id}" uses a different database client or transaction than the rest of the batch — all legs must share one connection context`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const cteParts = [];
|
|
101
|
+
const selectParts = [];
|
|
102
|
+
const params = [];
|
|
103
|
+
this.legs.forEach((leg, ix) => {
|
|
104
|
+
const offset = params.length;
|
|
105
|
+
const legSql = offset === 0 ? leg.sql : (0, query_batch_1.renumberPlaceholders)(leg.sql, offset);
|
|
106
|
+
cteParts.push(`"__mb_${ix}" AS (\n${legSql}\nRETURNING 1\n)`);
|
|
107
|
+
selectParts.push(`(SELECT count(*)::int FROM "__mb_${ix}") AS "${ix}"`);
|
|
108
|
+
params.push(...leg.params);
|
|
109
|
+
});
|
|
110
|
+
const sql = `WITH ${cteParts.join(',\n')}\nSELECT ${selectParts.join(', ')}`;
|
|
111
|
+
const result = first.executor ? await first.executor.query(sql, params) : await first.client.query(sql, params);
|
|
112
|
+
const row = result.rows[0] ?? {};
|
|
113
|
+
const counts = new Map();
|
|
114
|
+
this.legs.forEach((leg, ix) => {
|
|
115
|
+
counts.set(leg.id, Number(row[String(ix)] ?? 0));
|
|
116
|
+
});
|
|
117
|
+
this.counts = counts;
|
|
118
|
+
}
|
|
119
|
+
/** Rows the leg inserted/matched. Only valid after executeBatch(). */
|
|
120
|
+
getAffectedCount(key) {
|
|
121
|
+
if (!this.counts) {
|
|
122
|
+
throw new Error('MutationBatch has not been executed yet — call executeBatch() before reading counts');
|
|
123
|
+
}
|
|
124
|
+
const id = typeof key === 'string' ? key : key.id;
|
|
125
|
+
const count = this.counts.get(id);
|
|
126
|
+
if (count === undefined) {
|
|
127
|
+
throw new Error(`MutationBatch: no leg registered under "${id}"`);
|
|
128
|
+
}
|
|
129
|
+
return count;
|
|
130
|
+
}
|
|
131
|
+
assertRegisterable(id) {
|
|
132
|
+
if (this.counts) {
|
|
133
|
+
throw new Error('MutationBatch has already been executed — create a new batch for further mutations');
|
|
134
|
+
}
|
|
135
|
+
if (this.legs.some(leg => leg.id === id)) {
|
|
136
|
+
throw new Error(`MutationBatch: duplicate leg identifier "${id}"`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* A leg must fit one statement — the same parameter-budget formula the
|
|
141
|
+
* standalone mutations use to CHUNK large inputs. A chunked mutation cannot
|
|
142
|
+
* ride a single-statement batch, so oversize inputs are rejected here.
|
|
143
|
+
*/
|
|
144
|
+
static assertSingleStatementBudget(rows, id) {
|
|
145
|
+
const columnCount = Math.max(1, Object.keys(rows[0]).length);
|
|
146
|
+
const maxRowsPerBatch = Math.floor(POSTGRES_MAX_PARAMS / columnCount);
|
|
147
|
+
const singleStatementLimit = Math.floor(maxRowsPerBatch * 0.6);
|
|
148
|
+
if (rows.length > singleStatementLimit) {
|
|
149
|
+
throw new Error(`MutationBatch: leg "${id}" carries ${rows.length} rows, above the ~${singleStatementLimit}-row single statement budget for ${columnCount} columns — execute this mutation standalone (it needs chunking)`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.MutationBatch = MutationBatch;
|
|
154
|
+
//# sourceMappingURL=mutation-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-batch.js","sourceRoot":"","sources":["../../src/query/mutation-batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,12 @@ export interface BatchItemSource<T> {
|
|
|
36
36
|
export interface BatchCountSource {
|
|
37
37
|
futureCount(): FutureCountQuery;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Quote-aware `$N` renumbering (string literals containing `$1` pass through
|
|
41
|
+
* verbatim) — moved to `sql-utils` so the entity layer can share it without a
|
|
42
|
+
* module cycle; re-exported here for existing importers.
|
|
43
|
+
*/
|
|
44
|
+
export { renumberPlaceholders } from './sql-utils';
|
|
39
45
|
/**
|
|
40
46
|
* Collects heterogeneous queries and executes them in a SINGLE database round
|
|
41
47
|
* trip as one UNION ALL statement of json envelopes:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-batch.d.ts","sourceRoot":"","sources":["../../src/query/query-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnG;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,oBAAoB,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,IAAI,gBAAgB,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"query-batch.d.ts","sourceRoot":"","sources":["../../src/query/query-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnG;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,oBAAoB,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,IAAI,gBAAgB,CAAC;CACjC;AAUD;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,OAAO,CAA6D;IAE5E;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAMlE;;;OAGG;IACH,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAM5E;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa;IAM5D;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA8EnC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;IACrC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE;IAKjC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAC1C,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAKtC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM;IAIjD,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,MAAM;CAkBf"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueryBatch = void 0;
|
|
3
|
+
exports.QueryBatch = exports.renumberPlaceholders = void 0;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* nonzero offset would corrupt dollar-digit sequences INSIDE string literals
|
|
9
|
-
* (`'price: $1'` → `'price: $8'`).
|
|
5
|
+
* Quote-aware `$N` renumbering (string literals containing `$1` pass through
|
|
6
|
+
* verbatim) — moved to `sql-utils` so the entity layer can share it without a
|
|
7
|
+
* module cycle; re-exported here for existing importers.
|
|
10
8
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
var sql_utils_1 = require("./sql-utils");
|
|
10
|
+
Object.defineProperty(exports, "renumberPlaceholders", { enumerable: true, get: function () { return sql_utils_1.renumberPlaceholders; } });
|
|
11
|
+
const sql_utils_2 = require("./sql-utils");
|
|
13
12
|
/**
|
|
14
13
|
* Collects heterogeneous queries and executes them in a SINGLE database round
|
|
15
14
|
* trip as one UNION ALL statement of json envelopes:
|
|
@@ -85,7 +84,7 @@ class QueryBatch {
|
|
|
85
84
|
const params = [];
|
|
86
85
|
this.entries.forEach((entry, ix) => {
|
|
87
86
|
const offset = params.length;
|
|
88
|
-
const branchSql = offset === 0 ? entry.future._sql : renumberPlaceholders(entry.future._sql, offset);
|
|
87
|
+
const branchSql = offset === 0 ? entry.future._sql : (0, sql_utils_2.renumberPlaceholders)(entry.future._sql, offset);
|
|
89
88
|
// Declared bigint/decimal/numeric columns are cast ::text server-side —
|
|
90
89
|
// JSON.parse would collapse their arbitrary-precision numerals to floats,
|
|
91
90
|
// and text IS the drivers' delivery form for these types. The jsonb
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-batch.js","sourceRoot":"","sources":["../../src/query/query-batch.ts"],"names":[],"mappings":";;;AAqDA
|
|
1
|
+
{"version":3,"file":"query-batch.js","sourceRoot":"","sources":["../../src/query/query-batch.ts"],"names":[],"mappings":";;;AAqDA;;;;GAIG;AACH,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA;AAC7B,2CAAmD;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAa,UAAU;IAAvB;QACmB,YAAO,GAAiB,EAAE,CAAC;QACpC,YAAO,GAAwD,IAAI,CAAC;IA8J9E,CAAC;IA5JC;;;OAGG;IACH,OAAO,CAAI,KAAyB,EAAE,EAAU;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAI,KAAyB,EAAE,EAAU;QACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAEzD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAuB,EAAE,EAAU;QAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAEhD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3E,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,CAAC,EAAE,8HAA8H,CAC7J,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,gCAAoB,EAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAErG,wEAAwE;YACxE,0EAA0E;YAC1E,oEAAoE;YACpE,wDAAwD;YACxD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC;YACzD,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;gBACnD,CAAC,CAAC,sBAAsB,WAAW;qBAC9B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,2BAA2B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;qBAC7H,IAAI,CAAC,EAAE,CAAC,EAAE;gBACf,CAAC,CAAC,wBAAwB,CAAC;YAE7B,QAAQ,CAAC,IAAI,CACX,UAAU,EAAE,qCAAqC,OAAO,2CAA2C,SAAS,eAAe,CAC5H,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9D,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2C,CAAC;QAEnE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACjC,MAAM,IAAI,GAAgC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YAClE,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;gBACxB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtC,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAG,KAAK,CAAC,MAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAI,KAAK,CAAC,MAAoD,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBACtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAID,OAAO,CAAC,OAAmC;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAID,OAAO,CAAC,OAAmC;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,OAA+B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAEO,QAAQ,CAAC,EAAU,EAAE,IAAe,EAAE,MAA4B;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEO,MAAM,CAAC,OAAgC,EAAE,QAAmB;QAClE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,uBAAuB,KAAK,CAAC,IAAI,SAAS,QAAQ,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;CACF;AAhKD,gCAgKC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-utils.d.ts","sourceRoot":"","sources":["../../src/query/sql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"sql-utils.d.ts","sourceRoot":"","sources":["../../src/query/sql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAY3D,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,MAGpE,CAAC;AAEJ;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;QAC9B,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;KACjC,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAIjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAIpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAKzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAI3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAS/D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAW3F;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,oBAAoB,GAAE,OAAe,GACpC,YAAY,EAAE,CAoBhB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAChC,MAAM,EAAE,WAAW,EACnB,oBAAoB,GAAE,OAAe,GACpC,MAAM,EAAE,CAoCV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAChC,aAAa,EAAE,YAAY,EAAE,EAC7B,eAAe,GAAE,MAAU,GAC1B,kBAAkB,CAuBpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAoCR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO7E"}
|
package/dist/query/sql-utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.POSTGRES_MAX_PARAMS = void 0;
|
|
3
|
+
exports.POSTGRES_MAX_PARAMS = exports.renumberPlaceholders = void 0;
|
|
4
4
|
exports.getQualifiedTableName = getQualifiedTableName;
|
|
5
5
|
exports.buildReturningColumnList = buildReturningColumnList;
|
|
6
6
|
exports.buildColumnNamesList = buildColumnNamesList;
|
|
@@ -15,6 +15,17 @@ exports.buildValuesClause = buildValuesClause;
|
|
|
15
15
|
exports.buildConflictClause = buildConflictClause;
|
|
16
16
|
exports.buildColumnNameMap = buildColumnNameMap;
|
|
17
17
|
exports.getDbColumnName = getDbColumnName;
|
|
18
|
+
/**
|
|
19
|
+
* Quoted SQL segments (single-quoted literals with '' escaping, double-quoted
|
|
20
|
+
* identifiers with "" escaping) pass through verbatim; only bare $N
|
|
21
|
+
* placeholders outside them are renumbered. Without this, a leg at a nonzero
|
|
22
|
+
* offset would corrupt dollar-digit sequences INSIDE string literals
|
|
23
|
+
* (`'price: $1'` → `'price: $8'`). Shared by QueryBatch, MutationBatch and
|
|
24
|
+
* insertWithChildren for cross-leg parameter renumbering.
|
|
25
|
+
*/
|
|
26
|
+
const QUOTED_OR_PLACEHOLDER = /('(?:[^']|'')*')|("(?:[^"]|"")*")|\$(\d+)/g;
|
|
27
|
+
const renumberPlaceholders = (sqlText, offset) => sqlText.replace(QUOTED_OR_PLACEHOLDER, (match, _single, _dbl, digits) => digits !== undefined ? `$${Number(digits) + offset}` : match);
|
|
28
|
+
exports.renumberPlaceholders = renumberPlaceholders;
|
|
18
29
|
/**
|
|
19
30
|
* Get qualified table name with schema prefix if specified
|
|
20
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-utils.js","sourceRoot":"","sources":["../../src/query/sql-utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sql-utils.js","sourceRoot":"","sources":["../../src/query/sql-utils.ts"],"names":[],"mappings":"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"}
|