@prisma-next/sql-relational-core 0.16.0-dev.3 → 0.16.0-dev.31
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/{codec-types-C8vFGWij.d.mts → codec-types-Bayoa4PI.d.mts} +3 -2
- package/dist/codec-types-Bayoa4PI.d.mts.map +1 -0
- package/dist/{ddl-types-DzaZCtFT.d.mts → ddl-types-B3SfjPGI.d.mts} +3 -3
- package/dist/ddl-types-B3SfjPGI.d.mts.map +1 -0
- package/dist/{ddl-types-DFKQr_qQ.mjs → ddl-types-BUoa33yk.mjs} +3 -2
- package/dist/ddl-types-BUoa33yk.mjs.map +1 -0
- package/dist/exports/ast.d.mts +4 -4
- package/dist/exports/ast.d.mts.map +1 -1
- package/dist/exports/ast.mjs +82 -8
- package/dist/exports/ast.mjs.map +1 -1
- package/dist/exports/codec-descriptor-registry.d.mts +2 -2
- package/dist/exports/codec-descriptor-registry.d.mts.map +1 -1
- package/dist/exports/codec-descriptor-registry.mjs +2 -1
- package/dist/exports/codec-descriptor-registry.mjs.map +1 -1
- package/dist/exports/contract-free.d.mts +3 -3
- package/dist/exports/contract-free.d.mts.map +1 -1
- package/dist/exports/contract-free.mjs +4 -3
- package/dist/exports/contract-free.mjs.map +1 -1
- package/dist/exports/expression.d.mts +2 -2
- package/dist/exports/expression.mjs +1 -1
- package/dist/exports/middleware.d.mts +1 -1
- package/dist/exports/plan.d.mts +2 -2
- package/dist/exports/query-lane-context.d.mts +1 -1
- package/dist/exports/types.d.mts +1 -1
- package/dist/index.d.mts +9 -9
- package/dist/index.mjs +4 -4
- package/dist/{middleware-CFDg6XOc.d.mts → middleware-_9-4TYKC.d.mts} +2 -2
- package/dist/{middleware-CFDg6XOc.d.mts.map → middleware-_9-4TYKC.d.mts.map} +1 -1
- package/dist/{plan-CBT55zev.d.mts → plan-Dq94efZJ.d.mts} +2 -2
- package/dist/{plan-CBT55zev.d.mts.map → plan-Dq94efZJ.d.mts.map} +1 -1
- package/dist/{query-lane-context-BNbbusGn.d.mts → query-lane-context-DTCOHMXn.d.mts} +2 -2
- package/dist/{query-lane-context-BNbbusGn.d.mts.map → query-lane-context-DTCOHMXn.d.mts.map} +1 -1
- package/dist/{sql-execution-plan-CPw3uKrJ.d.mts → sql-execution-plan-B-C-6cZN.d.mts} +2 -2
- package/dist/{sql-execution-plan-CPw3uKrJ.d.mts.map → sql-execution-plan-B-C-6cZN.d.mts.map} +1 -1
- package/dist/{types-DtzFztRV.mjs → types-CINOak-F.mjs} +164 -27
- package/dist/types-CINOak-F.mjs.map +1 -0
- package/dist/{types-BR266jxM.d.mts → types-CRV7uuOC.d.mts} +5 -5
- package/dist/{types-BR266jxM.d.mts.map → types-CRV7uuOC.d.mts.map} +1 -1
- package/dist/{types-Dr3jep6j.d.mts → types-CWlaErjN.d.mts} +97 -13
- package/dist/types-CWlaErjN.d.mts.map +1 -0
- package/package.json +11 -11
- package/src/ast/codec-types.ts +37 -0
- package/src/ast/ddl-types.ts +2 -1
- package/src/ast/json-value-projection.ts +100 -0
- package/src/ast/sql-codec-helpers.ts +20 -5
- package/src/ast/types.ts +235 -52
- package/src/codec-descriptor-registry.ts +4 -1
- package/src/contract-free/table.ts +5 -1
- package/src/exports/ast.ts +1 -0
- package/dist/codec-types-C8vFGWij.d.mts.map +0 -1
- package/dist/ddl-types-DFKQr_qQ.mjs.map +0 -1
- package/dist/ddl-types-DzaZCtFT.d.mts.map +0 -1
- package/dist/types-Dr3jep6j.d.mts.map +0 -1
- package/dist/types-DtzFztRV.mjs.map +0 -1
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
2
|
+
import { structuredError } from "@prisma-next/utils/structured-error";
|
|
3
|
+
import { InternalError } from "@prisma-next/utils/internal-error";
|
|
4
|
+
//#region src/ast/codec-types.ts
|
|
5
|
+
function isJsonArray(value) {
|
|
6
|
+
return Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function freezeJsonValue(value) {
|
|
9
|
+
if (value === null || typeof value !== "object") return;
|
|
10
|
+
if (isJsonArray(value)) for (const item of value) freezeJsonValue(item);
|
|
11
|
+
else for (const item of Object.values(value)) freezeJsonValue(item);
|
|
12
|
+
Object.freeze(value);
|
|
13
|
+
}
|
|
14
|
+
function frozenCodecRef(codec) {
|
|
15
|
+
const typeParams = codec.typeParams === void 0 ? void 0 : structuredClone(codec.typeParams);
|
|
16
|
+
if (typeParams !== void 0) freezeJsonValue(typeParams);
|
|
17
|
+
return Object.freeze({
|
|
18
|
+
codecId: codec.codecId,
|
|
19
|
+
...ifDefined("typeParams", typeParams),
|
|
20
|
+
...ifDefined("many", codec.many)
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
2
24
|
//#region src/ast/types.ts
|
|
25
|
+
const toAnyExpressionVisitor = {
|
|
26
|
+
columnRef: (expr) => expr,
|
|
27
|
+
identifierRef: (expr) => expr,
|
|
28
|
+
subquery: (expr) => expr,
|
|
29
|
+
operation: (expr) => expr,
|
|
30
|
+
aggregate: (expr) => expr,
|
|
31
|
+
windowFunc: (expr) => expr,
|
|
32
|
+
functionCall: (expr) => expr,
|
|
33
|
+
cast: (expr) => expr,
|
|
34
|
+
case: (expr) => expr,
|
|
35
|
+
jsonObject: (expr) => expr,
|
|
36
|
+
jsonArrayAgg: (expr) => expr,
|
|
37
|
+
binary: (expr) => expr,
|
|
38
|
+
and: (expr) => expr,
|
|
39
|
+
or: (expr) => expr,
|
|
40
|
+
exists: (expr) => expr,
|
|
41
|
+
nullCheck: (expr) => expr,
|
|
42
|
+
not: (expr) => expr,
|
|
43
|
+
literal: (expr) => expr,
|
|
44
|
+
param: (expr) => expr,
|
|
45
|
+
preparedParam: (expr) => expr,
|
|
46
|
+
list: (expr) => expr,
|
|
47
|
+
rawExpr: (expr) => expr
|
|
48
|
+
};
|
|
3
49
|
function frozenArrayCopy(values) {
|
|
4
50
|
return Object.freeze([...values]);
|
|
5
51
|
}
|
|
@@ -9,17 +55,6 @@ function frozenOptionalRecordCopy(value) {
|
|
|
9
55
|
function frozenRecordCopy(record) {
|
|
10
56
|
return Object.freeze({ ...record });
|
|
11
57
|
}
|
|
12
|
-
function frozenCodecRef(codec) {
|
|
13
|
-
const typeParams = codec.typeParams === void 0 ? void 0 : structuredClone(codec.typeParams);
|
|
14
|
-
const base = {
|
|
15
|
-
codecId: codec.codecId,
|
|
16
|
-
...ifDefined("typeParams", typeParams)
|
|
17
|
-
};
|
|
18
|
-
return Object.freeze(codec.many ? {
|
|
19
|
-
...base,
|
|
20
|
-
many: true
|
|
21
|
-
} : base);
|
|
22
|
-
}
|
|
23
58
|
function freezeRows(rows) {
|
|
24
59
|
return Object.freeze(rows.map((row) => Object.freeze({ ...row })));
|
|
25
60
|
}
|
|
@@ -129,13 +164,16 @@ var Expression = class extends AstNode {
|
|
|
129
164
|
return collectParamRefsWith(this);
|
|
130
165
|
}
|
|
131
166
|
baseColumnRef() {
|
|
132
|
-
throw new
|
|
167
|
+
throw new InternalError(`${this.constructor.name} does not expose a base column reference`);
|
|
168
|
+
}
|
|
169
|
+
#asAnyExpression() {
|
|
170
|
+
return this.accept(toAnyExpressionVisitor);
|
|
133
171
|
}
|
|
134
172
|
toExpr() {
|
|
135
|
-
return this;
|
|
173
|
+
return this.#asAnyExpression();
|
|
136
174
|
}
|
|
137
175
|
not() {
|
|
138
|
-
return new NotExpr(this);
|
|
176
|
+
return new NotExpr(this.#asAnyExpression());
|
|
139
177
|
}
|
|
140
178
|
};
|
|
141
179
|
var TableSource = class TableSource extends FromSource {
|
|
@@ -192,20 +230,39 @@ var FunctionSource = class FunctionSource extends FromSource {
|
|
|
192
230
|
fn;
|
|
193
231
|
args;
|
|
194
232
|
alias;
|
|
195
|
-
|
|
233
|
+
columnAliases;
|
|
234
|
+
ordinality;
|
|
235
|
+
constructor(fn, args, alias, ordinality = false) {
|
|
196
236
|
super();
|
|
237
|
+
if (alias?.columnAliases?.length === 0) throw structuredError("SQL.AST_INVALID", "FunctionSource column aliases must not be empty", { meta: {
|
|
238
|
+
kind: "function-source",
|
|
239
|
+
field: "columnAliases"
|
|
240
|
+
} });
|
|
197
241
|
this.fn = fn;
|
|
198
242
|
this.args = frozenArrayCopy(args);
|
|
199
|
-
this.alias = alias;
|
|
243
|
+
this.alias = alias?.alias;
|
|
244
|
+
this.columnAliases = alias?.columnAliases === void 0 ? void 0 : frozenArrayCopy(alias.columnAliases);
|
|
245
|
+
this.ordinality = ordinality;
|
|
200
246
|
this.freeze();
|
|
201
247
|
}
|
|
202
248
|
static of(fn, args, alias) {
|
|
203
249
|
return new FunctionSource(fn, args, alias);
|
|
204
250
|
}
|
|
251
|
+
#aliasOptions() {
|
|
252
|
+
if (this.alias === void 0) return void 0;
|
|
253
|
+
return {
|
|
254
|
+
alias: this.alias,
|
|
255
|
+
...ifDefined("columnAliases", this.columnAliases)
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
withOrdinality() {
|
|
259
|
+
if (this.ordinality) return this;
|
|
260
|
+
return new FunctionSource(this.fn, this.args, this.#aliasOptions(), true);
|
|
261
|
+
}
|
|
205
262
|
rewrite(rewriter) {
|
|
206
263
|
const rewrittenArgs = this.args.map((arg) => rewriteComparable(arg, rewriter));
|
|
207
264
|
if (rewrittenArgs.every((arg, i) => arg === this.args[i])) return this;
|
|
208
|
-
return new FunctionSource(this.fn, rewrittenArgs, this.
|
|
265
|
+
return new FunctionSource(this.fn, rewrittenArgs, this.#aliasOptions(), this.ordinality);
|
|
209
266
|
}
|
|
210
267
|
toFromSource() {
|
|
211
268
|
return this;
|
|
@@ -429,7 +486,7 @@ var AggregateExpr = class AggregateExpr extends Expression {
|
|
|
429
486
|
expr;
|
|
430
487
|
constructor(fn, expr) {
|
|
431
488
|
super();
|
|
432
|
-
if (fn !== "count" && expr === void 0) throw
|
|
489
|
+
if (fn !== "count" && expr === void 0) throw structuredError("ORM.ARGUMENT_INVALID", `Aggregate function "${fn}" requires an expression`, { meta: { fn } });
|
|
433
490
|
this.fn = fn;
|
|
434
491
|
this.expr = expr;
|
|
435
492
|
this.freeze();
|
|
@@ -511,6 +568,86 @@ var WindowFuncExpr = class WindowFuncExpr extends Expression {
|
|
|
511
568
|
]);
|
|
512
569
|
}
|
|
513
570
|
};
|
|
571
|
+
var FunctionCallExpr = class FunctionCallExpr extends Expression {
|
|
572
|
+
kind = "function-call";
|
|
573
|
+
fn;
|
|
574
|
+
args;
|
|
575
|
+
constructor(fn, args) {
|
|
576
|
+
super();
|
|
577
|
+
this.fn = fn;
|
|
578
|
+
this.args = frozenArrayCopy(args);
|
|
579
|
+
this.freeze();
|
|
580
|
+
}
|
|
581
|
+
static of(fn, args) {
|
|
582
|
+
return new FunctionCallExpr(fn, args);
|
|
583
|
+
}
|
|
584
|
+
accept(visitor) {
|
|
585
|
+
return visitor.functionCall(this);
|
|
586
|
+
}
|
|
587
|
+
rewrite(rewriter) {
|
|
588
|
+
return new FunctionCallExpr(this.fn, this.args.map((arg) => arg.rewrite(rewriter)));
|
|
589
|
+
}
|
|
590
|
+
fold(folder) {
|
|
591
|
+
return combineAll(folder, this.args.map((arg) => () => arg.fold(folder)));
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
var CastExpr = class CastExpr extends Expression {
|
|
595
|
+
kind = "cast";
|
|
596
|
+
expr;
|
|
597
|
+
targetType;
|
|
598
|
+
constructor(expr, targetType) {
|
|
599
|
+
super();
|
|
600
|
+
this.expr = expr;
|
|
601
|
+
this.targetType = targetType;
|
|
602
|
+
this.freeze();
|
|
603
|
+
}
|
|
604
|
+
static as(expr, targetType) {
|
|
605
|
+
return new CastExpr(expr, targetType);
|
|
606
|
+
}
|
|
607
|
+
accept(visitor) {
|
|
608
|
+
return visitor.cast(this);
|
|
609
|
+
}
|
|
610
|
+
rewrite(rewriter) {
|
|
611
|
+
return new CastExpr(this.expr.rewrite(rewriter), this.targetType);
|
|
612
|
+
}
|
|
613
|
+
fold(folder) {
|
|
614
|
+
return this.expr.fold(folder);
|
|
615
|
+
}
|
|
616
|
+
};
|
|
617
|
+
var CaseExpr = class CaseExpr extends Expression {
|
|
618
|
+
kind = "case";
|
|
619
|
+
branches;
|
|
620
|
+
elseExpr;
|
|
621
|
+
constructor(branches, elseExpr) {
|
|
622
|
+
super();
|
|
623
|
+
if (branches.length === 0) throw structuredError("SQL.AST_INVALID", "CaseExpr requires at least one branch", { meta: {
|
|
624
|
+
kind: "case",
|
|
625
|
+
field: "branches"
|
|
626
|
+
} });
|
|
627
|
+
this.branches = Object.freeze(branches.map((branch) => Object.freeze({
|
|
628
|
+
condition: branch.condition,
|
|
629
|
+
value: branch.value
|
|
630
|
+
})));
|
|
631
|
+
this.elseExpr = elseExpr;
|
|
632
|
+
this.freeze();
|
|
633
|
+
}
|
|
634
|
+
static of(branches, elseExpr) {
|
|
635
|
+
return new CaseExpr(branches, elseExpr);
|
|
636
|
+
}
|
|
637
|
+
accept(visitor) {
|
|
638
|
+
return visitor.case(this);
|
|
639
|
+
}
|
|
640
|
+
rewrite(rewriter) {
|
|
641
|
+
return new CaseExpr(this.branches.map((branch) => ({
|
|
642
|
+
condition: branch.condition.rewrite(rewriter),
|
|
643
|
+
value: branch.value.rewrite(rewriter)
|
|
644
|
+
})), this.elseExpr?.rewrite(rewriter));
|
|
645
|
+
}
|
|
646
|
+
fold(folder) {
|
|
647
|
+
const elseExpr = this.elseExpr;
|
|
648
|
+
return combineAll(folder, [...this.branches.flatMap((branch) => [() => branch.condition.fold(folder), () => branch.value.fold(folder)]), ...elseExpr === void 0 ? [] : [() => elseExpr.fold(folder)]]);
|
|
649
|
+
}
|
|
650
|
+
};
|
|
514
651
|
var JsonObjectExpr = class JsonObjectExpr extends Expression {
|
|
515
652
|
kind = "json-object";
|
|
516
653
|
entries;
|
|
@@ -534,11 +671,11 @@ var JsonObjectExpr = class JsonObjectExpr extends Expression {
|
|
|
534
671
|
rewrite(rewriter) {
|
|
535
672
|
return new JsonObjectExpr(this.entries.map((entry) => ({
|
|
536
673
|
key: entry.key,
|
|
537
|
-
value: entry.value.
|
|
674
|
+
value: entry.value.rewrite(rewriter)
|
|
538
675
|
})));
|
|
539
676
|
}
|
|
540
677
|
fold(folder) {
|
|
541
|
-
return combineAll(folder, this.entries.map((entry) => () => entry.value.
|
|
678
|
+
return combineAll(folder, this.entries.map((entry) => () => entry.value.fold(folder)));
|
|
542
679
|
}
|
|
543
680
|
};
|
|
544
681
|
var OrderByItem = class OrderByItem extends AstNode {
|
|
@@ -842,9 +979,9 @@ var ProjectionItem = class ProjectionItem extends AstNode {
|
|
|
842
979
|
alias;
|
|
843
980
|
expr;
|
|
844
981
|
/**
|
|
845
|
-
* Codec identity for
|
|
982
|
+
* Codec identity for any known projected result, whether read directly from a contract column or forwarded through a query wrapper. Decode-side dispatch resolves the per-instance codec through `contractCodecs.forCodecRef(codec)` — content-keyed memoisation collapses repeated lookups for the same logical result onto one shared {@link Codec}.
|
|
846
983
|
*
|
|
847
|
-
* Stays `undefined`
|
|
984
|
+
* Stays `undefined` only when the projected result's codec is unknown, such as computed expressions, subqueries, or raw aliases whose decoded type the runtime cannot infer.
|
|
848
985
|
*/
|
|
849
986
|
codec;
|
|
850
987
|
constructor(alias, expr, codec) {
|
|
@@ -1264,7 +1401,7 @@ var RawSqlExpr = class RawSqlExpr extends QueryAst {
|
|
|
1264
1401
|
args;
|
|
1265
1402
|
constructor(fragments, args) {
|
|
1266
1403
|
super();
|
|
1267
|
-
if (fragments.length !== args.length + 1) throw new
|
|
1404
|
+
if (fragments.length !== args.length + 1) throw new InternalError(`RawSqlExpr: fragments.length must equal args.length + 1 (got fragments=${fragments.length}, args=${args.length})`);
|
|
1268
1405
|
this.fragments = Object.freeze([...fragments]);
|
|
1269
1406
|
this.args = Object.freeze([...args]);
|
|
1270
1407
|
this.freeze();
|
|
@@ -1298,12 +1435,12 @@ const whereExprKinds = /* @__PURE__ */ new Set([
|
|
|
1298
1435
|
"not"
|
|
1299
1436
|
]);
|
|
1300
1437
|
function isQueryAst(value) {
|
|
1301
|
-
return typeof value === "object" && value !== null && "kind" in value && queryAstKinds.has(value.kind);
|
|
1438
|
+
return typeof value === "object" && value !== null && "kind" in value && typeof value.kind === "string" && queryAstKinds.has(value.kind);
|
|
1302
1439
|
}
|
|
1303
1440
|
function isWhereExpr(value) {
|
|
1304
|
-
return typeof value === "object" && value !== null && "kind" in value && whereExprKinds.has(value.kind);
|
|
1441
|
+
return typeof value === "object" && value !== null && "kind" in value && typeof value.kind === "string" && whereExprKinds.has(value.kind);
|
|
1305
1442
|
}
|
|
1306
1443
|
//#endregion
|
|
1307
|
-
export {
|
|
1444
|
+
export { PreparedParamRef as A, isWhereExpr as B, LiteralExpr as C, OrExpr as D, OperationExpr as E, SubqueryExpr as F, whereExprKinds as H, TableSource as I, UpdateAst as L, RawExpr as M, RawSqlExpr as N, OrderByItem as O, SelectAst as P, WindowFuncExpr as R, ListExpression as S, NullCheckExpr as T, frozenCodecRef as U, queryAstKinds as V, InsertAst as _, CastExpr as a, JsonArrayAggExpr as b, DeleteAst as c, DoUpdateSetConflictAction as d, EqColJoinOn as f, IdentifierRef as g, FunctionSource as h, CaseExpr as i, ProjectionItem as j, ParamRef as k, DerivedTableSource as l, FunctionCallExpr as m, AndExpr as n, ColumnRef as o, ExistsExpr as p, BinaryExpr as r, DefaultValueExpr as s, AggregateExpr as t, DoNothingConflictAction as u, InsertOnConflict as v, NotExpr as w, JsonObjectExpr as x, JoinAst as y, isQueryAst as z };
|
|
1308
1445
|
|
|
1309
|
-
//# sourceMappingURL=types-
|
|
1446
|
+
//# sourceMappingURL=types-CINOak-F.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-CINOak-F.mjs","names":["#asAnyExpression","#aliasOptions"],"sources":["../src/ast/codec-types.ts","../src/ast/types.ts"],"sourcesContent":["import type { JsonValue } from '@prisma-next/contract/types';\nimport type {\n Codec as BaseCodec,\n CodecCallContext,\n CodecDescriptor,\n CodecInstanceContext,\n CodecRef,\n CodecTrait,\n} from '@prisma-next/framework-components/codec';\nimport { ifDefined } from '@prisma-next/utils/defined';\n\nexport type {\n CodecCallContext,\n CodecDescriptor,\n CodecRef,\n CodecTrait,\n} from '@prisma-next/framework-components/codec';\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction freezeJsonValue(value: JsonValue): void {\n if (value === null || typeof value !== 'object') {\n return;\n }\n\n if (isJsonArray(value)) {\n for (const item of value) {\n freezeJsonValue(item);\n }\n } else {\n for (const item of Object.values(value)) {\n freezeJsonValue(item);\n }\n }\n\n Object.freeze(value);\n}\n\nexport function frozenCodecRef(codec: CodecRef): CodecRef {\n const typeParams = codec.typeParams === undefined ? undefined : structuredClone(codec.typeParams);\n if (typeParams !== undefined) {\n freezeJsonValue(typeParams);\n }\n\n return Object.freeze({\n codecId: codec.codecId,\n ...ifDefined('typeParams', typeParams),\n ...ifDefined('many', codec.many),\n });\n}\n\n/**\n * SQL-family addressing of a single column. The decode site populates a `SqlColumnRef` whenever it can resolve the cell to a single underlying `(table, column)` (the typical case for projected columns from a single-table source); cells the runtime cannot resolve (aggregate aliases, include aggregate fields, computed projections without a simple ref) get `column = undefined`.\n *\n * The shape is a structural projection of the runtime's `ColumnRef` so the SQL decode site can reuse the resolution it already performs for `RUNTIME.DECODE_FAILED` envelope construction without allocating twice per cell.\n */\nexport interface SqlColumnRef {\n readonly table: string;\n readonly name: string;\n}\n\n/**\n * SQL-family per-call context. Extends the framework {@link CodecCallContext} (which carries `signal` only) with `column?: SqlColumnRef`, populated on **decode** call sites that can resolve a single underlying column ref. Encode call sites currently leave `column` undefined (encode-time column context is the middleware's domain).\n *\n * SQL codec authors writing codec methods observe this type via {@link SqlCodec}. The framework codec dispatch surface (and Mongo) sees only the base `CodecCallContext`.\n */\nexport interface SqlCodecCallContext extends CodecCallContext {\n readonly column?: SqlColumnRef;\n}\n\n/**\n * SQL-family per-instance context. Extends the framework {@link CodecInstanceContext} (`name` only) with `usedAt`, the set of `(table, column)` pairs the resolved codec serves.\n *\n * - For `typeRef` columns sharing one named `storage.types` instance, the array lists every referencing column — a column-scoped stateful codec (e.g. encryption) can derive aggregated per-instance state across all the columns sharing the named instance.\n * - For inline-`typeParams` columns, the array has exactly one entry — the column that owns the inline params.\n * - For shared non-parameterized codecs, the array carries one representative entry (the column that triggered materialization); the codec is shared across every column with that codec id, so the `usedAt` is informational only.\n *\n * SQL extensions consuming `usedAt` (e.g. column-scoped state derivation) type their factory parameter as `SqlCodecInstanceContext`. Extensions that don't read `usedAt` type their factory parameter as the family-agnostic {@link CodecInstanceContext} — a `SqlCodecInstanceContext` is structurally assignable to the base.\n */\nexport interface SqlCodecInstanceContext extends CodecInstanceContext {\n readonly usedAt: ReadonlyArray<{ readonly table: string; readonly column: string }>;\n}\n\n/**\n * Codec metadata for database-specific type information. Used for schema introspection and verification.\n */\nexport interface CodecMeta {\n readonly db?: {\n readonly sql?: {\n readonly postgres?: {\n readonly nativeType: string; // e.g. 'integer', 'text', 'vector', 'timestamp with time zone'\n };\n };\n };\n}\n\n/**\n * SQL codec — extends the framework codec base by narrowing the per-call context to the SQL-family {@link SqlCodecCallContext} (adds `column?: SqlColumnRef`). TypeScript treats method-syntax declarations bivariantly, so the SQL narrowing is structurally compatible with the framework {@link BaseCodec} super-interface.\n *\n * Codec-id-keyed static metadata (`traits`, `targetTypes`, `meta`, `paramsSchema`, `renderOutputType`) lives on the unified {@link import('@prisma-next/framework-components/codec').CodecDescriptor} — the codec instance itself only carries `id` plus the four conversion methods.\n *\n * See `Codec` in `@prisma-next/framework-components/codec` for the codec contract that this interface extends.\n */\nexport interface Codec<\n Id extends string = string,\n TTraits extends readonly CodecTrait[] = readonly CodecTrait[],\n TWire = unknown,\n TInput = unknown,\n> extends BaseCodec<Id, TTraits, TWire, TInput> {\n encode(value: TInput, ctx: SqlCodecCallContext): Promise<TWire>;\n decode(wire: TWire, ctx: SqlCodecCallContext): Promise<TInput>;\n}\n\n/**\n * Contract-bound codec registry.\n *\n * Built once at `ExecutionContext` construction time by walking the contract's `storage.tables[].columns[]` and resolving each column through its descriptor's factory. Runtime encode/decode dispatch resolves codecs via `forCodecRef(ref)` — the single dispatch shape for AST-bound codec resolution.\n *\n * `forColumn(namespace, table, column)` is retained for build-time helpers that need column-keyed lookup (e.g. projection stamping); runtime dispatch routes through `forCodecRef`.\n */\nexport interface ContractCodecRegistry {\n /**\n * Resolve the codec for `(namespace, table, column)`. Returns the per-instance parameterized codec for parameterized columns, the shared codec for non-parameterized columns, or `undefined` if the column is unknown or the codec isn't registered.\n *\n * The `namespaceId` coordinate leads and is always supplied — the column is resolved strictly within that namespace, so two same-bare-named tables across namespaces resolve to their own per-namespace codecs.\n */\n forColumn(namespaceId: string, table: string, column: string): Codec | undefined;\n\n /**\n * Resolve a codec by {@link CodecRef}. The single dispatch shape for AST-bound codec resolution — every codec-bearing AST node carries a `CodecRef` that resolves through this method via the per-`ExecutionContext` `AstCodecResolver`. Two refs with the same `codecId` and structurally equal `typeParams` (regardless of object key order) return the same memoised codec instance. Throws `RUNTIME.CODEC_DESCRIPTOR_MISSING` for unknown `codecId`s and `RUNTIME.TYPE_PARAMS_INVALID` on `paramsSchema` rejection.\n *\n * Pre-populated from the contract walk at registry construction time (so contract-declared codecs hit on first call); grows lazily for AST-supplied refs not seen at contract-load time (deserialised migration ops, refs-less raw SQL with an explicit codec).\n */\n forCodecRef(ref: CodecRef): Codec;\n}\n\n/**\n * Variance-erased descriptor type used for heterogeneous storage in collection containers and on the unified contributor `codecs:` slot. The descriptor's `factory` and `renderOutputType` are contravariant in `P`, so descriptors with different params shapes are not in a subtype relationship; collecting them into one container needs an explicit variance erasure rather than `CodecDescriptor<unknown>` (which is the\n * narrowest, not the widest, of the family).\n */\n// biome-ignore lint/suspicious/noExplicitAny: descriptor variance erasure — `P` is contravariant on the factory and renderOutputType slots, so heterogeneous descriptor storage cannot use `unknown`.\nexport type AnyCodecDescriptor = CodecDescriptor<any>;\n\ntype DescriptorResolvedCodec<D> =\n D extends CodecDescriptor<infer _P> ? ReturnType<ReturnType<D['factory']>> : never;\n\nexport type DescriptorCodecId<D> = D extends AnyCodecDescriptor ? D['codecId'] : never;\n\nexport type DescriptorCodecInput<D> =\n DescriptorResolvedCodec<D> extends BaseCodec<string, readonly CodecTrait[], unknown, infer In>\n ? In\n : never;\n\n/**\n * Resolve the trait union for a descriptor `D`.\n *\n * Reads `traits` directly off the descriptor — concrete descriptor classes declare `override readonly traits = [...] as const`, which preserves the literal trait tuple at the descriptor type. Reading from the resolved codec instance (`CodecImpl<…, TTraits, …>`) would lose the literal because `Codec` carries `TTraits` only on its optional phantom slot (`readonly __codecTraits?: TTraits`); codecs extending `CodecImpl`\n * have no required structural site that pins `TTraits`, so a descriptor-keyed extractor reading from the codec instance would widen to the broad `CodecTrait` union.\n */\nexport type DescriptorCodecTraits<D> = D extends {\n readonly traits: infer TTraits extends readonly CodecTrait[];\n}\n ? TTraits[number] & CodecTrait\n : never;\n\n/**\n * Project a record of {@link AnyCodecDescriptor}s keyed by scalar name onto the codec-id-keyed `CodecTypes` shape consumed by emit and no-emit type pipelines (`{ readonly [codecId]: { input; output; traits } }`).\n *\n * Canonical extractor for the descriptor-keyed type pipeline; the legacy instance-keyed extractor and its `mkCodec`-bound builder retired alongside the carrier deletion.\n */\nexport type ExtractCodecTypes<\n ScalarNames extends {\n readonly [K in keyof ScalarNames]: AnyCodecDescriptor;\n } = Record<never, never>,\n> = {\n readonly [K in keyof ScalarNames as DescriptorCodecId<ScalarNames[K]>]: {\n readonly input: DescriptorCodecInput<ScalarNames[K]>;\n readonly output: DescriptorCodecInput<ScalarNames[K]>;\n readonly traits: DescriptorCodecTraits<ScalarNames[K]>;\n };\n};\n","import type { ParamSpec } from '@prisma-next/operations';\nimport type { SqlLoweringSpec } from '@prisma-next/sql-operations';\n\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { InternalError } from '@prisma-next/utils/internal-error';\nimport { structuredError } from '@prisma-next/utils/structured-error';\nimport { type CodecRef, frozenCodecRef } from './codec-types';\nimport type { AnyJsonValueProjection } from './json-value-projection';\n\nexport type Direction = 'asc' | 'desc';\n\nexport type BinaryOp = 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte' | 'like' | 'in' | 'notIn';\n\nexport type AggregateCountFn = 'count';\nexport type AggregateOpFn = 'sum' | 'avg' | 'min' | 'max';\nexport type AggregateFn = AggregateCountFn | AggregateOpFn;\n\n/**\n * Window function names. Currently only `row_number` is wired up — added\n * to support `ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) = 1`\n * lowering for `.distinct(cols)` semantics in the SQL ORM client. `rank`\n * and `dense_rank` are reserved here so future additions don't churn the\n * type; renderers only need to dispatch on the function name string.\n */\nexport type WindowFn = 'row_number' | 'rank' | 'dense_rank';\n\n/** Scalar JS values that map directly to a SQL wire type. Values outside this set must be routed through `param(value, { codecId })` to declare the target codec explicitly. */\nexport type RawSqlLiteral = number | bigint | string | boolean | Uint8Array;\n\nexport interface ExpressionSource {\n toExpr(): AnyExpression;\n}\n\nexport interface ExpressionRewriter {\n columnRef?(expr: ColumnRef): AnyExpression;\n identifierRef?(expr: IdentifierRef): AnyExpression;\n paramRef?(expr: ParamRef): ParamRef | LiteralExpr;\n preparedParamRef?(expr: PreparedParamRef): PreparedParamRef;\n literal?(expr: LiteralExpr): LiteralExpr;\n list?(expr: ListExpression): ListExpression | LiteralExpr;\n select?(ast: SelectAst): SelectAst;\n rawExpr?(expr: RawExpr): AnyExpression;\n}\n\nexport interface AstRewriter extends ExpressionRewriter {\n tableSource?(source: TableSource): TableSource;\n eqColJoinOn?(on: EqColJoinOn): EqColJoinOn | AnyExpression;\n}\n\nexport interface ExprVisitor<R> {\n columnRef(expr: ColumnRef): R;\n identifierRef(expr: IdentifierRef): R;\n subquery(expr: SubqueryExpr): R;\n operation(expr: OperationExpr): R;\n aggregate(expr: AggregateExpr): R;\n windowFunc(expr: WindowFuncExpr): R;\n functionCall(expr: FunctionCallExpr): R;\n cast(expr: CastExpr): R;\n case(expr: CaseExpr): R;\n jsonObject(expr: JsonObjectExpr): R;\n jsonArrayAgg(expr: JsonArrayAggExpr): R;\n binary(expr: BinaryExpr): R;\n and(expr: AndExpr): R;\n or(expr: OrExpr): R;\n exists(expr: ExistsExpr): R;\n nullCheck(expr: NullCheckExpr): R;\n not(expr: NotExpr): R;\n literal(expr: LiteralExpr): R;\n param(expr: ParamRef): R;\n preparedParam(expr: PreparedParamRef): R;\n list(expr: ListExpression): R;\n rawExpr(expr: RawExpr): R;\n}\n\nconst toAnyExpressionVisitor: ExprVisitor<AnyExpression> = {\n columnRef: (expr) => expr,\n identifierRef: (expr) => expr,\n subquery: (expr) => expr,\n operation: (expr) => expr,\n aggregate: (expr) => expr,\n windowFunc: (expr) => expr,\n functionCall: (expr) => expr,\n cast: (expr) => expr,\n case: (expr) => expr,\n jsonObject: (expr) => expr,\n jsonArrayAgg: (expr) => expr,\n binary: (expr) => expr,\n and: (expr) => expr,\n or: (expr) => expr,\n exists: (expr) => expr,\n nullCheck: (expr) => expr,\n not: (expr) => expr,\n literal: (expr) => expr,\n param: (expr) => expr,\n preparedParam: (expr) => expr,\n list: (expr) => expr,\n rawExpr: (expr) => expr,\n};\n\nexport interface ExpressionFolder<T> {\n empty: T;\n combine(a: T, b: T): T;\n isAbsorbing?(value: T): boolean;\n columnRef?(expr: ColumnRef): T;\n identifierRef?(expr: IdentifierRef): T;\n paramRef?(expr: ParamRef): T;\n preparedParamRef?(expr: PreparedParamRef): T;\n literal?(expr: LiteralExpr): T;\n list?(expr: ListExpression): T;\n select?(ast: SelectAst): T;\n rawExpr?(expr: RawExpr): T;\n}\n\nexport type ProjectionExpr = AnyExpression;\nexport type InsertValue = ColumnRef | ParamRef | PreparedParamRef | DefaultValueExpr | RawExpr;\nexport type JoinOnExpr = EqColJoinOn | AnyExpression;\nexport type WhereArg = AnyExpression | ToWhereExpr;\nexport type JsonObjectEntry = {\n readonly key: string;\n readonly value: AnyJsonValueProjection;\n};\n\nfunction frozenArrayCopy<T>(values: readonly T[]): ReadonlyArray<T> {\n return Object.freeze([...values]);\n}\n\nfunction frozenOptionalRecordCopy<T extends Record<string, unknown>>(\n value: T | undefined,\n): Readonly<T> | undefined {\n return value === undefined ? undefined : Object.freeze({ ...value });\n}\n\nfunction frozenRecordCopy<T>(record: Readonly<Record<string, T>>): Readonly<Record<string, T>> {\n return Object.freeze({ ...record });\n}\n\nfunction freezeRows(\n rows: ReadonlyArray<Record<string, InsertValue>>,\n): ReadonlyArray<Readonly<Record<string, InsertValue>>> {\n return Object.freeze(rows.map((row) => Object.freeze({ ...row })));\n}\n\nfunction combineAll<T>(folder: ExpressionFolder<T>, thunks: Array<() => T>): T {\n let result = folder.empty;\n for (const thunk of thunks) {\n if (folder.isAbsorbing?.(result)) {\n return result;\n }\n result = folder.combine(result, thunk());\n }\n return result;\n}\n\nfunction rewriteComparable(value: AnyExpression, rewriter: ExpressionRewriter): AnyExpression {\n switch (value.kind) {\n case 'param-ref':\n return rewriter.paramRef ? rewriter.paramRef(value) : value;\n case 'prepared-param-ref':\n return rewriter.preparedParamRef ? rewriter.preparedParamRef(value) : value;\n case 'literal':\n return rewriter.literal ? rewriter.literal(value) : value;\n case 'list':\n if (rewriter.list) {\n return rewriter.list(value);\n }\n return value.rewrite(rewriter);\n default:\n return value.rewrite(rewriter);\n }\n}\n\nfunction foldComparable<T>(value: AnyExpression, folder: ExpressionFolder<T>): T {\n switch (value.kind) {\n case 'param-ref':\n return folder.paramRef ? folder.paramRef(value) : folder.empty;\n case 'prepared-param-ref':\n return folder.preparedParamRef ? folder.preparedParamRef(value) : folder.empty;\n case 'literal':\n return folder.literal ? folder.literal(value) : folder.empty;\n case 'list':\n return value.fold(folder);\n default:\n return value.fold(folder);\n }\n}\n\nfunction collectColumnRefsWith<TNode extends Expression>(node: TNode): ColumnRef[] {\n return node.fold<ColumnRef[]>({\n empty: [],\n combine: (a, b) => [...a, ...b],\n columnRef: (columnRef) => [columnRef],\n select: (ast) => ast.collectColumnRefs(),\n });\n}\n\nfunction collectParamRefsWith<TNode extends Expression>(node: TNode): AnyParamRef[] {\n return node.fold<AnyParamRef[]>({\n empty: [],\n combine: (a, b) => [...a, ...b],\n paramRef: (paramRef) => [paramRef],\n preparedParamRef: (paramRef) => [paramRef],\n select: (ast) => ast.collectParamRefs(),\n });\n}\n\nfunction rewriteTableSource(table: TableSource, rewriter: AstRewriter): TableSource {\n return rewriter.tableSource ? rewriter.tableSource(table) : table;\n}\n\nfunction rewriteProjectionItem(item: ProjectionItem, rewriter: AstRewriter): ProjectionItem {\n const rewrittenExpr =\n item.expr.kind === 'literal'\n ? rewriter.literal\n ? rewriter.literal(item.expr)\n : item.expr\n : item.expr.rewrite(rewriter);\n return new ProjectionItem(item.alias, rewrittenExpr, item.codec);\n}\n\nfunction rewriteInsertValue(value: InsertValue, rewriter: AstRewriter): InsertValue {\n switch (value.kind) {\n case 'param-ref':\n return rewriter.paramRef ? rewriteParamRefForInsert(value, rewriter) : value;\n case 'prepared-param-ref':\n return rewriter.preparedParamRef ? rewriter.preparedParamRef(value) : value;\n case 'column-ref':\n return rewriter.columnRef ? rewriteColumnRefForInsert(value, rewriter) : value;\n case 'default-value':\n return value;\n // RawExpr insert values are opaque DB-side expressions (e.g. `now()` /\n // `datetime('now')`) carried in value position; they are not a rewrite\n // target on the insert path.\n case 'raw-expr':\n return value;\n }\n}\n\nfunction rewriteParamRefForInsert(value: ParamRef, rewriter: AstRewriter): InsertValue {\n const rewritten = rewriter.paramRef ? rewriter.paramRef(value) : value;\n return rewritten.kind === 'param-ref' ? rewritten : value;\n}\n\nfunction rewriteColumnRefForInsert(value: ColumnRef, rewriter: AstRewriter): InsertValue {\n const rewritten = rewriter.columnRef ? rewriter.columnRef(value) : value;\n return rewritten.kind === 'column-ref' ? rewritten : value;\n}\n\nfunction rewriteInsertRow(\n row: Readonly<Record<string, InsertValue>>,\n rewriter: AstRewriter,\n): Record<string, InsertValue> {\n const result: Record<string, InsertValue> = {};\n for (const [key, value] of Object.entries(row)) {\n result[key] = rewriteInsertValue(value, rewriter);\n }\n return result;\n}\n\nfunction rewriteUpdateSet(\n set: Readonly<Record<string, AnyExpression>>,\n rewriter: AstRewriter,\n): Record<string, AnyExpression> {\n const result: Record<string, AnyExpression> = {};\n for (const [key, value] of Object.entries(set)) {\n result[key] = value.rewrite(rewriter);\n }\n return result;\n}\n\nfunction rewriteLimitOffset<T extends number | AnyExpression | undefined>(\n value: T,\n rewriter: AstRewriter,\n): T;\nfunction rewriteLimitOffset(\n value: number | AnyExpression | undefined,\n rewriter: AstRewriter,\n): number | AnyExpression | undefined {\n if (value === undefined || typeof value === 'number') return value;\n return value.rewrite(rewriter);\n}\n\nfunction rewriteOnConflict(onConflict: InsertOnConflict, rewriter: AstRewriter): InsertOnConflict {\n const columns = onConflict.columns.map((columnRef) => {\n const rewritten = rewriter.columnRef ? rewriter.columnRef(columnRef) : columnRef;\n return rewritten.kind === 'column-ref' ? rewritten : columnRef;\n });\n\n if (onConflict.action.kind === 'do-nothing') {\n return new InsertOnConflict(columns, new DoNothingConflictAction());\n }\n\n return new InsertOnConflict(\n columns,\n new DoUpdateSetConflictAction(rewriteUpdateSet(onConflict.action.set, rewriter)),\n );\n}\n\nabstract class AstNode {\n abstract readonly kind: string;\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nabstract class QueryAst extends AstNode {\n abstract collectParamRefs(): AnyParamRef[];\n abstract toQueryAst(): AnyQueryAst;\n}\n\nabstract class FromSource extends AstNode {\n abstract rewrite(rewriter: AstRewriter): AnyFromSource;\n abstract toFromSource(): AnyFromSource;\n}\n\nabstract class Expression extends AstNode implements ExpressionSource {\n abstract accept<R>(visitor: ExprVisitor<R>): R;\n abstract rewrite(rewriter: ExpressionRewriter): AnyExpression;\n abstract fold<T>(folder: ExpressionFolder<T>): T;\n\n collectColumnRefs(): ColumnRef[] {\n return collectColumnRefsWith(this);\n }\n\n collectParamRefs(): AnyParamRef[] {\n return collectParamRefsWith(this);\n }\n\n baseColumnRef(): ColumnRef {\n throw new InternalError(`${this.constructor.name} does not expose a base column reference`);\n }\n\n #asAnyExpression(): AnyExpression {\n return this.accept(toAnyExpressionVisitor);\n }\n\n toExpr(): AnyExpression {\n return this.#asAnyExpression();\n }\n\n not(): NotExpr {\n return new NotExpr(this.#asAnyExpression());\n }\n}\n\nexport class TableSource extends FromSource {\n readonly kind = 'table-source' as const;\n readonly name: string;\n readonly alias: string | undefined;\n /**\n * Resolved storage namespace coordinate for this table, stamped when the\n * table proxy constructs the AST. Renderers qualify via the namespace\n * concretion's `qualifyTable()` using this id — never by re-resolving the\n * bare table name at render time.\n */\n readonly namespaceId: string | undefined;\n\n protected constructor(name: string, alias?: string, namespaceId?: string) {\n super();\n this.name = name;\n this.alias = alias;\n this.namespaceId = namespaceId;\n }\n\n static named(name: string, alias?: string, namespaceId?: string): TableSource {\n const source = new TableSource(name, alias, namespaceId);\n source.freeze();\n return source;\n }\n\n override rewrite(rewriter: AstRewriter): AnyFromSource {\n return rewriter.tableSource ? rewriter.tableSource(this) : this;\n }\n\n override toFromSource(): AnyFromSource {\n return this;\n }\n}\n\nexport interface TableRef {\n readonly name: string;\n readonly alias?: string;\n}\n\nexport class DerivedTableSource extends FromSource {\n readonly kind = 'derived-table-source' as const;\n readonly alias: string;\n readonly query: SelectAst;\n\n constructor(alias: string, query: SelectAst) {\n super();\n this.alias = alias;\n this.query = query;\n this.freeze();\n }\n\n static as(alias: string, query: SelectAst): DerivedTableSource {\n return new DerivedTableSource(alias, query);\n }\n\n // Intentionally does not call rewriter.tableSource — derived tables are rewritten via their inner query, not intercepted at the FromSource level. A future fromSource?(source: AnyFromSource) callback would be needed for that.\n override rewrite(rewriter: AstRewriter): AnyFromSource {\n return new DerivedTableSource(this.alias, this.query.rewrite(rewriter));\n }\n\n override toFromSource(): AnyFromSource {\n return this;\n }\n}\n\nexport interface FunctionSourceAlias {\n readonly alias: string;\n readonly columnAliases?: ReadonlyArray<string>;\n}\n\nexport class FunctionSource extends FromSource {\n readonly kind = 'function-source' as const;\n readonly fn: string;\n readonly args: ReadonlyArray<AnyExpression>;\n readonly alias: string | undefined;\n readonly columnAliases: ReadonlyArray<string> | undefined;\n readonly ordinality: boolean;\n\n protected constructor(\n fn: string,\n args: ReadonlyArray<AnyExpression>,\n alias?: FunctionSourceAlias,\n ordinality = false,\n ) {\n super();\n if (alias?.columnAliases?.length === 0) {\n throw structuredError('SQL.AST_INVALID', 'FunctionSource column aliases must not be empty', {\n meta: { kind: 'function-source', field: 'columnAliases' },\n });\n }\n this.fn = fn;\n this.args = frozenArrayCopy(args);\n this.alias = alias?.alias;\n this.columnAliases =\n alias?.columnAliases === undefined ? undefined : frozenArrayCopy(alias.columnAliases);\n this.ordinality = ordinality;\n this.freeze();\n }\n\n static of(\n fn: string,\n args: ReadonlyArray<AnyExpression>,\n alias?: FunctionSourceAlias,\n ): FunctionSource {\n return new FunctionSource(fn, args, alias);\n }\n\n #aliasOptions(): FunctionSourceAlias | undefined {\n if (this.alias === undefined) return undefined;\n return {\n alias: this.alias,\n ...ifDefined('columnAliases', this.columnAliases),\n };\n }\n\n withOrdinality(): FunctionSource {\n if (this.ordinality) return this;\n return new FunctionSource(this.fn, this.args, this.#aliasOptions(), true);\n }\n\n override rewrite(rewriter: AstRewriter): AnyFromSource {\n const rewrittenArgs = this.args.map((arg) => rewriteComparable(arg, rewriter));\n if (rewrittenArgs.every((arg, i) => arg === this.args[i])) return this;\n return new FunctionSource(this.fn, rewrittenArgs, this.#aliasOptions(), this.ordinality);\n }\n\n override toFromSource(): AnyFromSource {\n return this;\n }\n}\n\nexport class ColumnRef extends Expression {\n readonly kind = 'column-ref' as const;\n readonly table: string;\n readonly column: string;\n\n constructor(table: string, column: string) {\n super();\n this.table = table;\n this.column = column;\n this.freeze();\n }\n\n static of(table: string, column: string): ColumnRef {\n return new ColumnRef(table, column);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.columnRef(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.columnRef ? rewriter.columnRef(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.columnRef ? folder.columnRef(this) : folder.empty;\n }\n\n override baseColumnRef(): ColumnRef {\n return this;\n }\n}\n\nexport class IdentifierRef extends Expression {\n readonly kind = 'identifier-ref' as const;\n readonly name: string;\n\n constructor(name: string) {\n super();\n this.name = name;\n this.freeze();\n }\n\n static of(name: string): IdentifierRef {\n return new IdentifierRef(name);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.identifierRef(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.identifierRef ? rewriter.identifierRef(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.identifierRef ? folder.identifierRef(this) : folder.empty;\n }\n}\n\nexport class ParamRef extends Expression {\n readonly kind = 'param-ref' as const;\n readonly value: unknown;\n readonly name: string | undefined;\n /**\n * Codec identity carried by every column-bound `ParamRef`. The encode-side dispatch path materialises the per-instance codec through `contractCodecs.forCodecRef(codec)` — content-keyed memoisation on `(codecId, canonicalize(typeParams))` keeps repeated lookups for the same logical column on one shared {@link Codec}.\n *\n * `codec` may be `undefined` for `ParamRef`s constructed without a column-bound site (literals, transient builder state); the runtime treats those as untyped passthroughs.\n */\n readonly codec: CodecRef | undefined;\n\n constructor(\n value: unknown,\n options?: {\n name?: string;\n codec?: CodecRef;\n },\n ) {\n super();\n this.value = value;\n this.name = options?.name;\n this.codec = options?.codec ? frozenCodecRef(options.codec) : undefined;\n this.freeze();\n }\n\n static of(\n value: unknown,\n options?: {\n name?: string;\n codec?: CodecRef;\n },\n ): ParamRef {\n return new ParamRef(value, options);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.param(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.paramRef ? rewriter.paramRef(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.paramRef ? folder.paramRef(this) : folder.empty;\n }\n}\n\n/**\n * Bind-site placeholder: occupies the same positions as `ParamRef` in the\n * AST, but carries no value — the value is supplied per-execute by the\n * `PreparedStatement.execute(params)` caller and matched to this node by\n * `name`.\n */\nexport class PreparedParamRef extends Expression {\n readonly kind = 'prepared-param-ref' as const;\n readonly name: string;\n readonly codec: CodecRef;\n\n constructor(name: string, codec: CodecRef) {\n super();\n this.name = name;\n this.codec = frozenCodecRef(codec);\n this.freeze();\n }\n\n static of(name: string, codec: CodecRef): PreparedParamRef {\n return new PreparedParamRef(name, codec);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.preparedParam(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.preparedParamRef ? rewriter.preparedParamRef(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.preparedParamRef ? folder.preparedParamRef(this) : folder.empty;\n }\n}\n\nexport class DefaultValueExpr extends AstNode {\n readonly kind = 'default-value' as const;\n\n constructor() {\n super();\n this.freeze();\n }\n}\n\nexport class LiteralExpr extends Expression {\n readonly kind = 'literal' as const;\n readonly value: unknown;\n\n constructor(value: unknown) {\n super();\n this.value = value;\n this.freeze();\n }\n\n static of(value: unknown): LiteralExpr {\n return new LiteralExpr(value);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.literal(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.literal ? rewriter.literal(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.literal ? folder.literal(this) : folder.empty;\n }\n}\n\nexport class SubqueryExpr extends Expression {\n readonly kind = 'subquery' as const;\n readonly query: SelectAst;\n\n constructor(query: SelectAst) {\n super();\n this.query = query;\n this.freeze();\n }\n\n static of(query: SelectAst): SubqueryExpr {\n return new SubqueryExpr(query);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.subquery(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n const query = this.query.rewrite(rewriter);\n return new SubqueryExpr(query);\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.select ? folder.select(this.query) : folder.empty;\n }\n}\n\nexport class OperationExpr extends Expression {\n readonly kind = 'operation' as const;\n readonly method: string;\n readonly self: AnyExpression;\n readonly args: ReadonlyArray<AnyExpression | ParamRef | LiteralExpr>;\n readonly returns: ParamSpec;\n readonly lowering: SqlLoweringSpec;\n\n constructor(options: {\n readonly method: string;\n readonly self: AnyExpression;\n readonly args: ReadonlyArray<AnyExpression | ParamRef | LiteralExpr> | undefined;\n readonly returns: ParamSpec;\n readonly lowering: SqlLoweringSpec;\n }) {\n super();\n this.method = options.method;\n this.self = options.self;\n this.args = frozenArrayCopy(options.args ?? []);\n this.returns = options.returns;\n this.lowering = options.lowering;\n this.freeze();\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.operation(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new OperationExpr({\n method: this.method,\n self: this.self.rewrite(rewriter),\n args: this.args.map((arg) => rewriteComparable(arg, rewriter)),\n returns: this.returns,\n lowering: this.lowering,\n });\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(folder, [\n () => this.self.fold(folder),\n ...this.args.map((arg) => () => foldComparable(arg, folder)),\n ]);\n }\n\n override baseColumnRef(): ColumnRef {\n return this.self.baseColumnRef();\n }\n}\n\nexport class RawExpr extends Expression {\n readonly kind = 'raw-expr' as const;\n readonly parts: ReadonlyArray<string | AnyExpression>;\n readonly returns: ParamSpec;\n\n constructor(options: {\n readonly parts: ReadonlyArray<string | AnyExpression>;\n readonly returns: ParamSpec;\n }) {\n super();\n this.parts = frozenArrayCopy(options.parts);\n this.returns = options.returns;\n this.freeze();\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.rawExpr(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return rewriter.rawExpr ? rewriter.rawExpr(this) : this;\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n if (folder.rawExpr) {\n return folder.rawExpr(this);\n }\n return combineAll(\n folder,\n this.parts\n .filter((p): p is AnyExpression => typeof p !== 'string')\n .map((p) => () => p.fold(folder)),\n );\n }\n}\n\nexport class AggregateExpr extends Expression {\n readonly kind = 'aggregate' as const;\n readonly fn: AggregateFn;\n readonly expr: AnyExpression | undefined;\n\n constructor(fn: AggregateFn, expr?: AnyExpression) {\n super();\n if (fn !== 'count' && expr === undefined) {\n throw structuredError(\n 'ORM.ARGUMENT_INVALID',\n `Aggregate function \"${fn}\" requires an expression`,\n { meta: { fn } },\n );\n }\n this.fn = fn;\n this.expr = expr;\n this.freeze();\n }\n\n static count(expr?: AnyExpression): AggregateExpr {\n return new AggregateExpr('count', expr);\n }\n\n static sum(expr: AnyExpression): AggregateExpr {\n return new AggregateExpr('sum', expr);\n }\n\n static avg(expr: AnyExpression): AggregateExpr {\n return new AggregateExpr('avg', expr);\n }\n\n static min(expr: AnyExpression): AggregateExpr {\n return new AggregateExpr('min', expr);\n }\n\n static max(expr: AnyExpression): AggregateExpr {\n return new AggregateExpr('max', expr);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.aggregate(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return this.expr === undefined ? this : new AggregateExpr(this.fn, this.expr.rewrite(rewriter));\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return this.expr ? this.expr.fold(folder) : folder.empty;\n }\n}\n\n/**\n * Window function call: `fn(args) OVER (PARTITION BY ... ORDER BY ...)`.\n *\n * Both `partitionBy` and `orderBy` are optional; an empty `OVER ()`\n * clause is legal SQL but rarely useful. For `ROW_NUMBER`, `RANK`, and\n * `DENSE_RANK` the standard mandates an `ORDER BY` for deterministic\n * results — callers are expected to provide one, but the AST does not\n * enforce it.\n *\n * The `args` slot exists for future window function additions that take\n * arguments (e.g. `COUNT(*) OVER`, `SUM(x) OVER`); `ROW_NUMBER` and the\n * other ranking functions take no arguments.\n */\nexport class WindowFuncExpr extends Expression {\n readonly kind = 'window-func' as const;\n readonly fn: WindowFn;\n readonly args: ReadonlyArray<AnyExpression>;\n readonly partitionBy: ReadonlyArray<AnyExpression> | undefined;\n readonly orderBy: ReadonlyArray<OrderByItem> | undefined;\n\n constructor(options: {\n readonly fn: WindowFn;\n readonly args?: ReadonlyArray<AnyExpression>;\n readonly partitionBy?: ReadonlyArray<AnyExpression>;\n readonly orderBy?: ReadonlyArray<OrderByItem>;\n }) {\n super();\n this.fn = options.fn;\n this.args = options.args && options.args.length > 0 ? frozenArrayCopy(options.args) : [];\n this.partitionBy =\n options.partitionBy && options.partitionBy.length > 0\n ? frozenArrayCopy(options.partitionBy)\n : undefined;\n this.orderBy =\n options.orderBy && options.orderBy.length > 0 ? frozenArrayCopy(options.orderBy) : undefined;\n this.freeze();\n }\n\n static rowNumber(options: {\n readonly partitionBy?: ReadonlyArray<AnyExpression>;\n readonly orderBy?: ReadonlyArray<OrderByItem>;\n }): WindowFuncExpr {\n return new WindowFuncExpr({ fn: 'row_number', ...options });\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.windowFunc(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new WindowFuncExpr({\n fn: this.fn,\n args: this.args.map((arg) => arg.rewrite(rewriter)),\n ...ifDefined(\n 'partitionBy',\n this.partitionBy?.map((expr) => expr.rewrite(rewriter)),\n ),\n ...ifDefined(\n 'orderBy',\n this.orderBy?.map((orderItem) => orderItem.rewrite(rewriter)),\n ),\n });\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(folder, [\n ...this.args.map((arg) => () => arg.fold(folder)),\n ...(this.partitionBy ?? []).map((expr) => () => expr.fold(folder)),\n ...(this.orderBy ?? []).map((orderItem) => () => orderItem.expr.fold(folder)),\n ]);\n }\n}\n\nexport class FunctionCallExpr extends Expression {\n readonly kind = 'function-call' as const;\n readonly fn: string;\n readonly args: ReadonlyArray<AnyExpression>;\n\n constructor(fn: string, args: ReadonlyArray<AnyExpression>) {\n super();\n this.fn = fn;\n this.args = frozenArrayCopy(args);\n this.freeze();\n }\n\n static of(fn: string, args: ReadonlyArray<AnyExpression>): FunctionCallExpr {\n return new FunctionCallExpr(fn, args);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.functionCall(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new FunctionCallExpr(\n this.fn,\n this.args.map((arg) => arg.rewrite(rewriter)),\n );\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(\n folder,\n this.args.map((arg) => () => arg.fold(folder)),\n );\n }\n}\n\nexport class CastExpr extends Expression {\n readonly kind = 'cast' as const;\n readonly expr: AnyExpression;\n readonly targetType: string;\n\n constructor(expr: AnyExpression, targetType: string) {\n super();\n this.expr = expr;\n this.targetType = targetType;\n this.freeze();\n }\n\n static as(expr: AnyExpression, targetType: string): CastExpr {\n return new CastExpr(expr, targetType);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.cast(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new CastExpr(this.expr.rewrite(rewriter), this.targetType);\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return this.expr.fold(folder);\n }\n}\n\nexport interface CaseBranch {\n readonly condition: AnyExpression;\n readonly value: AnyExpression;\n}\n\nexport class CaseExpr extends Expression {\n readonly kind = 'case' as const;\n readonly branches: ReadonlyArray<Readonly<CaseBranch>>;\n readonly elseExpr: AnyExpression | undefined;\n\n constructor(branches: ReadonlyArray<CaseBranch>, elseExpr?: AnyExpression) {\n super();\n if (branches.length === 0) {\n throw structuredError('SQL.AST_INVALID', 'CaseExpr requires at least one branch', {\n meta: { kind: 'case', field: 'branches' },\n });\n }\n this.branches = Object.freeze(\n branches.map((branch) =>\n Object.freeze({\n condition: branch.condition,\n value: branch.value,\n }),\n ),\n );\n this.elseExpr = elseExpr;\n this.freeze();\n }\n\n static of(branches: ReadonlyArray<CaseBranch>, elseExpr?: AnyExpression): CaseExpr {\n return new CaseExpr(branches, elseExpr);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.case(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new CaseExpr(\n this.branches.map((branch) => ({\n condition: branch.condition.rewrite(rewriter),\n value: branch.value.rewrite(rewriter),\n })),\n this.elseExpr?.rewrite(rewriter),\n );\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n const elseExpr = this.elseExpr;\n return combineAll(folder, [\n ...this.branches.flatMap((branch) => [\n () => branch.condition.fold(folder),\n () => branch.value.fold(folder),\n ]),\n ...(elseExpr === undefined ? [] : [() => elseExpr.fold(folder)]),\n ]);\n }\n}\n\nexport class JsonObjectExpr extends Expression {\n readonly kind = 'json-object' as const;\n readonly entries: ReadonlyArray<JsonObjectEntry>;\n\n constructor(entries: ReadonlyArray<JsonObjectEntry>) {\n super();\n this.entries = frozenArrayCopy(entries.map((entry) => Object.freeze({ ...entry })));\n this.freeze();\n }\n\n static entry(key: string, value: AnyJsonValueProjection): JsonObjectEntry {\n return {\n key,\n value,\n };\n }\n\n static fromEntries(entries: ReadonlyArray<JsonObjectEntry>): JsonObjectExpr {\n return new JsonObjectExpr(entries);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.jsonObject(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new JsonObjectExpr(\n this.entries.map((entry) => ({\n key: entry.key,\n value: entry.value.rewrite(rewriter),\n })),\n );\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(\n folder,\n this.entries.map((entry) => () => entry.value.fold(folder)),\n );\n }\n}\n\nexport class OrderByItem extends AstNode {\n readonly kind = 'order-by-item' as const;\n readonly expr: AnyExpression;\n readonly dir: Direction;\n\n constructor(expr: AnyExpression, dir: Direction) {\n super();\n this.expr = expr;\n this.dir = dir;\n this.freeze();\n }\n\n static asc(expr: AnyExpression): OrderByItem {\n return new OrderByItem(expr, 'asc');\n }\n\n static desc(expr: AnyExpression): OrderByItem {\n return new OrderByItem(expr, 'desc');\n }\n\n rewrite(rewriter: ExpressionRewriter): OrderByItem {\n return new OrderByItem(this.expr.rewrite(rewriter), this.dir);\n }\n\n /**\n * A new frozen item with the sort direction flipped and `expr` unchanged.\n * Integrations that own pagination (e.g. backward cursor pagination) use\n * this to reverse a user's sort order without reaching into the AST.\n */\n reverse(): OrderByItem {\n return new OrderByItem(this.expr, this.dir === 'asc' ? 'desc' : 'asc');\n }\n}\n\nexport class JsonArrayAggExpr extends Expression {\n readonly kind = 'json-array-agg' as const;\n readonly expr: AnyJsonValueProjection;\n readonly onEmpty: 'null' | 'emptyArray';\n readonly orderBy: ReadonlyArray<OrderByItem> | undefined;\n\n constructor(\n expr: AnyJsonValueProjection,\n onEmpty: 'null' | 'emptyArray' = 'null',\n orderBy?: ReadonlyArray<OrderByItem>,\n ) {\n super();\n this.expr = expr;\n this.onEmpty = onEmpty;\n this.orderBy = orderBy && orderBy.length > 0 ? frozenArrayCopy(orderBy) : undefined;\n this.freeze();\n }\n\n static of(\n expr: AnyJsonValueProjection,\n onEmpty: 'null' | 'emptyArray' = 'null',\n orderBy?: ReadonlyArray<OrderByItem>,\n ): JsonArrayAggExpr {\n return new JsonArrayAggExpr(expr, onEmpty, orderBy);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.jsonArrayAgg(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new JsonArrayAggExpr(\n this.expr.rewrite(rewriter),\n this.onEmpty,\n this.orderBy?.map((orderItem) => orderItem.rewrite(rewriter)),\n );\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(folder, [\n () => this.expr.fold(folder),\n ...(this.orderBy ?? []).map((orderItem) => () => orderItem.expr.fold(folder)),\n ]);\n }\n}\n\nexport class ListExpression extends Expression {\n readonly kind = 'list' as const;\n readonly values: ReadonlyArray<AnyExpression>;\n\n constructor(values: ReadonlyArray<AnyExpression>) {\n super();\n this.values = frozenArrayCopy(values);\n this.freeze();\n }\n\n static of(values: ReadonlyArray<AnyExpression>): ListExpression {\n return new ListExpression(values);\n }\n\n static fromValues(values: ReadonlyArray<unknown>): ListExpression {\n return new ListExpression(values.map((value) => new LiteralExpr(value)));\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.list(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n if (rewriter.list) {\n return rewriter.list(this);\n }\n\n return new ListExpression(this.values.map((value) => value.rewrite(rewriter)));\n }\n\n fold<T>(folder: ExpressionFolder<T>): T {\n if (folder.list) {\n return folder.list(this);\n }\n return combineAll(\n folder,\n this.values.map((value) => () => value.fold(folder)),\n );\n }\n}\n\nexport class BinaryExpr extends Expression {\n readonly kind = 'binary' as const;\n readonly op: BinaryOp;\n readonly left: AnyExpression;\n readonly right: AnyExpression;\n\n constructor(op: BinaryOp, left: AnyExpression, right: AnyExpression) {\n super();\n this.op = op;\n this.left = left;\n this.right = right;\n this.freeze();\n }\n\n static eq(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('eq', left, right);\n }\n\n static neq(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('neq', left, right);\n }\n\n static gt(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('gt', left, right);\n }\n\n static lt(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('lt', left, right);\n }\n\n static gte(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('gte', left, right);\n }\n\n static lte(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('lte', left, right);\n }\n\n static like(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('like', left, right);\n }\n\n static in(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('in', left, right);\n }\n\n static notIn(left: AnyExpression, right: AnyExpression): BinaryExpr {\n return new BinaryExpr('notIn', left, right);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.binary(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new BinaryExpr(\n this.op,\n rewriteComparable(this.left, rewriter),\n rewriteComparable(this.right, rewriter),\n );\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(folder, [\n () => foldComparable(this.left, folder),\n () => foldComparable(this.right, folder),\n ]);\n }\n}\n\nexport class AndExpr extends Expression {\n readonly kind = 'and' as const;\n readonly exprs: ReadonlyArray<AnyExpression>;\n\n constructor(exprs: ReadonlyArray<AnyExpression>) {\n super();\n this.exprs = frozenArrayCopy(exprs);\n this.freeze();\n }\n\n static of(exprs: ReadonlyArray<AnyExpression>): AndExpr {\n return new AndExpr(exprs);\n }\n\n static true(): AndExpr {\n return new AndExpr([]);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.and(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new AndExpr(this.exprs.map((expr) => expr.rewrite(rewriter)));\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(\n folder,\n this.exprs.map((expr) => () => expr.fold(folder)),\n );\n }\n}\n\nexport class OrExpr extends Expression {\n readonly kind = 'or' as const;\n readonly exprs: ReadonlyArray<AnyExpression>;\n\n constructor(exprs: ReadonlyArray<AnyExpression>) {\n super();\n this.exprs = frozenArrayCopy(exprs);\n this.freeze();\n }\n\n static of(exprs: ReadonlyArray<AnyExpression>): OrExpr {\n return new OrExpr(exprs);\n }\n\n static false(): OrExpr {\n return new OrExpr([]);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.or(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new OrExpr(this.exprs.map((expr) => expr.rewrite(rewriter)));\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return combineAll(\n folder,\n this.exprs.map((expr) => () => expr.fold(folder)),\n );\n }\n}\n\nexport class ExistsExpr extends Expression {\n readonly kind = 'exists' as const;\n readonly notExists: boolean;\n readonly subquery: SelectAst;\n\n constructor(subquery: SelectAst, notExists = false) {\n super();\n this.notExists = notExists;\n this.subquery = subquery;\n this.freeze();\n }\n\n static exists(subquery: SelectAst): ExistsExpr {\n return new ExistsExpr(subquery, false);\n }\n\n static notExists(subquery: SelectAst): ExistsExpr {\n return new ExistsExpr(subquery, true);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.exists(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new ExistsExpr(this.subquery.rewrite(rewriter), this.notExists);\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return folder.select ? folder.select(this.subquery) : folder.empty;\n }\n}\n\nexport class NullCheckExpr extends Expression {\n readonly kind = 'null-check' as const;\n readonly expr: AnyExpression;\n readonly isNull: boolean;\n\n constructor(expr: AnyExpression, isNull: boolean) {\n super();\n this.expr = expr;\n this.isNull = isNull;\n this.freeze();\n }\n\n static isNull(expr: AnyExpression): NullCheckExpr {\n return new NullCheckExpr(expr, true);\n }\n\n static isNotNull(expr: AnyExpression): NullCheckExpr {\n return new NullCheckExpr(expr, false);\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.nullCheck(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new NullCheckExpr(this.expr.rewrite(rewriter), this.isNull);\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return this.expr.fold(folder);\n }\n}\n\nexport class NotExpr extends Expression {\n readonly kind = 'not' as const;\n readonly expr: AnyExpression;\n\n constructor(expr: AnyExpression) {\n super();\n this.expr = expr;\n this.freeze();\n }\n\n toWhereExpr(): AnyExpression {\n return this;\n }\n\n override accept<R>(visitor: ExprVisitor<R>): R {\n return visitor.not(this);\n }\n\n override rewrite(rewriter: ExpressionRewriter): AnyExpression {\n return new NotExpr(this.expr.rewrite(rewriter));\n }\n\n override fold<T>(folder: ExpressionFolder<T>): T {\n return this.expr.fold(folder);\n }\n}\n\nexport class EqColJoinOn extends AstNode {\n readonly kind = 'eq-col-join-on' as const;\n readonly left: ColumnRef;\n readonly right: ColumnRef;\n\n constructor(left: ColumnRef, right: ColumnRef) {\n super();\n this.left = left;\n this.right = right;\n this.freeze();\n }\n\n static of(left: ColumnRef, right: ColumnRef): EqColJoinOn {\n return new EqColJoinOn(left, right);\n }\n\n rewrite(rewriter: AstRewriter): EqColJoinOn | AnyExpression {\n return rewriter.eqColJoinOn ? rewriter.eqColJoinOn(this) : this;\n }\n}\n\nexport class JoinAst extends AstNode {\n readonly kind = 'join' as const;\n readonly joinType: 'inner' | 'left' | 'right' | 'full';\n readonly source: AnyFromSource;\n readonly lateral: boolean;\n readonly on: JoinOnExpr;\n\n constructor(\n joinType: 'inner' | 'left' | 'right' | 'full',\n source: AnyFromSource,\n on: JoinOnExpr,\n lateral = false,\n ) {\n super();\n this.joinType = joinType;\n this.source = source;\n this.lateral = lateral;\n this.on = on;\n this.freeze();\n }\n\n static inner(source: AnyFromSource, on: JoinOnExpr, lateral = false): JoinAst {\n return new JoinAst('inner', source, on, lateral);\n }\n\n static left(source: AnyFromSource, on: JoinOnExpr, lateral = false): JoinAst {\n return new JoinAst('left', source, on, lateral);\n }\n\n static right(source: AnyFromSource, on: JoinOnExpr, lateral = false): JoinAst {\n return new JoinAst('right', source, on, lateral);\n }\n\n static full(source: AnyFromSource, on: JoinOnExpr, lateral = false): JoinAst {\n return new JoinAst('full', source, on, lateral);\n }\n\n rewrite(rewriter: AstRewriter): JoinAst {\n return new JoinAst(\n this.joinType,\n this.source.rewrite(rewriter),\n this.on.kind === 'eq-col-join-on' ? this.on.rewrite(rewriter) : this.on.rewrite(rewriter),\n this.lateral,\n );\n }\n}\n\nexport class ProjectionItem extends AstNode {\n readonly kind = 'projection-item' as const;\n readonly alias: string;\n readonly expr: ProjectionExpr;\n /**\n * Codec identity for any known projected result, whether read directly from a contract column or forwarded through a query wrapper. Decode-side dispatch resolves the per-instance codec through `contractCodecs.forCodecRef(codec)` — content-keyed memoisation collapses repeated lookups for the same logical result onto one shared {@link Codec}.\n *\n * Stays `undefined` only when the projected result's codec is unknown, such as computed expressions, subqueries, or raw aliases whose decoded type the runtime cannot infer.\n */\n readonly codec: CodecRef | undefined;\n\n constructor(alias: string, expr: ProjectionExpr, codec?: CodecRef) {\n super();\n this.alias = alias;\n this.expr = expr;\n this.codec = codec ? frozenCodecRef(codec) : undefined;\n this.freeze();\n }\n\n static of(alias: string, expr: ProjectionExpr, codec?: CodecRef): ProjectionItem {\n return new ProjectionItem(alias, expr, codec);\n }\n\n withCodec(codec: CodecRef | undefined): ProjectionItem {\n return new ProjectionItem(this.alias, this.expr, codec);\n }\n}\n\nexport type LimitOffsetValue = number | AnyExpression;\n\nexport interface SelectAstOptions {\n readonly from?: AnyFromSource;\n readonly joins: ReadonlyArray<JoinAst> | undefined;\n readonly projection: ReadonlyArray<ProjectionItem>;\n readonly where: AnyExpression | undefined;\n readonly orderBy: ReadonlyArray<OrderByItem> | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: ReadonlyArray<AnyExpression> | undefined;\n readonly groupBy: ReadonlyArray<AnyExpression> | undefined;\n readonly having: AnyExpression | undefined;\n readonly limit: LimitOffsetValue | undefined;\n readonly offset: LimitOffsetValue | undefined;\n readonly selectAllIntent: { readonly table?: string } | undefined;\n}\n\nexport class SelectAst extends QueryAst {\n readonly kind = 'select' as const;\n readonly from: AnyFromSource | undefined;\n readonly joins: ReadonlyArray<JoinAst> | undefined;\n readonly projection: ReadonlyArray<ProjectionItem>;\n readonly where: AnyExpression | undefined;\n readonly orderBy: ReadonlyArray<OrderByItem> | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: ReadonlyArray<AnyExpression> | undefined;\n readonly groupBy: ReadonlyArray<AnyExpression> | undefined;\n readonly having: AnyExpression | undefined;\n readonly limit: LimitOffsetValue | undefined;\n readonly offset: LimitOffsetValue | undefined;\n readonly selectAllIntent: { readonly table?: string } | undefined;\n\n constructor(options: SelectAstOptions) {\n super();\n this.from = options.from;\n this.joins =\n options.joins && options.joins.length > 0 ? frozenArrayCopy(options.joins) : undefined;\n this.projection = frozenArrayCopy(options.projection);\n this.where = options.where;\n this.orderBy =\n options.orderBy && options.orderBy.length > 0 ? frozenArrayCopy(options.orderBy) : undefined;\n this.distinct = options.distinct;\n this.distinctOn =\n options.distinctOn && options.distinctOn.length > 0\n ? frozenArrayCopy(options.distinctOn)\n : undefined;\n this.groupBy =\n options.groupBy && options.groupBy.length > 0 ? frozenArrayCopy(options.groupBy) : undefined;\n this.having = options.having;\n this.limit = options.limit;\n this.offset = options.offset;\n this.selectAllIntent = frozenOptionalRecordCopy(options.selectAllIntent);\n this.freeze();\n }\n\n static from(from: AnyFromSource): SelectAst {\n return new SelectAst({\n from,\n joins: undefined,\n projection: [],\n where: undefined,\n orderBy: undefined,\n distinct: undefined,\n distinctOn: undefined,\n groupBy: undefined,\n having: undefined,\n limit: undefined,\n offset: undefined,\n selectAllIntent: undefined,\n });\n }\n\n static noFrom(): SelectAst {\n return new SelectAst({\n joins: undefined,\n projection: [],\n where: undefined,\n orderBy: undefined,\n distinct: undefined,\n distinctOn: undefined,\n groupBy: undefined,\n having: undefined,\n limit: undefined,\n offset: undefined,\n selectAllIntent: undefined,\n });\n }\n\n private toOptions(): SelectAstOptions {\n return {\n ...(this.from !== undefined ? { from: this.from } : {}),\n joins: this.joins,\n projection: this.projection,\n where: this.where,\n orderBy: this.orderBy,\n distinct: this.distinct,\n distinctOn: this.distinctOn,\n groupBy: this.groupBy,\n having: this.having,\n limit: this.limit,\n offset: this.offset,\n selectAllIntent: this.selectAllIntent,\n };\n }\n\n withFrom(from: AnyFromSource): SelectAst {\n return new SelectAst({ ...this.toOptions(), from });\n }\n\n withJoins(joins: ReadonlyArray<JoinAst>): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n joins: joins.length > 0 ? joins : undefined,\n });\n }\n\n withProjection(projection: ReadonlyArray<ProjectionItem>): SelectAst {\n return new SelectAst({ ...this.toOptions(), projection });\n }\n\n addProjection(alias: string, expr: ProjectionExpr): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n projection: [...this.projection, new ProjectionItem(alias, expr)],\n });\n }\n\n withWhere(where: AnyExpression | undefined): SelectAst {\n return new SelectAst({ ...this.toOptions(), where });\n }\n\n withOrderBy(orderBy: ReadonlyArray<OrderByItem>): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n orderBy: orderBy.length > 0 ? orderBy : undefined,\n });\n }\n\n withDistinct(enabled = true): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n distinct: enabled ? true : undefined,\n });\n }\n\n withDistinctOn(distinctOn: ReadonlyArray<AnyExpression>): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n distinctOn: distinctOn.length > 0 ? distinctOn : undefined,\n });\n }\n\n withGroupBy(groupBy: ReadonlyArray<AnyExpression>): SelectAst {\n return new SelectAst({\n ...this.toOptions(),\n groupBy: groupBy.length > 0 ? groupBy : undefined,\n });\n }\n\n withHaving(having: AnyExpression | undefined): SelectAst {\n return new SelectAst({ ...this.toOptions(), having });\n }\n\n withLimit(limit: LimitOffsetValue | undefined): SelectAst {\n return new SelectAst({ ...this.toOptions(), limit });\n }\n\n withOffset(offset: LimitOffsetValue | undefined): SelectAst {\n return new SelectAst({ ...this.toOptions(), offset });\n }\n\n withSelectAllIntent(selectAllIntent: { readonly table?: string } | undefined): SelectAst {\n return new SelectAst({ ...this.toOptions(), selectAllIntent });\n }\n\n rewrite(rewriter: AstRewriter): SelectAst {\n const rewrittenFrom = this.from?.rewrite(rewriter);\n const rewritten = new SelectAst({\n ...(rewrittenFrom !== undefined ? { from: rewrittenFrom } : {}),\n joins: this.joins?.map((join) => join.rewrite(rewriter)),\n projection: this.projection.map(\n (projection) =>\n new ProjectionItem(\n projection.alias,\n projection.expr.kind === 'literal'\n ? rewriter.literal\n ? rewriter.literal(projection.expr)\n : projection.expr\n : projection.expr.rewrite(rewriter),\n projection.codec,\n ),\n ),\n where: this.where?.rewrite(rewriter),\n orderBy: this.orderBy?.map((orderItem) => orderItem.rewrite(rewriter)),\n distinct: this.distinct,\n distinctOn: this.distinctOn?.map((expr) => expr.rewrite(rewriter)),\n groupBy: this.groupBy?.map((expr) => expr.rewrite(rewriter)),\n having: this.having?.rewrite(rewriter),\n limit: rewriteLimitOffset(this.limit, rewriter),\n offset: rewriteLimitOffset(this.offset, rewriter),\n selectAllIntent: this.selectAllIntent,\n });\n\n return rewriter.select ? rewriter.select(rewritten) : rewritten;\n }\n\n collectColumnRefs(): ColumnRef[] {\n const refs: ColumnRef[] = [];\n const pushRefs = (columns: ReadonlyArray<ColumnRef>) => {\n refs.push(...columns);\n };\n\n if (this.from?.kind === 'derived-table-source') {\n pushRefs(this.from.query.collectColumnRefs());\n } else if (this.from?.kind === 'function-source') {\n for (const arg of this.from.args) {\n pushRefs(arg.collectColumnRefs());\n }\n }\n\n for (const projection of this.projection) {\n if (!(projection.expr.kind === 'literal')) {\n pushRefs(projection.expr.collectColumnRefs());\n }\n }\n\n if (this.where) {\n pushRefs(this.where.collectColumnRefs());\n }\n if (this.having) {\n pushRefs(this.having.collectColumnRefs());\n }\n for (const orderItem of this.orderBy ?? []) {\n pushRefs(orderItem.expr.collectColumnRefs());\n }\n for (const expr of this.distinctOn ?? []) {\n pushRefs(expr.collectColumnRefs());\n }\n for (const expr of this.groupBy ?? []) {\n pushRefs(expr.collectColumnRefs());\n }\n for (const join of this.joins ?? []) {\n if (join.source.kind === 'derived-table-source') {\n pushRefs(join.source.query.collectColumnRefs());\n } else if (join.source.kind === 'function-source') {\n for (const arg of join.source.args) {\n pushRefs(arg.collectColumnRefs());\n }\n }\n if (join.on.kind === 'eq-col-join-on') {\n refs.push(join.on.left, join.on.right);\n } else {\n pushRefs(join.on.collectColumnRefs());\n }\n }\n if (typeof this.limit === 'object') {\n pushRefs(this.limit.collectColumnRefs());\n }\n if (typeof this.offset === 'object') {\n pushRefs(this.offset.collectColumnRefs());\n }\n\n return refs;\n }\n\n collectParamRefs(): AnyParamRef[] {\n const refs: AnyParamRef[] = [];\n const pushRefs = (params: ReadonlyArray<AnyParamRef>) => {\n refs.push(...params);\n };\n\n if (this.from?.kind === 'derived-table-source') {\n pushRefs(this.from.query.collectParamRefs());\n } else if (this.from?.kind === 'function-source') {\n for (const arg of this.from.args) {\n pushRefs(arg.collectParamRefs());\n }\n }\n\n for (const projection of this.projection) {\n if (!(projection.expr.kind === 'literal')) {\n pushRefs(projection.expr.collectParamRefs());\n }\n }\n\n if (this.where) {\n pushRefs(this.where.collectParamRefs());\n }\n if (this.having) {\n pushRefs(this.having.collectParamRefs());\n }\n for (const orderItem of this.orderBy ?? []) {\n pushRefs(orderItem.expr.collectParamRefs());\n }\n for (const expr of this.distinctOn ?? []) {\n pushRefs(expr.collectParamRefs());\n }\n for (const expr of this.groupBy ?? []) {\n pushRefs(expr.collectParamRefs());\n }\n for (const join of this.joins ?? []) {\n if (join.source.kind === 'derived-table-source') {\n pushRefs(join.source.query.collectParamRefs());\n } else if (join.source.kind === 'function-source') {\n for (const arg of join.source.args) {\n pushRefs(arg.collectParamRefs());\n }\n }\n if (!(join.on.kind === 'eq-col-join-on')) {\n pushRefs(join.on.collectParamRefs());\n }\n }\n if (typeof this.limit === 'object') {\n pushRefs(this.limit.collectParamRefs());\n }\n if (typeof this.offset === 'object') {\n pushRefs(this.offset.collectParamRefs());\n }\n\n return refs;\n }\n\n override toQueryAst(): AnyQueryAst {\n return this;\n }\n}\n\nabstract class InsertOnConflictAction extends AstNode {\n abstract toInsertOnConflictAction(): AnyInsertOnConflictAction;\n}\n\nexport class DoNothingConflictAction extends InsertOnConflictAction {\n readonly kind = 'do-nothing' as const;\n\n constructor() {\n super();\n this.freeze();\n }\n\n override toInsertOnConflictAction(): AnyInsertOnConflictAction {\n return this;\n }\n}\n\nexport class DoUpdateSetConflictAction extends InsertOnConflictAction {\n readonly kind = 'do-update-set' as const;\n readonly set: Readonly<Record<string, AnyExpression>>;\n\n constructor(set: Readonly<Record<string, AnyExpression>>) {\n super();\n this.set = frozenRecordCopy(set);\n this.freeze();\n }\n\n override toInsertOnConflictAction(): AnyInsertOnConflictAction {\n return this;\n }\n}\n\nexport class InsertOnConflict extends AstNode {\n readonly kind = 'insert-on-conflict' as const;\n readonly columns: ReadonlyArray<ColumnRef>;\n readonly action: AnyInsertOnConflictAction;\n\n constructor(columns: ReadonlyArray<ColumnRef>, action: AnyInsertOnConflictAction) {\n super();\n this.columns = frozenArrayCopy(columns);\n this.action = action;\n this.freeze();\n }\n\n static on(columns: ReadonlyArray<ColumnRef>): InsertOnConflict {\n return new InsertOnConflict(columns, new DoNothingConflictAction());\n }\n\n doNothing(): InsertOnConflict {\n return new InsertOnConflict(this.columns, new DoNothingConflictAction());\n }\n\n doUpdateSet(set: Readonly<Record<string, AnyExpression>>): InsertOnConflict {\n return new InsertOnConflict(this.columns, new DoUpdateSetConflictAction(set));\n }\n}\n\nexport class InsertAst extends QueryAst {\n readonly kind = 'insert' as const;\n readonly table: TableSource;\n readonly rows: ReadonlyArray<Readonly<Record<string, InsertValue>>>;\n readonly onConflict: InsertOnConflict | undefined;\n readonly returning: ReadonlyArray<ProjectionItem> | undefined;\n\n constructor(\n table: TableSource,\n rows: ReadonlyArray<Record<string, InsertValue>> = [{}],\n onConflict?: InsertOnConflict,\n returning?: ReadonlyArray<ProjectionItem>,\n ) {\n super();\n this.table = table;\n this.rows = freezeRows(rows);\n this.onConflict = onConflict;\n this.returning = returning && returning.length > 0 ? frozenArrayCopy(returning) : undefined;\n this.freeze();\n }\n\n static into(table: TableSource): InsertAst {\n return new InsertAst(table);\n }\n\n withRows(rows: ReadonlyArray<Record<string, InsertValue>>): InsertAst {\n return new InsertAst(\n this.table,\n rows.map((row) => ({ ...row })),\n this.onConflict,\n this.returning,\n );\n }\n\n withReturning(returning: ReadonlyArray<ProjectionItem> | undefined): InsertAst {\n return new InsertAst(\n this.table,\n this.rows.map((row) => ({ ...row })),\n this.onConflict,\n returning,\n );\n }\n\n withOnConflict(onConflict: InsertOnConflict | undefined): InsertAst {\n return new InsertAst(\n this.table,\n this.rows.map((row) => ({ ...row })),\n onConflict,\n this.returning,\n );\n }\n\n rewrite(rewriter: AstRewriter): InsertAst {\n return new InsertAst(\n rewriteTableSource(this.table, rewriter),\n this.rows.map((row) => rewriteInsertRow(row, rewriter)),\n this.onConflict ? rewriteOnConflict(this.onConflict, rewriter) : undefined,\n this.returning?.map((item) => rewriteProjectionItem(item, rewriter)),\n );\n }\n\n override collectParamRefs(): AnyParamRef[] {\n const refs: AnyParamRef[] = [];\n for (const row of this.rows) {\n for (const value of Object.values(row)) {\n if (value.kind === 'param-ref' || value.kind === 'prepared-param-ref') {\n refs.push(value);\n } else if (value.kind === 'raw-expr') {\n refs.push(...value.collectParamRefs());\n }\n }\n }\n if (this.onConflict?.action.kind === 'do-update-set') {\n for (const value of Object.values(this.onConflict.action.set)) {\n if (value.kind === 'param-ref' || value.kind === 'prepared-param-ref') {\n refs.push(value);\n }\n }\n }\n for (const item of this.returning ?? []) {\n if (item.expr.kind !== 'literal') {\n refs.push(...item.expr.collectParamRefs());\n }\n }\n return refs;\n }\n\n override toQueryAst(): AnyQueryAst {\n return this;\n }\n}\n\nexport class UpdateAst extends QueryAst {\n readonly kind = 'update' as const;\n readonly table: TableSource;\n readonly set: Readonly<Record<string, AnyExpression>>;\n readonly where: AnyExpression | undefined;\n readonly returning: ReadonlyArray<ProjectionItem> | undefined;\n\n constructor(\n table: TableSource,\n set: Readonly<Record<string, AnyExpression>> = {},\n where?: AnyExpression,\n returning?: ReadonlyArray<ProjectionItem>,\n ) {\n super();\n this.table = table;\n this.set = frozenRecordCopy(set);\n this.where = where;\n this.returning = returning && returning.length > 0 ? frozenArrayCopy(returning) : undefined;\n this.freeze();\n }\n\n static table(table: TableSource): UpdateAst {\n return new UpdateAst(table);\n }\n\n withSet(set: Readonly<Record<string, AnyExpression>>): UpdateAst {\n return new UpdateAst(this.table, set, this.where, this.returning);\n }\n\n withWhere(where: AnyExpression | undefined): UpdateAst {\n return new UpdateAst(this.table, this.set, where, this.returning);\n }\n\n withReturning(returning: ReadonlyArray<ProjectionItem> | undefined): UpdateAst {\n return new UpdateAst(this.table, this.set, this.where, returning);\n }\n\n rewrite(rewriter: AstRewriter): UpdateAst {\n return new UpdateAst(\n rewriteTableSource(this.table, rewriter),\n rewriteUpdateSet(this.set, rewriter),\n this.where?.rewrite(rewriter),\n this.returning?.map((item) => rewriteProjectionItem(item, rewriter)),\n );\n }\n\n override collectParamRefs(): AnyParamRef[] {\n const refs: AnyParamRef[] = [];\n for (const value of Object.values(this.set)) {\n refs.push(...value.collectParamRefs());\n }\n if (this.where) {\n refs.push(...this.where.collectParamRefs());\n }\n for (const item of this.returning ?? []) {\n if (item.expr.kind !== 'literal') {\n refs.push(...item.expr.collectParamRefs());\n }\n }\n return refs;\n }\n\n override toQueryAst(): AnyQueryAst {\n return this;\n }\n}\n\nexport class DeleteAst extends QueryAst {\n readonly kind = 'delete' as const;\n readonly table: TableSource;\n readonly where: AnyExpression | undefined;\n readonly returning: ReadonlyArray<ProjectionItem> | undefined;\n\n constructor(\n table: TableSource,\n where?: AnyExpression,\n returning?: ReadonlyArray<ProjectionItem>,\n ) {\n super();\n this.table = table;\n this.where = where;\n this.returning = returning && returning.length > 0 ? frozenArrayCopy(returning) : undefined;\n this.freeze();\n }\n\n static from(table: TableSource): DeleteAst {\n return new DeleteAst(table);\n }\n\n withWhere(where: AnyExpression | undefined): DeleteAst {\n return new DeleteAst(this.table, where, this.returning);\n }\n\n withReturning(returning: ReadonlyArray<ProjectionItem> | undefined): DeleteAst {\n return new DeleteAst(this.table, this.where, returning);\n }\n\n rewrite(rewriter: AstRewriter): DeleteAst {\n return new DeleteAst(\n rewriteTableSource(this.table, rewriter),\n this.where?.rewrite(rewriter),\n this.returning?.map((item) => rewriteProjectionItem(item, rewriter)),\n );\n }\n\n override collectParamRefs(): AnyParamRef[] {\n const refs: AnyParamRef[] = [];\n if (this.where) {\n refs.push(...this.where.collectParamRefs());\n }\n for (const item of this.returning ?? []) {\n if (item.expr.kind !== 'literal') {\n refs.push(...item.expr.collectParamRefs());\n }\n }\n return refs;\n }\n\n override toQueryAst(): AnyQueryAst {\n return this;\n }\n}\n\n/**\n * Raw-SQL query AST node carrying interpolated parameter / expression nodes\n * embedded inside literal SQL fragments.\n *\n * `fragments` and `args` are interleaved during lowering:\n * `fragments[0] + lower(args[0]) + fragments[1] + ... + fragments[n]`.\n * Construction enforces `fragments.length === args.length + 1`.\n *\n * Extends {@link QueryAst} (whole-query AST, not a sub-expression).\n * Construction does not validate that each arg is a `ParamRef` /\n * `AnyExpression`: the type system already rejects bare values because\n * `args` is typed `readonly AnyExpression[]`. The user-facing `raw\\`...\\``\n * factory (separate `sql-raw-factory` component) layers stricter\n * type-level rejection on top of this AST node.\n */\nexport class RawSqlExpr extends QueryAst {\n readonly kind = 'raw-sql' as const;\n readonly fragments: readonly string[];\n readonly args: readonly AnyExpression[];\n\n constructor(fragments: readonly string[], args: readonly AnyExpression[]) {\n super();\n if (fragments.length !== args.length + 1) {\n throw new InternalError(\n `RawSqlExpr: fragments.length must equal args.length + 1 (got fragments=${fragments.length}, args=${args.length})`,\n );\n }\n this.fragments = Object.freeze([...fragments]);\n this.args = Object.freeze([...args]);\n this.freeze();\n }\n\n static of(fragments: readonly string[], args: readonly AnyExpression[]): RawSqlExpr {\n return new RawSqlExpr(fragments, args);\n }\n\n override collectParamRefs(): AnyParamRef[] {\n const refs: AnyParamRef[] = [];\n for (const arg of this.args) {\n if (arg.kind === 'param-ref') {\n refs.push(arg);\n } else {\n refs.push(...arg.collectParamRefs());\n }\n }\n return refs;\n }\n\n override toQueryAst(): AnyQueryAst {\n return this;\n }\n}\n\nexport type AnyQueryAst = SelectAst | InsertAst | UpdateAst | DeleteAst | RawSqlExpr;\nexport type AnyFromSource = TableSource | DerivedTableSource | FunctionSource;\nexport type AnyExpression =\n | ColumnRef\n | IdentifierRef\n | ParamRef\n | PreparedParamRef\n | LiteralExpr\n | SubqueryExpr\n | OperationExpr\n | AggregateExpr\n | WindowFuncExpr\n | FunctionCallExpr\n | CastExpr\n | CaseExpr\n | JsonObjectExpr\n | JsonArrayAggExpr\n | ListExpression\n | BinaryExpr\n | AndExpr\n | OrExpr\n | ExistsExpr\n | NullCheckExpr\n | NotExpr\n | RawExpr;\nexport type AnyParamRef = ParamRef | PreparedParamRef;\nexport type AnyInsertOnConflictAction = DoNothingConflictAction | DoUpdateSetConflictAction;\nexport type AnyInsertValue = ColumnRef | ParamRef | PreparedParamRef | DefaultValueExpr | RawExpr;\nexport type AnyOperationArg = AnyExpression | ParamRef | PreparedParamRef | LiteralExpr;\n\nexport const queryAstKinds: ReadonlySet<string> = new Set<AnyQueryAst['kind']>([\n 'select',\n 'insert',\n 'update',\n 'delete',\n 'raw-sql',\n]);\nexport const whereExprKinds: ReadonlySet<string> = new Set<AnyExpression['kind']>([\n 'binary',\n 'and',\n 'or',\n 'exists',\n 'null-check',\n 'not',\n]);\n\nexport function isQueryAst(value: unknown): value is AnyQueryAst {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n typeof value.kind === 'string' &&\n queryAstKinds.has(value.kind)\n );\n}\n\nexport function isWhereExpr(value: unknown): value is AnyExpression {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n typeof value.kind === 'string' &&\n whereExprKinds.has(value.kind)\n );\n}\n\nexport interface ToWhereExpr {\n toWhereExpr(): AnyExpression;\n}\n\n/**\n * One positional slot of a lowered SQL statement.\n *\n * - `literal` — a value baked into the AST; passes through to the driver.\n * - `bind` — a `PreparedParamRef` placeholder; the runtime resolves the\n * value from the per-execute `userParams[name]` before calling the driver.\n *\n * The same `name` may legitimately appear in multiple `bind` slots when a\n * renderer does not dedupe `PreparedParamRef` occurrences (e.g. SQLite's\n * positional `?` walker calls `ast.collectParamRefs()` directly rather than\n * `collectOrderedParamRefs`); resolution-by-name handles that case\n * correctly. See `collectOrderedParamRefs` in `./util` for the dedupe\n * contract used by Postgres' `$N` renderer.\n */\nexport type LoweredParam =\n | { readonly kind: 'literal'; readonly value: unknown }\n | { readonly kind: 'bind'; readonly name: string };\n\nexport interface LoweredStatement {\n readonly sql: string;\n readonly params: readonly LoweredParam[];\n readonly annotations?: Record<string, unknown>;\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as ExecutionContext } from "./query-lane-context-
|
|
3
|
-
import { t as SqlExecutionPlan } from "./sql-execution-plan-
|
|
4
|
-
import { t as SqlQueryPlan } from "./plan-
|
|
1
|
+
import { et as ParamRef, y as ColumnRef } from "./types-CWlaErjN.mjs";
|
|
2
|
+
import { r as ExecutionContext } from "./query-lane-context-DTCOHMXn.mjs";
|
|
3
|
+
import { t as SqlExecutionPlan } from "./sql-execution-plan-B-C-6cZN.mjs";
|
|
4
|
+
import { t as SqlQueryPlan } from "./plan-Dq94efZJ.mjs";
|
|
5
5
|
import { Contract } from "@prisma-next/contract/types";
|
|
6
6
|
import { RuntimeExecutor } from "@prisma-next/framework-components/runtime";
|
|
7
7
|
import { ExtractFieldOutputTypes, SqlStorage, StorageColumn } from "@prisma-next/sql-contract/types";
|
|
@@ -240,4 +240,4 @@ interface SqlBuilderOptions<TContract extends Contract<SqlStorage> = Contract<Sq
|
|
|
240
240
|
}
|
|
241
241
|
//#endregion
|
|
242
242
|
export { TableMetadata as C, SqlOrmPlan as E, TableKey as S, RuntimeScope as T, RawTemplateFactory as _, ColumnsOf as a, SqlPlan as b, META as c, ModelMetadata as d, OperationTypeSignature as f, RawFunctionOptions as g, RawFactory as h, ColumnResolutionContract as i, Meta as l, OperationsForTypeId as m, BuildParamsMap as n, ComputeColumnJsType as o, OperationTypes as p, CodecTypes as r, Expr as s, BuildOptions as t, ModelDef as u, RawTemplateOptions as v, TablesOf as w, TableDef as x, SqlBuilderOptions as y };
|
|
243
|
-
//# sourceMappingURL=types-
|
|
243
|
+
//# sourceMappingURL=types-CRV7uuOC.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-CRV7uuOC.d.mts","names":[],"sources":["../src/runtime-scope.ts","../src/types.ts"],"mappings":"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"}
|