litedbmodel 2.0.2 → 2.2.0
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/README.md +7 -0
- package/dist/DBConditions.d.ts.map +1 -1
- package/dist/DBConditions.js +16 -1
- package/dist/DBConditions.js.map +1 -1
- package/dist/DBHandler.d.ts.map +1 -1
- package/dist/DBHandler.js +6 -0
- package/dist/DBHandler.js.map +1 -1
- package/dist/DBModel.d.ts +84 -2
- package/dist/DBModel.d.ts.map +1 -1
- package/dist/DBModel.js +312 -29
- package/dist/DBModel.js.map +1 -1
- package/dist/decorators.d.ts +52 -0
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +127 -24
- package/dist/decorators.js.map +1 -1
- package/dist/drivers/mysql.d.ts.map +1 -1
- package/dist/drivers/mysql.js +12 -2
- package/dist/drivers/mysql.js.map +1 -1
- package/dist/drivers/postgres.d.ts.map +1 -1
- package/dist/drivers/postgres.js +13 -2
- package/dist/drivers/postgres.js.map +1 -1
- package/dist/drivers/sqlite.d.ts +2 -0
- package/dist/drivers/sqlite.d.ts.map +1 -1
- package/dist/drivers/sqlite.js +49 -4
- package/dist/drivers/sqlite.js.map +1 -1
- package/dist/index.cjs +10741 -0
- package/dist/index.d.cts +1 -0
- package/dist/scp/coltype.d.ts +108 -0
- package/dist/scp/coltype.d.ts.map +1 -1
- package/dist/scp/coltype.js +293 -6
- package/dist/scp/coltype.js.map +1 -1
- package/dist/scp/connection-routing.d.ts +312 -0
- package/dist/scp/connection-routing.d.ts.map +1 -0
- package/dist/scp/connection-routing.js +394 -0
- package/dist/scp/connection-routing.js.map +1 -0
- package/dist/scp/dbmodel-runtime.d.ts +101 -0
- package/dist/scp/dbmodel-runtime.d.ts.map +1 -0
- package/dist/scp/dbmodel-runtime.js +174 -0
- package/dist/scp/dbmodel-runtime.js.map +1 -0
- package/dist/scp/decorator-adapter.d.ts +196 -0
- package/dist/scp/decorator-adapter.d.ts.map +1 -0
- package/dist/scp/decorator-adapter.js +286 -0
- package/dist/scp/decorator-adapter.js.map +1 -0
- package/dist/scp/emit/emitter.d.ts +108 -0
- package/dist/scp/emit/emitter.d.ts.map +1 -0
- package/dist/scp/emit/emitter.js +782 -0
- package/dist/scp/emit/emitter.js.map +1 -0
- package/dist/scp/emit/endpoint.d.ts +248 -0
- package/dist/scp/emit/endpoint.d.ts.map +1 -0
- package/dist/scp/emit/endpoint.js +20 -0
- package/dist/scp/emit/endpoint.js.map +1 -0
- package/dist/scp/emit/index.d.ts +11 -0
- package/dist/scp/emit/index.d.ts.map +1 -0
- package/dist/scp/emit/index.js +13 -0
- package/dist/scp/emit/index.js.map +1 -0
- package/dist/scp/errors.d.ts +45 -1
- package/dist/scp/errors.d.ts.map +1 -1
- package/dist/scp/errors.js +47 -1
- package/dist/scp/errors.js.map +1 -1
- package/dist/scp/exec-context.d.ts +390 -0
- package/dist/scp/exec-context.d.ts.map +1 -0
- package/dist/scp/exec-context.js +540 -0
- package/dist/scp/exec-context.js.map +1 -0
- package/dist/scp/grouping.d.ts +32 -0
- package/dist/scp/grouping.d.ts.map +1 -0
- package/dist/scp/grouping.js +0 -0
- package/dist/scp/grouping.js.map +1 -0
- package/dist/scp/index.cjs +6432 -17579
- package/dist/scp/index.d.cts +1 -0
- package/dist/scp/index.d.mts +1 -0
- package/dist/scp/index.d.ts +51 -52
- package/dist/scp/index.d.ts.map +1 -1
- package/dist/scp/index.js +189 -152
- package/dist/scp/index.js.map +1 -1
- package/dist/scp/index.mjs +6067 -3659
- package/dist/scp/leaf-transport.d.ts +50 -0
- package/dist/scp/leaf-transport.d.ts.map +1 -0
- package/dist/scp/leaf-transport.js +92 -0
- package/dist/scp/leaf-transport.js.map +1 -0
- package/dist/scp/leaves.d.ts +174 -0
- package/dist/scp/leaves.d.ts.map +1 -0
- package/dist/scp/leaves.js +287 -0
- package/dist/scp/leaves.js.map +1 -0
- package/dist/scp/limit-config.d.ts +118 -0
- package/dist/scp/limit-config.d.ts.map +1 -0
- package/dist/scp/limit-config.js +126 -0
- package/dist/scp/limit-config.js.map +1 -0
- package/dist/scp/makesql/compile-relation.d.ts +49 -23
- package/dist/scp/makesql/compile-relation.d.ts.map +1 -1
- package/dist/scp/makesql/compile-relation.js +101 -76
- package/dist/scp/makesql/compile-relation.js.map +1 -1
- package/dist/scp/makesql/compile-select.d.ts +45 -10
- package/dist/scp/makesql/compile-select.d.ts.map +1 -1
- package/dist/scp/makesql/compile-select.js +50 -10
- package/dist/scp/makesql/compile-select.js.map +1 -1
- package/dist/scp/makesql/handler.d.ts +1 -1
- package/dist/scp/makesql/handler.d.ts.map +1 -1
- package/dist/scp/makesql/index.d.ts +7 -10
- package/dist/scp/makesql/index.d.ts.map +1 -1
- package/dist/scp/makesql/index.js +19 -30
- package/dist/scp/makesql/index.js.map +1 -1
- package/dist/scp/makesql/json-array.d.ts +65 -0
- package/dist/scp/makesql/json-array.d.ts.map +1 -1
- package/dist/scp/makesql/json-array.js +99 -10
- package/dist/scp/makesql/json-array.js.map +1 -1
- package/dist/scp/makesql/json-batch.d.ts.map +1 -1
- package/dist/scp/makesql/json-batch.js +21 -19
- package/dist/scp/makesql/json-batch.js.map +1 -1
- package/dist/scp/makesql/makesql.d.ts +1 -1
- package/dist/scp/makesql/makesql.d.ts.map +1 -1
- package/dist/scp/makesql/mysql-returning.d.ts +93 -0
- package/dist/scp/makesql/mysql-returning.d.ts.map +1 -0
- package/dist/scp/makesql/mysql-returning.js +215 -0
- package/dist/scp/makesql/mysql-returning.js.map +1 -0
- package/dist/scp/makesql/outtype.d.ts +75 -34
- package/dist/scp/makesql/outtype.d.ts.map +1 -1
- package/dist/scp/makesql/outtype.js +91 -118
- package/dist/scp/makesql/outtype.js.map +1 -1
- package/dist/scp/makesql/pool-executor.d.ts +135 -13
- package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
- package/dist/scp/makesql/pool-executor.js +229 -21
- package/dist/scp/makesql/pool-executor.js.map +1 -1
- package/dist/scp/makesql/tx.d.ts +107 -22
- package/dist/scp/makesql/tx.d.ts.map +1 -1
- package/dist/scp/makesql/tx.js +451 -97
- package/dist/scp/makesql/tx.js.map +1 -1
- package/dist/scp/makesql/writeouttype.d.ts +7 -8
- package/dist/scp/makesql/writeouttype.d.ts.map +1 -1
- package/dist/scp/makesql/writeouttype.js +8 -7
- package/dist/scp/makesql/writeouttype.js.map +1 -1
- package/dist/scp/middleware.d.ts +287 -0
- package/dist/scp/middleware.d.ts.map +1 -0
- package/dist/scp/middleware.js +358 -0
- package/dist/scp/middleware.js.map +1 -0
- package/dist/scp/relation.d.ts +80 -9
- package/dist/scp/relation.d.ts.map +1 -1
- package/dist/scp/relation.js +198 -78
- package/dist/scp/relation.js.map +1 -1
- package/dist/scp/tx-options.d.ts +136 -0
- package/dist/scp/tx-options.d.ts.map +1 -0
- package/dist/scp/tx-options.js +184 -0
- package/dist/scp/tx-options.js.map +1 -0
- package/dist/scp/write-bundle.d.ts +131 -0
- package/dist/scp/write-bundle.d.ts.map +1 -0
- package/dist/scp/write-bundle.js +160 -0
- package/dist/scp/write-bundle.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/BENCHMARK.md +58 -56
- package/docs/benchmark-chart.svg +166 -166
- package/docs/design/phase-a-execution-context.md +139 -0
- package/package.json +16 -9
- package/dist/scp/authoring-sql.d.ts +0 -134
- package/dist/scp/authoring-sql.d.ts.map +0 -1
- package/dist/scp/authoring-sql.js +0 -191
- package/dist/scp/authoring-sql.js.map +0 -1
- package/dist/scp/authoring.d.ts +0 -155
- package/dist/scp/authoring.d.ts.map +0 -1
- package/dist/scp/authoring.js +0 -162
- package/dist/scp/authoring.js.map +0 -1
- package/dist/scp/catalog.d.ts +0 -94
- package/dist/scp/catalog.d.ts.map +0 -1
- package/dist/scp/catalog.js +0 -234
- package/dist/scp/catalog.js.map +0 -1
- package/dist/scp/codegen.d.ts +0 -189
- package/dist/scp/codegen.d.ts.map +0 -1
- package/dist/scp/codegen.js +0 -421
- package/dist/scp/codegen.js.map +0 -1
- package/dist/scp/find-filter-guard.d.ts +0 -68
- package/dist/scp/find-filter-guard.d.ts.map +0 -1
- package/dist/scp/find-filter-guard.js +0 -88
- package/dist/scp/find-filter-guard.js.map +0 -1
- package/dist/scp/guard.d.ts +0 -43
- package/dist/scp/guard.d.ts.map +0 -1
- package/dist/scp/guard.js +0 -134
- package/dist/scp/guard.js.map +0 -1
- package/dist/scp/makesql/authoring-compile.d.ts +0 -90
- package/dist/scp/makesql/authoring-compile.d.ts.map +0 -1
- package/dist/scp/makesql/authoring-compile.js +0 -494
- package/dist/scp/makesql/authoring-compile.js.map +0 -1
- package/dist/scp/makesql/ir.d.ts +0 -42
- package/dist/scp/makesql/ir.d.ts.map +0 -1
- package/dist/scp/makesql/ir.js +0 -66
- package/dist/scp/makesql/ir.js.map +0 -1
- package/dist/scp/makesql/static-bundle.d.ts +0 -187
- package/dist/scp/makesql/static-bundle.d.ts.map +0 -1
- package/dist/scp/makesql/static-bundle.js +0 -1113
- package/dist/scp/makesql/static-bundle.js.map +0 -1
- package/dist/scp/runtime.d.ts +0 -242
- package/dist/scp/runtime.d.ts.map +0 -1
- package/dist/scp/runtime.js +0 -400
- package/dist/scp/runtime.js.map +0 -1
|
@@ -16,6 +16,12 @@
|
|
|
16
16
|
* MySQL/SQLite `SELECT … FROM t WHERE (k1, k2) IN ((?, ?), …)`
|
|
17
17
|
* composite-key, per-parent limit: PG LATERAL composite / others ROW_NUMBER composite.
|
|
18
18
|
*
|
|
19
|
+
* The STATIC composite forms ({@link compileCompositeKeyStaticUnlimited} /
|
|
20
|
+
* {@link compileCompositeKeyStaticLimited}) deviate from those v1 texts on EVERY dialect: they bind
|
|
21
|
+
* the key set as ONE array-of-tuples param (RESULT parity, not byte-identity) so a composite batch
|
|
22
|
+
* rides the same three-leaf transport as everything else. The v1 texts stay proven by the
|
|
23
|
+
* value-expanding builders below.
|
|
24
|
+
*
|
|
19
25
|
* The PG type text (`?::type[]`) comes from the ORIGINAL `inferPgArrayType` (sqlCast
|
|
20
26
|
* wins, else element-type inference). The .rs regressions are NOT reproduced: PG
|
|
21
27
|
* per-parent-limit is LATERAL (not ROW_NUMBER), and PG types are sqlCast-driven (not
|
|
@@ -26,6 +32,7 @@
|
|
|
26
32
|
*/
|
|
27
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
34
|
exports.PG_ARRAY_CAST_TOKEN = void 0;
|
|
35
|
+
exports.inferPgElementType = inferPgElementType;
|
|
29
36
|
exports.inferPgArrayType = inferPgArrayType;
|
|
30
37
|
exports.resolvePgArrayCast = resolvePgArrayCast;
|
|
31
38
|
exports.compileCompositeKeyStaticUnlimited = compileCompositeKeyStaticUnlimited;
|
|
@@ -35,30 +42,40 @@ exports.compileCompositeKeyUnlimited = compileCompositeKeyUnlimited;
|
|
|
35
42
|
exports.compileCompositeKeyLimited = compileCompositeKeyLimited;
|
|
36
43
|
exports.compileCompositeKeyStaticLimited = compileCompositeKeyStaticLimited;
|
|
37
44
|
const DBConditions_1 = require("../../DBConditions");
|
|
45
|
+
const json_array_1 = require("./json-array");
|
|
38
46
|
const compile_select_1 = require("./compile-select");
|
|
39
47
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
48
|
+
* The PG ELEMENT type of a value set — the ONE type inference every PG cast in this module is built
|
|
49
|
+
* on ({@link inferPgArrayType} appends `[]`; the composite key-row expansion casts each key column
|
|
50
|
+
* with it). Reproduces the ORIGINAL `LazyRelation.inferPgArrayType`'s element decision (the PG
|
|
51
|
+
* anchor — NOT the .rs coarse text-folding).
|
|
43
52
|
*/
|
|
44
|
-
function
|
|
45
|
-
if (sqlCast)
|
|
46
|
-
return `${sqlCast}[]`;
|
|
53
|
+
function inferPgElementType(values) {
|
|
47
54
|
if (values.length === 0)
|
|
48
|
-
return 'text
|
|
55
|
+
return 'text';
|
|
49
56
|
const sample = values[0];
|
|
50
57
|
if (typeof sample === 'number') {
|
|
51
58
|
if (values.every((v) => Number.isInteger(v)))
|
|
52
|
-
return 'int
|
|
53
|
-
return 'numeric
|
|
59
|
+
return 'int';
|
|
60
|
+
return 'numeric';
|
|
54
61
|
}
|
|
55
62
|
if (typeof sample === 'bigint')
|
|
56
|
-
return 'bigint
|
|
63
|
+
return 'bigint';
|
|
57
64
|
if (typeof sample === 'boolean')
|
|
58
|
-
return 'boolean
|
|
65
|
+
return 'boolean';
|
|
59
66
|
if (sample instanceof Date)
|
|
60
|
-
return 'timestamp
|
|
61
|
-
return 'text
|
|
67
|
+
return 'timestamp';
|
|
68
|
+
return 'text';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reproduce the ORIGINAL `LazyRelation.inferPgArrayType`: sqlCast wins (`<cast>[]`);
|
|
72
|
+
* otherwise infer the element type from the sample values. Byte-identical to the
|
|
73
|
+
* original (which is the PG anchor — NOT the .rs coarse text-folding).
|
|
74
|
+
*/
|
|
75
|
+
function inferPgArrayType(values, sqlCast) {
|
|
76
|
+
if (sqlCast)
|
|
77
|
+
return `${sqlCast}[]`;
|
|
78
|
+
return `${inferPgElementType(values)}[]`;
|
|
62
79
|
}
|
|
63
80
|
/**
|
|
64
81
|
* The DEFERRED PG array-cast token (#46): a placeholder emitted in the STATIC SQL text where
|
|
@@ -97,15 +114,50 @@ function pgArrayCastType(values, sqlCast, defer) {
|
|
|
97
114
|
return exports.PG_ARRAY_CAST_TOKEN;
|
|
98
115
|
return inferPgArrayType(values);
|
|
99
116
|
}
|
|
117
|
+
/** The alias the PG composite key rows carry (`_keys.key0`, `_keys.key1`, … — one per key column). */
|
|
118
|
+
const PG_KEYS_ALIAS = '_keys';
|
|
119
|
+
/**
|
|
120
|
+
* The compile-time stand-in for the ONE array-of-tuples key param: the STATIC composite text is
|
|
121
|
+
* value-length-independent, so a single one-cell tuple fixes the param ARITY (1) and nothing else.
|
|
122
|
+
* The real deduped key tuples are bound at execute time against the same text.
|
|
123
|
+
*/
|
|
124
|
+
const PLACEHOLDER_TUPLES = [[null]];
|
|
125
|
+
/**
|
|
126
|
+
* The PG composite key-set DERIVED TABLE: the ONE JSON array-of-tuples param (exactly what the
|
|
127
|
+
* `pluck` leaf yields, and exactly what MySQL/SQLite already bind) expanded SERVER-side into one
|
|
128
|
+
* typed row per key tuple — `key0 … keyN-1`, in `targetKeys` order.
|
|
129
|
+
*
|
|
130
|
+
* ONE `?`, fixed text, no per-column params: that is what lets a COMPOSITE relation ride the same
|
|
131
|
+
* three-leaf transport as every other statement (`pluck` → `executeSQL` → `group`) — the per-column
|
|
132
|
+
* `unnest(?::t1[], ?::t2[])` form needed a key-tuple TRANSPOSE that no composition of the three
|
|
133
|
+
* leaves can express (#159). `->>` yields text and the declared per-column cast normalizes it, so a
|
|
134
|
+
* key bound as a JSON number and one bound as a JSON string (a BIGINT read arrives as a string) both
|
|
135
|
+
* compare equal to the child column.
|
|
136
|
+
*
|
|
137
|
+
* The SINGLE spelling of the expansion — both static composite forms (unlimited JOIN + per-parent
|
|
138
|
+
* LATERAL) consume it, so their key rows cannot drift apart.
|
|
139
|
+
*/
|
|
140
|
+
function pgCompositeKeyRows(opts) {
|
|
141
|
+
const cols = opts.targetKeys.map((key, i) => {
|
|
142
|
+
const type = opts.pgKeyTypes?.[i];
|
|
143
|
+
if (type === undefined || type === '') {
|
|
144
|
+
throw new Error(`relation batch on postgres: the composite key column '${opts.tableName}.${key}' has no declared type — ` +
|
|
145
|
+
`the key rows must be cast to the child column's type (pass the model's ColumnTypeResolver to compileRelationOp)`);
|
|
146
|
+
}
|
|
147
|
+
return `(_t->>${i})::${type} AS key${i}`;
|
|
148
|
+
});
|
|
149
|
+
return `(SELECT ${cols.join(', ')} FROM json_array_elements(?::json) AS _t) AS ${PG_KEYS_ALIAS}`;
|
|
150
|
+
}
|
|
100
151
|
/**
|
|
101
152
|
* The STATIC composite-key batch forms (#47 item 1) — length-INDEPENDENT so the compiled `op.sql`
|
|
102
|
-
* is fixed (
|
|
103
|
-
*
|
|
104
|
-
* (`
|
|
105
|
-
*
|
|
106
|
-
* IN-list and the batch UPDATE composite already use —
|
|
107
|
-
*
|
|
108
|
-
* `(
|
|
153
|
+
* is fixed (ONE JSON array-of-tuples param on EVERY dialect), the SAME static-op property the
|
|
154
|
+
* single-key relation forms have. Every dialect now consumes the SAME single key param the relation
|
|
155
|
+
* key set is produced as (`pluck` — one array of key TUPLES): MySQL/SQLite expand it with
|
|
156
|
+
* `JSON_TABLE`/`json_each`, PostgreSQL with {@link pgCompositeKeyRows} (#159). This is the
|
|
157
|
+
* owner-approved deviation the single-key IN-list and the batch UPDATE composite already use —
|
|
158
|
+
* RESULT parity, NOT byte-identity with v1; the v1 literal `(k1,k2) IN ((?,?),…)` /
|
|
159
|
+
* `unnest(?::t1[], ?::t2[])` byte-forms stay proven by the goldens
|
|
160
|
+
* {@link compileCompositeKeyUnlimited} / {@link compileCompositeKeyLimited}.
|
|
109
161
|
*
|
|
110
162
|
* The JSON tuple param is `[[k1a,k2a],[k1b,k2b],…]` (positional element arrays), read back by
|
|
111
163
|
* ordinal path (`$[0]`, `$[1]`, …) so no per-column JSON key names are needed.
|
|
@@ -113,31 +165,22 @@ function pgArrayCastType(values, sqlCast, defer) {
|
|
|
113
165
|
function compileCompositeKeyStaticUnlimited(opts) {
|
|
114
166
|
const { tableName, targetKeys } = opts;
|
|
115
167
|
if (opts.dialect === 'postgres') {
|
|
116
|
-
// PG
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
.map((k) => `?::${pgArrayCastType([], opts.sqlCastMap?.get(k), opts.deferPgArrayCast)}`)
|
|
120
|
-
.join(', ');
|
|
121
|
-
const unnestAlias = `_unnest_${tableName}`;
|
|
122
|
-
const columnAliases = targetKeys.map((k) => `_unnest_${tableName}_${k}`).join(', ');
|
|
123
|
-
const joinConditions = targetKeys
|
|
124
|
-
.map((key) => `${tableName}.${key} = ${unnestAlias}._unnest_${tableName}_${key}`)
|
|
125
|
-
.join(' AND ');
|
|
126
|
-
const joinClause = `JOIN unnest(${unnestParams}) AS ${unnestAlias}(${columnAliases}) ON ${joinConditions}`;
|
|
127
|
-
// One placeholder array PER column fixes the arity of the JOIN params (each binds one array).
|
|
168
|
+
// PG: JOIN the child table to the typed key rows the ONE JSON tuple param expands to.
|
|
169
|
+
const joinConditions = targetKeys.map((key, i) => `${tableName}.${key} = ${PG_KEYS_ALIAS}.key${i}`).join(' AND ');
|
|
170
|
+
const joinClause = `JOIN ${pgCompositeKeyRows(opts)} ON ${joinConditions}`;
|
|
128
171
|
return (0, compile_select_1.compileSelect)({
|
|
129
172
|
dialect: opts.dialect,
|
|
130
173
|
tableName,
|
|
131
174
|
select: opts.select,
|
|
132
175
|
join: joinClause,
|
|
133
|
-
joinParams:
|
|
176
|
+
joinParams: [PLACEHOLDER_TUPLES],
|
|
134
177
|
conditions: opts.conditions,
|
|
135
178
|
order: opts.order,
|
|
136
179
|
});
|
|
137
180
|
}
|
|
138
181
|
// MySQL/SQLite: composite membership via ONE JSON array-of-tuples param, read by ORDINAL path.
|
|
139
182
|
const jsonSubquery = compositeJsonMembership(opts.dialect, tableName, targetKeys);
|
|
140
|
-
const conditions = { ...opts.conditions, __raw__: [jsonSubquery,
|
|
183
|
+
const conditions = { ...opts.conditions, __raw__: [jsonSubquery, PLACEHOLDER_TUPLES] };
|
|
141
184
|
return (0, compile_select_1.compileSelect)({
|
|
142
185
|
dialect: opts.dialect,
|
|
143
186
|
tableName,
|
|
@@ -147,25 +190,12 @@ function compileCompositeKeyStaticUnlimited(opts) {
|
|
|
147
190
|
});
|
|
148
191
|
}
|
|
149
192
|
/**
|
|
150
|
-
* The MySQL/SQLite composite-membership predicate over ONE JSON array-of-tuples param
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
* would (the single-key rationale). SQLite: `EXISTS (SELECT 1 FROM json_each(?) je WHERE
|
|
154
|
-
* json_extract(je.value,'$[0]') = t.k1 AND …)` — the composite json_each form the batch UPDATE uses.
|
|
193
|
+
* The MySQL/SQLite composite-membership predicate over ONE JSON array-of-tuples param — the SAME text
|
|
194
|
+
* a declared composite `tupleIn` WHERE emits, so it lives with the other static membership predicates
|
|
195
|
+
* ({@link import('./json-array').tupleInPredicate}) and is consumed here, never re-spelled.
|
|
155
196
|
*/
|
|
156
197
|
function compositeJsonMembership(dialect, tableName, targetKeys) {
|
|
157
|
-
|
|
158
|
-
const cols = targetKeys.map((_, i) => `c${i}`);
|
|
159
|
-
const jtCols = cols.map((c, i) => `${c} JSON PATH '$[${i}]'`).join(', ');
|
|
160
|
-
const selectCols = cols.map((c) => `JSON_UNQUOTE(${c})`).join(', ');
|
|
161
|
-
const keyTuple = targetKeys.map((k) => `${tableName}.${k}`).join(', ');
|
|
162
|
-
return `(${keyTuple}) IN (SELECT ${selectCols} FROM JSON_TABLE(?, '$[*]' COLUMNS(${jtCols})) jt)`;
|
|
163
|
-
}
|
|
164
|
-
// SQLite: EXISTS over json_each, matching every key column by ordinal element.
|
|
165
|
-
const match = targetKeys
|
|
166
|
-
.map((k, i) => `json_extract(je.value, '$[${i}]') = ${tableName}.${k}`)
|
|
167
|
-
.join(' AND ');
|
|
168
|
-
return `EXISTS (SELECT 1 FROM json_each(?) je WHERE ${match})`;
|
|
198
|
+
return (0, json_array_1.tupleInPredicate)(dialect, tableName, targetKeys);
|
|
169
199
|
}
|
|
170
200
|
// ============================================================================
|
|
171
201
|
// Single-key, unlimited.
|
|
@@ -357,36 +387,32 @@ function compileCompositeKeyLimited(opts) {
|
|
|
357
387
|
/**
|
|
358
388
|
* The STATIC composite-key per-parent-LIMIT batch form (#47 last completeness gap) — the
|
|
359
389
|
* length-INDEPENDENT sibling of {@link compileCompositeKeyLimited}, so the compiled `op.sql` is
|
|
360
|
-
* FIXED (
|
|
361
|
-
*
|
|
362
|
-
*
|
|
390
|
+
* FIXED (ONE JSON array-of-tuples param on every dialect) and can be a STATIC bundle op — exactly
|
|
391
|
+
* the property {@link compileSingleKeyLimited} and {@link compileCompositeKeyStaticUnlimited}
|
|
392
|
+
* already have.
|
|
363
393
|
*
|
|
364
|
-
* The per-parent window is IDENTICAL to the single-key-limited path:
|
|
365
|
-
* - **PG**: `CROSS JOIN LATERAL` over
|
|
366
|
-
* `batchLoadWithLateralComposite`
|
|
367
|
-
*
|
|
368
|
-
*
|
|
394
|
+
* The per-parent window is IDENTICAL to the single-key-limited path, over the SAME single key param:
|
|
395
|
+
* - **PG**: `CROSS JOIN LATERAL` over the typed key rows of {@link pgCompositeKeyRows} — v1's
|
|
396
|
+
* `batchLoadWithLateralComposite` window verbatim, with its per-column `unnest(?::t1[], ?::t2[])`
|
|
397
|
+
* key source replaced by the single-JSON-tuple expansion (#159), so the key set binds as the ONE
|
|
398
|
+
* array `pluck` yields.
|
|
369
399
|
* - **MySQL/SQLite**: the SAME `ROW_NUMBER() OVER (PARTITION BY <keys> ORDER BY <order>)` CTE +
|
|
370
400
|
* `_rn <= limit` filter v1's `batchLoadWithRowNumberComposite` emits — but the CTE membership
|
|
371
401
|
* WHERE is the STATIC JSON-tuple predicate ({@link compositeJsonMembership}) instead of v1's
|
|
372
|
-
* value-dependent `(k1,k2) IN ((?,?),…)`.
|
|
373
|
-
*
|
|
374
|
-
*
|
|
375
|
-
*
|
|
376
|
-
*
|
|
377
|
-
*
|
|
402
|
+
* value-dependent `(k1,k2) IN ((?,?),…)`.
|
|
403
|
+
*
|
|
404
|
+
* Both are the owner-sanctioned static deviation the composite UNLIMITED form
|
|
405
|
+
* ({@link compileCompositeKeyStaticUnlimited}) and the single-key IN-list already use: the key rows
|
|
406
|
+
* select the SAME child rows the value-expanded form would and the window partitions/orders
|
|
407
|
+
* identically, so it is RESULT-parity to v1 (proven live). The v1 byte-forms stay proven by the
|
|
408
|
+
* golden {@link compileCompositeKeyLimited}.
|
|
378
409
|
*/
|
|
379
410
|
function compileCompositeKeyStaticLimited(opts) {
|
|
380
411
|
const { tableName, targetKeys, limit } = opts;
|
|
381
412
|
if (opts.dialect === 'postgres') {
|
|
382
|
-
// PG LATERAL composite — ONE
|
|
383
|
-
// (#46): each element type resolved at render from that column's real key array.
|
|
384
|
-
const unnestParams = targetKeys
|
|
385
|
-
.map((k) => `?::${pgArrayCastType([], opts.sqlCastMap?.get(k), opts.deferPgArrayCast)}`)
|
|
386
|
-
.join(', ');
|
|
387
|
-
const keyAliases = targetKeys.map((_, i) => `key${i}`).join(', ');
|
|
413
|
+
// PG LATERAL composite — the per-parent window over the ONE JSON tuple param's typed key rows.
|
|
388
414
|
const keyConditions = targetKeys
|
|
389
|
-
.map((key, i) => `${tableName}.${key} =
|
|
415
|
+
.map((key, i) => `${tableName}.${key} = ${PG_KEYS_ALIAS}.key${i}`)
|
|
390
416
|
.join(' AND ');
|
|
391
417
|
const lateralConditions = { __raw__: keyConditions, ...opts.conditions };
|
|
392
418
|
const inner = (0, compile_select_1.compileSelect)({
|
|
@@ -396,17 +422,16 @@ function compileCompositeKeyStaticLimited(opts) {
|
|
|
396
422
|
order: opts.order,
|
|
397
423
|
limit,
|
|
398
424
|
});
|
|
399
|
-
const sql = `SELECT ${tableName}.* FROM
|
|
425
|
+
const sql = `SELECT ${tableName}.* FROM ${pgCompositeKeyRows(opts)} ` +
|
|
400
426
|
`CROSS JOIN LATERAL (${inner.sql}) ${tableName}`;
|
|
401
|
-
|
|
402
|
-
return { sql, params: [...targetKeys.map(() => [null]), ...inner.params] };
|
|
427
|
+
return { sql, params: [PLACEHOLDER_TUPLES, ...inner.params] };
|
|
403
428
|
}
|
|
404
429
|
// MySQL/SQLite: the SAME ROW_NUMBER composite CTE + `_rn <= limit` as v1, but with the STATIC
|
|
405
430
|
// JSON-membership WHERE (one JSON array-of-tuples param) in place of v1's `(k1,k2) IN ((?,?),…)`.
|
|
406
431
|
const orderBy = opts.order || targetKeys.join(', ');
|
|
407
432
|
const partitionBy = targetKeys.join(', ');
|
|
408
433
|
const jsonSubquery = compositeJsonMembership(opts.dialect, tableName, targetKeys);
|
|
409
|
-
const cteConditions = { __raw__: [jsonSubquery,
|
|
434
|
+
const cteConditions = { __raw__: [jsonSubquery, PLACEHOLDER_TUPLES], ...opts.conditions };
|
|
410
435
|
const cte = (0, compile_select_1.compileSelect)({
|
|
411
436
|
dialect: opts.dialect,
|
|
412
437
|
tableName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-relation.js","sourceRoot":"","sources":["../../../src/scp/makesql/compile-relation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compile-relation.js","sourceRoot":"","sources":["../../../src/scp/makesql/compile-relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,21 +3,57 @@
|
|
|
3
3
|
* `DBModel._buildSelectSQL` text byte-for-byte (the internal builder `find()` uses):
|
|
4
4
|
*
|
|
5
5
|
* [WITH <cte> AS (…) ]SELECT <cols> FROM <t>[ <join>][ WHERE <cond>]
|
|
6
|
-
* [ GROUP BY <group>][ ORDER BY <order>][ LIMIT <n>][ OFFSET <n>][
|
|
6
|
+
* [ GROUP BY <group>][ ORDER BY <order>][ LIMIT <n>][ OFFSET <n>][ <row lock>][ <append>]
|
|
7
7
|
*
|
|
8
|
-
* LIMIT/OFFSET
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* A STATIC LIMIT/OFFSET is an INLINE literal (`LIMIT 10`), NOT a parameter — the original
|
|
9
|
+
* inlines it (`sql += \` LIMIT ${options.limit}\``); reproduced here byte-for-byte. A page
|
|
10
|
+
* whose POSITION is a runtime value binds instead ({@link BoundCount} → `LIMIT ?`), which is
|
|
11
|
+
* the same `{sql, params}` bundle with one more `?`. The row-lock tail ({@link lockTail} —
|
|
12
|
+
* ` FOR UPDATE` / ` FOR SHARE`), GROUP BY and the raw `append` tail are the original's exact
|
|
13
|
+
* text. HAVING is carried through `append` (v1 core has no dedicated HAVING; the .rs-only
|
|
14
|
+
* HAVING is not the PG anchor).
|
|
12
15
|
*
|
|
13
|
-
* Param order matches the original exactly: CTE params → JOIN params → WHERE params
|
|
16
|
+
* Param order matches the original exactly: CTE params → JOIN params → WHERE params, then
|
|
17
|
+
* the tail's own bound counts (LIMIT then OFFSET) — the order their `?`s occupy in the text.
|
|
14
18
|
*/
|
|
15
19
|
import type { ConditionObject } from '../../DBConditions';
|
|
16
20
|
import type { OrderSpec } from '../../Column';
|
|
17
21
|
import type { MakeSQL } from './makesql';
|
|
18
22
|
import type { Dialect } from './handler';
|
|
23
|
+
/**
|
|
24
|
+
* A LIMIT / OFFSET count BOUND as a parameter (` LIMIT ?`) instead of inlined (` LIMIT 10`).
|
|
25
|
+
*
|
|
26
|
+
* `bind` is the value that fills the placeholder — it joins the bundle's own `params` list at the
|
|
27
|
+
* slot its `?` occupies, exactly like every WHERE value, so the tail needs no vocabulary of its own.
|
|
28
|
+
* A caller that has no VALUE yet (the emitter, which binds a method PARAMETER) passes its parameter
|
|
29
|
+
* sentinel here and reads it back out of `params`.
|
|
30
|
+
*/
|
|
31
|
+
export interface BoundCount {
|
|
32
|
+
bind: unknown;
|
|
33
|
+
}
|
|
34
|
+
/** The row-lock request a SELECT carries: an EXCLUSIVE (`FOR UPDATE`) or a SHARED (`FOR SHARE`) lock. */
|
|
35
|
+
export interface RowLockOptions {
|
|
36
|
+
/** Lock the selected rows EXCLUSIVELY — no other tx may read-for-update or write them. */
|
|
37
|
+
forUpdate?: boolean;
|
|
38
|
+
/** Lock the selected rows for SHARE — concurrent readers may share the lock, writers block. */
|
|
39
|
+
forShare?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The row-lock tail (` FOR UPDATE` / ` FOR SHARE`, or `''`) — the SINGLE aggregation point both the
|
|
43
|
+
* v1 imperative builder (`DBModel._buildSelectSQL`) and {@link compileSelect} render their locking
|
|
44
|
+
* clause from, so the two texts cannot drift.
|
|
45
|
+
*
|
|
46
|
+
* The two modes are MUTUALLY EXCLUSIVE: SQL has no "lock the same rows both exclusively and shared"
|
|
47
|
+
* form, so requesting both is a hard error rather than a silent precedence (fail-closed — a caller
|
|
48
|
+
* that asked for a share lock must never silently get an exclusive one, or vice versa).
|
|
49
|
+
*
|
|
50
|
+
* SQLite parses NEITHER clause (they are the PG / MySQL locking clauses; SQLite serializes writers
|
|
51
|
+
* at the connection level instead), so a locking read is a PG / MySQL feature — the same split the
|
|
52
|
+
* ` FOR UPDATE` tail has always had, and the reason the SQLite conformance twin omits it.
|
|
53
|
+
*/
|
|
54
|
+
export declare function lockTail(opts: RowLockOptions): string;
|
|
19
55
|
/** SELECT descriptor — mirrors the fields `_buildSelectSQL` reads from `SelectOptions`. */
|
|
20
|
-
export interface SelectDesc {
|
|
56
|
+
export interface SelectDesc extends RowLockOptions {
|
|
21
57
|
dialect: Dialect;
|
|
22
58
|
tableName: string;
|
|
23
59
|
/** SELECT column list (an explicit `options.select`). Empty/absent → falls back to {@link selectColumn}. */
|
|
@@ -39,9 +75,8 @@ export interface SelectDesc {
|
|
|
39
75
|
};
|
|
40
76
|
group?: string;
|
|
41
77
|
order?: OrderSpec | string;
|
|
42
|
-
limit?: number;
|
|
43
|
-
offset?: number;
|
|
44
|
-
forUpdate?: boolean;
|
|
78
|
+
limit?: number | BoundCount;
|
|
79
|
+
offset?: number | BoundCount;
|
|
45
80
|
append?: string;
|
|
46
81
|
}
|
|
47
82
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-select.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/compile-select.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"compile-select.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/compile-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;CACf;AAOD,yGAAyG;AACzG,MAAM,WAAW,cAAc;IAC7B,0FAA0F;IAC1F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAUrD;AAED,2FAA2F;AAC3F,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,4GAA4G;IAC5G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAoCvD"}
|
|
@@ -4,20 +4,53 @@
|
|
|
4
4
|
* `DBModel._buildSelectSQL` text byte-for-byte (the internal builder `find()` uses):
|
|
5
5
|
*
|
|
6
6
|
* [WITH <cte> AS (…) ]SELECT <cols> FROM <t>[ <join>][ WHERE <cond>]
|
|
7
|
-
* [ GROUP BY <group>][ ORDER BY <order>][ LIMIT <n>][ OFFSET <n>][
|
|
7
|
+
* [ GROUP BY <group>][ ORDER BY <order>][ LIMIT <n>][ OFFSET <n>][ <row lock>][ <append>]
|
|
8
8
|
*
|
|
9
|
-
* LIMIT/OFFSET
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* A STATIC LIMIT/OFFSET is an INLINE literal (`LIMIT 10`), NOT a parameter — the original
|
|
10
|
+
* inlines it (`sql += \` LIMIT ${options.limit}\``); reproduced here byte-for-byte. A page
|
|
11
|
+
* whose POSITION is a runtime value binds instead ({@link BoundCount} → `LIMIT ?`), which is
|
|
12
|
+
* the same `{sql, params}` bundle with one more `?`. The row-lock tail ({@link lockTail} —
|
|
13
|
+
* ` FOR UPDATE` / ` FOR SHARE`), GROUP BY and the raw `append` tail are the original's exact
|
|
14
|
+
* text. HAVING is carried through `append` (v1 core has no dedicated HAVING; the .rs-only
|
|
15
|
+
* HAVING is not the PG anchor).
|
|
13
16
|
*
|
|
14
|
-
* Param order matches the original exactly: CTE params → JOIN params → WHERE params
|
|
17
|
+
* Param order matches the original exactly: CTE params → JOIN params → WHERE params, then
|
|
18
|
+
* the tail's own bound counts (LIMIT then OFFSET) — the order their `?`s occupy in the text.
|
|
15
19
|
*/
|
|
16
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.lockTail = lockTail;
|
|
17
22
|
exports.compileSelect = compileSelect;
|
|
18
23
|
const Column_1 = require("../../Column");
|
|
19
24
|
const compile_1 = require("./compile");
|
|
20
25
|
const json_array_1 = require("./json-array");
|
|
26
|
+
/** Structural guard: a bound count is the `{bind}` wrapper; a static one is a plain number. */
|
|
27
|
+
function isBoundCount(c) {
|
|
28
|
+
return typeof c === 'object' && c !== null && 'bind' in c;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The row-lock tail (` FOR UPDATE` / ` FOR SHARE`, or `''`) — the SINGLE aggregation point both the
|
|
32
|
+
* v1 imperative builder (`DBModel._buildSelectSQL`) and {@link compileSelect} render their locking
|
|
33
|
+
* clause from, so the two texts cannot drift.
|
|
34
|
+
*
|
|
35
|
+
* The two modes are MUTUALLY EXCLUSIVE: SQL has no "lock the same rows both exclusively and shared"
|
|
36
|
+
* form, so requesting both is a hard error rather than a silent precedence (fail-closed — a caller
|
|
37
|
+
* that asked for a share lock must never silently get an exclusive one, or vice versa).
|
|
38
|
+
*
|
|
39
|
+
* SQLite parses NEITHER clause (they are the PG / MySQL locking clauses; SQLite serializes writers
|
|
40
|
+
* at the connection level instead), so a locking read is a PG / MySQL feature — the same split the
|
|
41
|
+
* ` FOR UPDATE` tail has always had, and the reason the SQLite conformance twin omits it.
|
|
42
|
+
*/
|
|
43
|
+
function lockTail(opts) {
|
|
44
|
+
if (opts.forUpdate && opts.forShare) {
|
|
45
|
+
throw new Error(`scp select: 'forUpdate' and 'forShare' are mutually exclusive row locks — a SELECT locks its ` +
|
|
46
|
+
`rows either EXCLUSIVELY (FOR UPDATE) or SHARED (FOR SHARE), never both. Pick one.`);
|
|
47
|
+
}
|
|
48
|
+
if (opts.forUpdate)
|
|
49
|
+
return ' FOR UPDATE';
|
|
50
|
+
if (opts.forShare)
|
|
51
|
+
return ' FOR SHARE';
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
21
54
|
/**
|
|
22
55
|
* Compile a SELECT to a `makeSQL` bundle, byte-identical to `_buildSelectSQL`.
|
|
23
56
|
* Empty WHERE ⇒ no ` WHERE` (matches the original's `if (whereClause)` guard).
|
|
@@ -45,12 +78,19 @@ function compileSelect(desc) {
|
|
|
45
78
|
const orderClause = typeof desc.order === 'string' ? desc.order : (0, Column_1.orderToString)(desc.order);
|
|
46
79
|
if (orderClause)
|
|
47
80
|
sql += ` ORDER BY ${orderClause}`;
|
|
81
|
+
// The page tail: a static count is the original's inline literal; a bound one emits `?` and joins
|
|
82
|
+
// the value list HERE, after the WHERE params — the order the `?`s occupy in the finished text.
|
|
83
|
+
const count = (c) => {
|
|
84
|
+
if (!isBoundCount(c))
|
|
85
|
+
return String(c);
|
|
86
|
+
params.push(c.bind);
|
|
87
|
+
return '?';
|
|
88
|
+
};
|
|
48
89
|
if (desc.limit !== undefined)
|
|
49
|
-
sql += ` LIMIT ${desc.limit}`;
|
|
90
|
+
sql += ` LIMIT ${count(desc.limit)}`;
|
|
50
91
|
if (desc.offset !== undefined)
|
|
51
|
-
sql += ` OFFSET ${desc.offset}`;
|
|
52
|
-
|
|
53
|
-
sql += ' FOR UPDATE';
|
|
92
|
+
sql += ` OFFSET ${count(desc.offset)}`;
|
|
93
|
+
sql += lockTail(desc);
|
|
54
94
|
if (desc.append)
|
|
55
95
|
sql += ` ${desc.append}`;
|
|
56
96
|
return { sql, params };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-select.js","sourceRoot":"","sources":["../../../src/scp/makesql/compile-select.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"compile-select.js","sourceRoot":"","sources":["../../../src/scp/makesql/compile-select.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* bc supplies composition / value-eval / envelope / plan; litedbmodel supplies only
|
|
12
12
|
* this handler + the compile that emits the SQL text.
|
|
13
13
|
*/
|
|
14
|
-
import type { Handler, HandlerCtx, Value } from 'behavior-contracts';
|
|
14
|
+
import type { Handler, HandlerCtx, Value } from 'behavior-contracts/runtime';
|
|
15
15
|
import { type AssembledSql } from './makesql';
|
|
16
16
|
/** A driver seam: run an already-rendered `{ sql, params }` and return result rows. */
|
|
17
17
|
export type SqlExecutor = (sql: string, params: unknown[]) => Promise<Record<string, unknown>[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE7E,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;AACjG,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAE5F,iFAAiF;AACjF,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAoBxE;AAgBD,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,CAIxF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,IAClD,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UAAU;QACH,KAAK;GAK/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAOnF"}
|
|
@@ -19,15 +19,12 @@ export { builderFor, compileInsert, compileInsertMany, compileUpdateMany, compil
|
|
|
19
19
|
export type { InsertManyBuildOptions } from './compile-crud';
|
|
20
20
|
export { inferPgArrayType, resolvePgArrayCast, PG_ARRAY_CAST_TOKEN, compileSingleKeyUnlimited, compileSingleKeyLimited, compileCompositeKeyUnlimited, compileCompositeKeyStaticUnlimited, compileCompositeKeyLimited, compileCompositeKeyStaticLimited, } from './compile-relation';
|
|
21
21
|
export type { RelationCompileBase } from './compile-relation';
|
|
22
|
-
export { inListJson, JsonArrayConditions, conditionsFor } from './json-array';
|
|
22
|
+
export { inListJson, inListPredicate, encodeJsonArrayParam, JsonArrayConditions, conditionsFor } from './json-array';
|
|
23
23
|
export { mysqlInsertJson, sqliteInsertJson, mysqlUpdateManyJson, sqliteUpdateManyJson, mysqlJsonTableColumn, rowsHaveDbToken, } from './json-batch';
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export type {
|
|
27
|
-
export {
|
|
28
|
-
export
|
|
29
|
-
export {
|
|
30
|
-
export type { StaticBundle, StaticStatement, ValueSpec, ReadGraph, SqlExecutorAsync } from './static-bundle';
|
|
31
|
-
export { pgPoolExecutor, mysqlPoolExecutor } from './pool-executor';
|
|
32
|
-
export type { PgPoolLike, MysqlPoolLike } from './pool-executor';
|
|
24
|
+
export { deriveTransactionPlan, deriveBatchPlan, literalize, executeTransaction, executeTransactionAsync, countingDriver, renderTxStatement, compileWriteNode, pgTypeSpecimen, IN_SENTINEL, } from './tx';
|
|
25
|
+
export { mysqlPkHint, stripMysqlPkHint, buildMysqlReselect, bindReselect } from './mysql-returning';
|
|
26
|
+
export type { MysqlReselect, ReselectBind } from './mysql-returning';
|
|
27
|
+
export type { TxExpr, TxOp, StatementRole, GateRule, TxStatement, IdempotentHitPolicy, TransactionPlan, BaseWrite, SqliteDb, ShortCircuitReason, TransactionResult, WriteExecOptions, } from './tx';
|
|
28
|
+
export { configurePgDeboxTypeParsers, mysqlDeboxPoolOptions, pgConnectionPool, mysqlConnectionPool, pgPoolFactory, mysqlPoolFactory } from './pool-executor';
|
|
29
|
+
export type { PgPoolLike, MysqlPoolLike, PgTypesLike, PgModuleLike, Mysql2ModuleLike, PgOwnedPoolLike, PgPoolClientLike, MysqlOwnedPoolLike, MysqlPoolConnLike, PgOwnedPoolWithEnd, MysqlOwnedPoolWithEnd, PgFactoryModuleLike } from './pool-executor';
|
|
33
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,SAAS,EACT,eAAe,EACf,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGvE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scp/makesql/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,SAAS,EACT,eAAe,EACf,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGvE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,MAAM,CAAC;AAId,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpG,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,YAAY,EACV,MAAM,EACN,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAId,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7J,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|