@prisma-next/sql-builder 0.13.0-dev.32 → 0.13.0-dev.34
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/{db-Ba99KmSZ.d.mts → db-BS_UG1Si.d.mts} +32 -21
- package/dist/{db-Ba99KmSZ.d.mts.map → db-BS_UG1Si.d.mts.map} +1 -1
- package/dist/exports/types.d.mts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/runtime/index.d.mts +2 -2
- package/dist/runtime/index.mjs.map +1 -1
- package/package.json +14 -14
- package/src/runtime/sql.ts +3 -0
- package/src/runtime/table-proxy-impl.ts +16 -8
- package/src/types/db.ts +31 -3
- package/src/types/table-proxy.ts +93 -74
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AnyFromSource, SelectAst } from "@prisma-next/sql-relational-core/ast";
|
|
2
2
|
import { CodecExpression, CodecTypesBase, Expression as Expression$1, RawSqlTag, ScopeField, TraitExpression } from "@prisma-next/sql-relational-core/expression";
|
|
3
3
|
import { AnnotationValue, OperationKind, ValidAnnotations } from "@prisma-next/framework-components/runtime";
|
|
4
|
-
import { ExtractCodecTypes, ExtractFieldInputTypes,
|
|
5
|
-
import {
|
|
4
|
+
import { ExtractCodecTypes, ExtractFieldInputTypes, ExtractQueryOperationTypes, QueryOperationTypesBase, StorageTable, StorageTable as StorageTable$1 } from "@prisma-next/sql-contract/types";
|
|
5
|
+
import { ComputeColumnJsType } from "@prisma-next/sql-relational-core/types";
|
|
6
6
|
import { SqlQueryPlan } from "@prisma-next/sql-relational-core/plan";
|
|
7
7
|
|
|
8
8
|
//#region src/scope.d.ts
|
|
@@ -302,43 +302,53 @@ interface WithBuild<QC extends QueryContext, RowType extends Record<string, Scop
|
|
|
302
302
|
}
|
|
303
303
|
//#endregion
|
|
304
304
|
//#region src/types/table-proxy.d.ts
|
|
305
|
-
type FindModelForTable<C, TableName extends string> = C extends
|
|
305
|
+
type FindModelForTable<C extends TableProxyContract, NsId extends string, TableName extends string> = C['domain']['namespaces'][NsId]['models'] extends infer Models extends Record<string, unknown> ? { [M in keyof Models & string]: Models[M] extends {
|
|
306
306
|
readonly storage: {
|
|
307
307
|
readonly table: TableName;
|
|
308
308
|
};
|
|
309
|
-
} ? M : never }[keyof
|
|
310
|
-
type FindFieldForColumn<C, ModelName extends string, ColumnName extends string> = C extends
|
|
309
|
+
} ? M : never }[keyof Models & string] : never;
|
|
310
|
+
type FindFieldForColumn<C extends TableProxyContract, NsId extends string, ModelName extends string, ColumnName extends string> = C['domain']['namespaces'][NsId]['models'] extends infer Models extends Record<string, unknown> ? ModelName extends keyof Models ? Models[ModelName] extends {
|
|
311
|
+
readonly storage: {
|
|
312
|
+
readonly fields: infer Fields extends Record<string, unknown>;
|
|
313
|
+
};
|
|
314
|
+
} ? { [F in keyof Fields & string]: Fields[F] extends {
|
|
311
315
|
readonly column: ColumnName;
|
|
312
|
-
} ? F : never }[keyof
|
|
313
|
-
type ResolvedColumnTypes<C
|
|
314
|
-
type ResolvedInsertValues<C, Table extends StorageTable, TableName extends string, CT extends Record<string, {
|
|
316
|
+
} ? F : never }[keyof Fields & string] : never : never : never;
|
|
317
|
+
type ResolvedColumnTypes<C extends TableProxyContract, NsId extends string, TableName extends string> = NamespaceTable<C, NsId, TableName> extends infer Table extends StorageTable ? { [ColName in keyof Table['columns'] & string]: ComputeColumnJsType<C, NsId, TableName, ColName, ExtractCodecTypes<C>> } : Record<string, never>;
|
|
318
|
+
type ResolvedInsertValues<C extends TableProxyContract, NsId extends string, Table extends StorageTable, TableName extends string, CT extends Record<string, {
|
|
315
319
|
readonly input: unknown;
|
|
316
|
-
}>, FieldInputs extends Record<string, Record<string, unknown
|
|
317
|
-
type ResolvedUpdateValues<C, Table extends StorageTable, TableName extends string, CT extends Record<string, {
|
|
320
|
+
}>, FieldInputs extends Record<string, Record<string, Record<string, unknown>>>> = string extends keyof FieldInputs ? InsertValues<Table, CT> : NsId extends keyof FieldInputs ? FieldInputs[NsId] extends infer NsInputs extends Record<string, Record<string, unknown>> ? FindModelForTable<C, NsId, TableName> extends infer ModelName extends string ? ModelName extends keyof NsInputs ? { [K in keyof Table['columns']]?: FindFieldForColumn<C, NsId, ModelName, K & string> extends infer FieldName extends string ? FieldName extends keyof NsInputs[ModelName] ? Table['columns'][K]['nullable'] extends true ? NonNullable<NsInputs[ModelName][FieldName]> | null : NonNullable<NsInputs[ModelName][FieldName]> : Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown : Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown } : InsertValues<Table, CT> : InsertValues<Table, CT> : InsertValues<Table, CT> : InsertValues<Table, CT>;
|
|
321
|
+
type ResolvedUpdateValues<C extends TableProxyContract, NsId extends string, Table extends StorageTable, TableName extends string, CT extends Record<string, {
|
|
318
322
|
readonly input: unknown;
|
|
319
|
-
}>, FieldInputs extends Record<string, Record<string, unknown
|
|
323
|
+
}>, FieldInputs extends Record<string, Record<string, Record<string, unknown>>>> = ResolvedInsertValues<C, NsId, Table, TableName, CT, FieldInputs>;
|
|
320
324
|
type ResolvedUpdateExpressions<Table extends StorageTable> = { [K in keyof Table['columns']]?: Expression$1<{
|
|
321
325
|
codecId: Table['columns'][K]['codecId'];
|
|
322
326
|
nullable: boolean;
|
|
323
327
|
}> };
|
|
324
|
-
type ContractToQC<C extends TableProxyContract, Name extends string = string> = {
|
|
328
|
+
type ContractToQC<C extends TableProxyContract, NsId extends string = string, Name extends string = string> = {
|
|
325
329
|
readonly codecTypes: ExtractCodecTypes<C>;
|
|
326
330
|
readonly capabilities: C['capabilities'];
|
|
327
331
|
readonly queryOperationTypes: ExtractQueryOperationTypes<C>;
|
|
328
|
-
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C,
|
|
332
|
+
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C, NsId, Name>;
|
|
329
333
|
};
|
|
330
|
-
interface TableProxy<C extends TableProxyContract,
|
|
331
|
-
as<NewAlias extends string>(newAlias: NewAlias): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC>;
|
|
332
|
-
insert(rows: ReadonlyArray<ResolvedInsertValues<C,
|
|
333
|
-
update(set: ResolvedUpdateValues<C,
|
|
334
|
-
update(callback: (fields: FieldProxy<AvailableScope>, fns: Functions<QC>) => ResolvedUpdateExpressions<
|
|
334
|
+
interface TableProxy<C extends TableProxyContract, NsId extends string, Name extends string, Alias extends string = Name, AvailableScope extends Scope = DefaultScope<Name, NamespaceTable<C, NsId, Name>>, QC extends QueryContext = ContractToQC<C, NsId, Name>> extends JoinSource<StorageTableToScopeTable<NamespaceTable<C, NsId, Name>>, Alias>, WithSelect<QC, AvailableScope, EmptyRow>, WithJoin<QC, AvailableScope, C['capabilities']> {
|
|
335
|
+
as<NewAlias extends string>(newAlias: NewAlias): TableProxy<C, NsId, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC>;
|
|
336
|
+
insert(rows: ReadonlyArray<ResolvedInsertValues<C, NsId, NamespaceTable<C, NsId, Name>, Name, QC['codecTypes'], ExtractFieldInputTypes<C>>>): InsertQuery<QC, AvailableScope, EmptyRow>;
|
|
337
|
+
update(set: ResolvedUpdateValues<C, NsId, NamespaceTable<C, NsId, Name>, Name, QC['codecTypes'], ExtractFieldInputTypes<C>>): UpdateQuery<QC, AvailableScope, EmptyRow>;
|
|
338
|
+
update(callback: (fields: FieldProxy<AvailableScope>, fns: Functions<QC>) => ResolvedUpdateExpressions<NamespaceTable<C, NsId, Name>>): UpdateQuery<QC, AvailableScope, EmptyRow>;
|
|
335
339
|
delete(): DeleteQuery<QC, AvailableScope, EmptyRow>;
|
|
336
340
|
}
|
|
337
341
|
//#endregion
|
|
338
342
|
//#region src/types/db.d.ts
|
|
339
343
|
type CapabilitiesBase = Record<string, Record<string, boolean>>;
|
|
340
344
|
type NamespaceEntries = Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
345
|
+
type NamespaceDomain = Readonly<Record<string, {
|
|
346
|
+
readonly models: Readonly<Record<string, unknown>>;
|
|
347
|
+
}>>;
|
|
341
348
|
type TableProxyContract = {
|
|
349
|
+
readonly domain: {
|
|
350
|
+
readonly namespaces: NamespaceDomain;
|
|
351
|
+
};
|
|
342
352
|
readonly storage: {
|
|
343
353
|
readonly namespaces: Readonly<Record<string, {
|
|
344
354
|
readonly entries: NamespaceEntries;
|
|
@@ -352,8 +362,9 @@ type TablesInNamespace<NS extends {
|
|
|
352
362
|
type UnboundTables<C extends TableProxyContract> = { readonly [Name in TableNamesAcrossNamespaces<C>]: TableInAnyNamespace<C, Name> };
|
|
353
363
|
type TableNamesAcrossNamespaces<C extends TableProxyContract> = { [NSId in keyof C['storage']['namespaces']]: keyof TablesInNamespace<C['storage']['namespaces'][NSId]> & string }[keyof C['storage']['namespaces']];
|
|
354
364
|
type TableInAnyNamespace<C extends TableProxyContract, Name extends string> = { [NSId in keyof C['storage']['namespaces']]: Name extends keyof TablesInNamespace<C['storage']['namespaces'][NSId]> ? TablesInNamespace<C['storage']['namespaces'][NSId]>[Name] : never }[keyof C['storage']['namespaces']];
|
|
355
|
-
type
|
|
356
|
-
type
|
|
365
|
+
type NamespaceTable<C extends TableProxyContract, NsId extends string, Name extends string> = TablesInNamespace<C['storage']['namespaces'][NsId]>[Name];
|
|
366
|
+
type Namespace<C extends TableProxyContract, NsId extends string & keyof C['storage']['namespaces']> = { readonly [Name in keyof TablesInNamespace<C['storage']['namespaces'][NsId]> & string]: TableProxy<C, NsId, Name> };
|
|
367
|
+
type Db<C extends TableProxyContract> = { readonly [Ns in keyof C['storage']['namespaces'] & string]: Namespace<C, Ns> };
|
|
357
368
|
//#endregion
|
|
358
369
|
export { Subquery as C, ScopeField as S, FieldProxy as _, TableProxyContract as a, QueryContext as b, SelectQuery as c, InsertQuery as d, UpdateQuery as f, Expression$1 as g, BooleanCodecType as h, TableNamesAcrossNamespaces as i, GroupedQuery as l, AggregateFunctions as m, Namespace as n, UnboundTables as o, ResolveRow as p, TableInAnyNamespace as r, TableProxy as s, Db as t, DeleteQuery as u, Functions as v, Scope as x, GatedMethod as y };
|
|
359
|
-
//# sourceMappingURL=db-
|
|
370
|
+
//# sourceMappingURL=db-BS_UG1Si.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-Ba99KmSZ.d.mts","names":[],"sources":["../src/scope.ts","../src/expression.ts","../src/resolve.ts","../src/types/mutation-query.ts","../src/types/joined-tables.ts","../src/types/grouped-query.ts","../src/types/select-query.ts","../src/types/shared.ts","../src/types/table-proxy.ts","../src/types/db.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db-BS_UG1Si.d.mts","names":[],"sources":["../src/scope.ts","../src/expression.ts","../src/resolve.ts","../src/types/mutation-query.ts","../src/types/joined-tables.ts","../src/types/grouped-query.ts","../src/types/select-query.ts","../src/types/shared.ts","../src/types/table-proxy.ts","../src/types/db.ts"],"mappings":"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"}
|
package/dist/exports/types.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as Subquery, S as ScopeField, a as TableProxyContract, b as QueryContext, c as SelectQuery, d as InsertQuery, f as UpdateQuery, g as Expression, h as BooleanCodecType, i as TableNamesAcrossNamespaces, l as GroupedQuery, m as AggregateFunctions, n as Namespace, o as UnboundTables, p as ResolveRow, r as TableInAnyNamespace, s as TableProxy, t as Db, u as DeleteQuery, v as Functions, x as Scope, y as GatedMethod } from "../db-
|
|
1
|
+
import { C as Subquery, S as ScopeField, a as TableProxyContract, b as QueryContext, c as SelectQuery, d as InsertQuery, f as UpdateQuery, g as Expression, h as BooleanCodecType, i as TableNamesAcrossNamespaces, l as GroupedQuery, m as AggregateFunctions, n as Namespace, o as UnboundTables, p as ResolveRow, r as TableInAnyNamespace, s as TableProxy, t as Db, u as DeleteQuery, v as Functions, x as Scope, y as GatedMethod } from "../db-BS_UG1Si.mjs";
|
|
2
2
|
export type { AggregateFunctions, BooleanCodecType, Db, DeleteQuery, Expression, Functions, GatedMethod, GroupedQuery, InsertQuery, Namespace, QueryContext, ResolveRow, Scope, ScopeField, SelectQuery, Subquery, TableInAnyNamespace, TableNamesAcrossNamespaces, TableProxy, TableProxyContract, UnboundTables, UpdateQuery };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as Subquery, S as ScopeField, b as QueryContext, c as SelectQuery, d as InsertQuery, f as UpdateQuery, g as Expression, l as GroupedQuery, m as AggregateFunctions, p as ResolveRow, s as TableProxy, t as Db, u as DeleteQuery, v as Functions, x as Scope, y as GatedMethod } from "./db-
|
|
1
|
+
import { C as Subquery, S as ScopeField, b as QueryContext, c as SelectQuery, d as InsertQuery, f as UpdateQuery, g as Expression, l as GroupedQuery, m as AggregateFunctions, p as ResolveRow, s as TableProxy, t as Db, u as DeleteQuery, v as Functions, x as Scope, y as GatedMethod } from "./db-BS_UG1Si.mjs";
|
|
2
2
|
export type { AggregateFunctions, Db, DeleteQuery, Expression, Functions, GatedMethod, GroupedQuery, InsertQuery, QueryContext, ResolveRow, Scope, ScopeField, SelectQuery, Subquery, TableProxy, UpdateQuery };
|
package/dist/runtime/index.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { S as ScopeField, _ as FieldProxy, a as TableProxyContract, b as QueryContext, m as AggregateFunctions, t as Db, v as Functions, x as Scope } from "../db-
|
|
1
|
+
import { S as ScopeField, _ as FieldProxy, a as TableProxyContract, b as QueryContext, m as AggregateFunctions, t as Db, v as Functions, x as Scope } from "../db-BS_UG1Si.mjs";
|
|
2
2
|
import { AnyExpression } from "@prisma-next/sql-relational-core/ast";
|
|
3
3
|
import { Expression, RawCodecInferer } from "@prisma-next/sql-relational-core/expression";
|
|
4
4
|
import { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
5
|
-
import { Contract } from "@prisma-next/contract/types";
|
|
6
5
|
import { CodecRef } from "@prisma-next/framework-components/codec";
|
|
7
6
|
import { SqlOperationEntry } from "@prisma-next/sql-operations";
|
|
7
|
+
import { Contract } from "@prisma-next/contract/types";
|
|
8
8
|
import { ExecutionContext } from "@prisma-next/sql-relational-core/query-lane-context";
|
|
9
9
|
|
|
10
10
|
//#region src/runtime/expression-impl.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#state","#buildLateral","#addLateralJoin","#addJoin","#tableSource","#tableName","#namespaceId","#table","#scope","#rows","#returningColumns","#rowFields","#annotations","#setExpressions","#whereExprs","#whereCallbacks","#tableName","#table","#namespaceId","#fromSource","#scope","#toJoined"],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/resolve-table.ts","../../../../../1-framework/0-foundation/utils/dist/casts-DpaahrlC.mjs","../../../../../1-framework/0-foundation/utils/dist/defined-BQWA85QH.mjs","../../src/runtime/builder-base.ts","../../src/runtime/query-impl.ts","../../src/runtime/joined-tables-impl.ts","../../src/runtime/mutation-impl.ts","../../src/runtime/table-source-for-proxy.ts","../../src/runtime/table-proxy-impl.ts","../../src/runtime/sql.ts"],"sourcesContent":["import type { CodecRef } from '@prisma-next/framework-components/codec';\nimport type { AnyExpression as AstExpression } from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '@prisma-next/sql-relational-core/expression';\nimport type { ScopeField } from '../scope';\n\n/**\n * Runtime wrapper around a relational-core AST expression node. Carries ScopeField metadata (codecId, nullable) so aggregate-like combinators can propagate the input codec onto their result.\n *\n * `codec` records the column-bound {@link CodecRef} when the field-proxy knows the binding — both the namespaced form (`f.user.email` → `ColumnRef`) and the top-level shortcut (`f.email` → `IdentifierRef`) stamp the ref derived from contract storage. `codecOf(expression)` exposes it for operation implementations forwarding the ref to `toExpr`.\n */\nexport class ExpressionImpl<T extends ScopeField = ScopeField> implements Expression<T> {\n private readonly ast: AstExpression;\n readonly returnType: T;\n readonly codec: CodecRef | undefined;\n\n constructor(ast: AstExpression, returnType: T, codec?: CodecRef) {\n this.ast = ast;\n this.returnType = returnType;\n this.codec = codec;\n }\n\n buildAst(): AstExpression {\n return this.ast;\n }\n}\n","import { ColumnRef, IdentifierRef } from '@prisma-next/sql-relational-core/ast';\nimport type { FieldProxy } from '../expression';\nimport type { Scope, ScopeTable } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\nexport function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S> {\n return new Proxy({} as FieldProxy<S>, {\n get(_target, prop: string) {\n if (Object.hasOwn(scope.topLevel, prop)) {\n const topField = scope.topLevel[prop];\n if (topField) {\n return new ExpressionImpl(IdentifierRef.of(prop), topField, topField.codec);\n }\n }\n\n if (Object.hasOwn(scope.namespaces, prop)) {\n const nsFields = scope.namespaces[prop];\n if (nsFields) return createNamespaceProxy(prop, nsFields);\n }\n\n return undefined;\n },\n });\n}\n\nfunction createNamespaceProxy(\n namespaceName: string,\n fields: ScopeTable,\n): Record<string, ExpressionImpl> {\n return new Proxy({} as Record<string, ExpressionImpl>, {\n get(_target, prop: string) {\n if (Object.hasOwn(fields, prop)) {\n const field = fields[prop];\n if (field) return new ExpressionImpl(ColumnRef.of(namespaceName, prop), field, field.codec);\n }\n return undefined;\n },\n });\n}\n","import type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression as AstExpression,\n BinaryExpr,\n type BinaryOp,\n type CodecRef,\n ExistsExpr,\n ListExpression,\n LiteralExpr,\n NullCheckExpr,\n OrExpr,\n SubqueryExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport { codecOf, createRawSql, toExpr } from '@prisma-next/sql-relational-core/expression';\nimport type {\n AggregateFunctions,\n AggregateOnlyFunctions,\n BooleanCodecType,\n BuiltinFunctions,\n CodecExpression,\n Expression,\n Functions,\n} from '../expression';\nimport type { QueryContext, ScopeField, Subquery } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\ntype CodecTypes = Record<string, { readonly input: unknown }>;\n// Runtime-level ExprOrVal — accepts any codec, any nullability. Concrete codec typing lives on the public BuiltinFunctions surface in `../expression`.\ntype ExprOrVal<CodecId extends string = string, N extends boolean = boolean> = CodecExpression<\n CodecId,\n N,\n CodecTypes\n>;\n\nconst BOOL_FIELD: BooleanCodecType = { codecId: 'pg/bool@1', nullable: false };\n\nconst resolve = toExpr;\n\n/**\n * Resolve a binary-comparison operand into an AST expression, threading the column-bound side's {@link CodecRef} to the raw-value side.\n *\n * For `fns.eq(f.email, 'alice@example.com')`, `f.email` is the column-bound expression carrying a `ColumnRef` AST and a `CodecRef` derived from contract storage; the raw string operand has no codec context. By deriving the codec context from the column-bound side and forwarding it via `toExpr(value, codec)`, the resulting `ParamRef` carries the `CodecRef` that encode-side dispatch needs to materialise the per-instance codec for parameterized codec ids (`vector(1024)` vs. `vector(1536)`).\n */\nfunction resolveOperand(operand: ExprOrVal, otherCodec?: CodecRef): AstExpression {\n if (isExpressionLike(operand)) return operand.buildAst();\n return toExpr(operand, otherCodec);\n}\n\nfunction isExpressionLike(\n value: unknown,\n): value is { buildAst: () => AstExpression; returnType?: { codecId: string } } {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'buildAst' in value &&\n typeof (value as { buildAst: unknown }).buildAst === 'function'\n );\n}\n\n/**\n * Resolves an Expression via `buildAst()`, or wraps a raw value as a `LiteralExpr` — an SQL literal inlined into the query text, not a bound parameter.\n *\n * Used for `and` / `or` operands. The usual operand is an `Expression<bool>` (e.g. the result of `fns.eq`), which this function passes through by calling `buildAst()`. The only time the raw-value branch fires is when the caller writes `fns.and(true, x)` or similar — inlining `TRUE`/`FALSE` literals lets the SQL planner statically simplify `TRUE AND x` to `x`, which it cannot do for an opaque `ParamRef`.\n */\nfunction toLiteralExpr(value: unknown): AstExpression {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'buildAst' in value &&\n typeof (value as { buildAst: unknown }).buildAst === 'function'\n ) {\n return (value as { buildAst(): AstExpression }).buildAst();\n }\n return new LiteralExpr(value);\n}\n\nfunction boolExpr(astNode: AstExpression): ExpressionImpl<BooleanCodecType> {\n return new ExpressionImpl(astNode, BOOL_FIELD);\n}\n\nfunction binaryWithSharedCodec(\n a: ExprOrVal,\n b: ExprOrVal,\n build: (left: AstExpression, right: AstExpression) => AstExpression,\n): AstExpression {\n const aCodec = codecOf(a);\n const bCodec = codecOf(b);\n const left = resolveOperand(a, bCodec);\n const right = resolveOperand(b, aCodec);\n return build(left, right);\n}\n\nfunction eq(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNull(resolve(b)));\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('eq', l, r)));\n}\n\nfunction ne(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNotNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNotNull(resolve(b)));\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('neq', l, r)));\n}\n\nfunction comparison(a: ExprOrVal, b: ExprOrVal, op: BinaryOp): ExpressionImpl<BooleanCodecType> {\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr(op, l, r)));\n}\n\nfunction inOrNotIn(\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n op: 'in' | 'notIn',\n): ExpressionImpl<BooleanCodecType> {\n const left = expr.buildAst();\n const leftCodec = codecOf(expr);\n const binaryFn = op === 'in' ? BinaryExpr.in : BinaryExpr.notIn;\n\n if (Array.isArray(valuesOrSubquery)) {\n const refs = valuesOrSubquery.map((v) => resolveOperand(v, leftCodec));\n return boolExpr(binaryFn(left, ListExpression.of(refs)));\n }\n return boolExpr(binaryFn(left, SubqueryExpr.of(valuesOrSubquery.buildAst())));\n}\n\nfunction numericAgg(\n fn: 'sum' | 'avg' | 'min' | 'max',\n expr: Expression<ScopeField>,\n): ExpressionImpl<{ codecId: string; nullable: true }> {\n return new ExpressionImpl(AggregateExpr[fn](expr.buildAst()), {\n codecId: expr.returnType.codecId,\n nullable: true as const,\n });\n}\n\nfunction createBuiltinFunctions(rawCodecInferer: RawCodecInferer) {\n return {\n eq: (a: ExprOrVal, b: ExprOrVal) => eq(a, b),\n ne: (a: ExprOrVal, b: ExprOrVal) => ne(a, b),\n gt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gt'),\n gte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gte'),\n lt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lt'),\n lte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lte'),\n and: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>\n boolExpr(AndExpr.of(exprs.map(toLiteralExpr))),\n or: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>\n boolExpr(OrExpr.of(exprs.map(toLiteralExpr))),\n exists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.exists(subquery.buildAst())),\n notExists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.notExists(subquery.buildAst())),\n in: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'in'),\n notIn: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'notIn'),\n raw: createRawSql(rawCodecInferer),\n } satisfies BuiltinFunctions<CodecTypes>;\n}\n\nfunction createAggregateOnlyFunctions() {\n return {\n count: (expr?: Expression<ScopeField>) => {\n const astExpr = expr ? expr.buildAst() : undefined;\n return new ExpressionImpl(AggregateExpr.count(astExpr), {\n codecId: 'pg/int8@1',\n nullable: false,\n });\n },\n sum: (expr: Expression<ScopeField>) => numericAgg('sum', expr),\n avg: (expr: Expression<ScopeField>) => numericAgg('avg', expr),\n min: (expr: Expression<ScopeField>) => numericAgg('min', expr),\n max: (expr: Expression<ScopeField>) => numericAgg('max', expr),\n } satisfies AggregateOnlyFunctions;\n}\n\nexport function createFunctions<QC extends QueryContext>(\n operations: Readonly<Record<string, SqlOperationEntry>>,\n rawCodecInferer: RawCodecInferer,\n): Functions<QC> {\n const builtins = createBuiltinFunctions(rawCodecInferer);\n\n return new Proxy({} as Functions<QC>, {\n get(_target, prop: string) {\n if (Object.hasOwn(builtins, prop)) {\n return (builtins as Record<string, unknown>)[prop];\n }\n\n const op = operations[prop];\n if (op) return op.impl;\n return undefined;\n },\n });\n}\n\nexport function createAggregateFunctions<QC extends QueryContext>(\n operations: Readonly<Record<string, SqlOperationEntry>>,\n rawCodecInferer: RawCodecInferer,\n): AggregateFunctions<QC> {\n const baseFns = createFunctions<QC>(operations, rawCodecInferer);\n const aggregates = createAggregateOnlyFunctions();\n\n return new Proxy({} as AggregateFunctions<QC>, {\n get(_target, prop: string) {\n const agg = (aggregates as Record<string, unknown>)[prop];\n if (agg) return agg;\n\n return (baseFns as Record<string, unknown>)[prop];\n },\n });\n}\n","import type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\n\nexport function resolveTableInNamespace(\n storage: SqlStorage,\n namespaceId: string,\n tableName: string,\n): StorageTable | undefined {\n const namespace = storage.namespaces[namespaceId];\n if (namespace === undefined) return undefined;\n const tables = namespace.entries.table;\n if (tables === undefined || !Object.hasOwn(tables, tableName)) return undefined;\n return tables[tableName];\n}\n","//#region src/casts.ts\n/**\n* **Last-resort escape hatch for unsafe type assertions. Not a sanctioned tool to reach for.**\n*\n* Before reaching for `blindCast`, **rewrite the surrounding code so the cast becomes\n* unnecessary**: tighten an input type, add a runtime check that narrows via a type\n* predicate, restructure a generic so the compiler can see the relationship you're\n* asserting, or use {@link castAs} when the value already satisfies the target type.\n* Only when no rewrite is feasible does `blindCast` become the right answer — and at\n* that point, the `Reason` literal you supply must articulate the compromise in\n* language a reviewer can evaluate.\n*\n* The reviewer **will** validate the `Reason`. If it doesn't hold up under scrutiny,\n* that is not a signal to soften the reason; it is a signal to go back and solve the\n* underlying type-system problem properly. An unconvincing justification is rework,\n* not a free pass.\n*\n* `blindCast` is the auditable form of `as Foo` / `as unknown as Foo`: it bypasses\n* the compiler's checks (the input type is `unknown`, the output type is whatever the\n* caller asks for), but it forces the unsafety to be named at the call site instead of\n* smuggled in via a bare `as`. The `Reason` type parameter exists only at compile\n* time — it is not present in the emitted JavaScript — but it is grep-able and\n* visible to future readers.\n*\n* @example\n* ```typescript\n* const stringValue = blindCast<\n* string,\n* \"JSON.parse returns `unknown`; this field is documented to be a string in the API contract\"\n* >(parsed[key]);\n* ```\n*\n* @typeParam TargetType - The type the caller is asserting the input has.\n* @typeParam _Reason - A string literal describing why bypassing the type system is necessary here.\n* Only meaningful at compile time. The reviewer evaluates whether it justifies the unsafety.\n*/\nfunction blindCast(input) {\n\treturn input;\n}\n/**\n* Type-checked, runtime pass-through alternative to a bare `as Type` cast.\n*\n* Use `castAs` when the value already satisfies the target type but you want to make\n* the type assertion explicit at the call site — for example, when an inferred type is\n* wider than the type you want to publish, or when a literal object should be tagged\n* with its nominal interface. Unlike {@link blindCast}, the compiler still checks that\n* the value is assignable to the target type, so this helper cannot smuggle in an\n* unsafe assertion.\n*\n* `castAs` exists alongside `blindCast` so authors pick the right name at the call\n* site: a `castAs` is type-checked and benign; a `blindCast` is the unsafe escape\n* hatch. The split makes review faster — readers know which casts to scrutinize and\n* which are pure annotations.\n*\n* @example\n* ```typescript\n* interface FancyObject {\n* key: string;\n* keyTwo: {\n* subKey: string;\n* subKeyTwo: number;\n* };\n* }\n*\n* const typedObject = castAs<FancyObject>({\n* key: 'Chookede',\n* keyTwo: {\n* subKey: 'Choookeeeee',\n* subKeyTwo: 2,\n* },\n* });\n* ```\n*\n* @typeParam Type - The type to constrain and tag the value with. The value must be assignable to `Type`.\n*/\nfunction castAs(value) {\n\treturn value;\n}\n//#endregion\nexport { castAs as n, blindCast as t };\n\n//# sourceMappingURL=casts-DpaahrlC.mjs.map","import { t as blindCast } from \"./casts-DpaahrlC.mjs\";\n//#region src/defined.ts\n/**\n* Returns an object with the key/value if value is defined, otherwise an empty object.\n*\n* Use with spread to conditionally include optional properties while satisfying\n* exactOptionalPropertyTypes. This is explicit about which properties are optional\n* and won't inadvertently strip other undefined values.\n*\n* @example\n* ```typescript\n* // Instead of:\n* const obj = {\n* required: 'value',\n* ...(optional ? { optional } : {}),\n* };\n*\n* // Use:\n* const obj = {\n* required: 'value',\n* ...ifDefined('optional', optional),\n* };\n* ```\n*/\nfunction ifDefined(key, value) {\n\treturn value !== void 0 ? blindCast({ [key]: value }) : {};\n}\n//#endregion\nexport { ifDefined as t };\n\n//# sourceMappingURL=defined-BQWA85QH.mjs.map","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { CodecRef } from '@prisma-next/framework-components/codec';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AndExpr,\n type AnyExpression as AstExpression,\n collectOrderedParamRefs,\n IdentifierRef,\n type LimitOffsetValue,\n OrderByItem,\n ProjectionItem,\n SelectAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AppliedMutationDefault,\n MutationDefaultsOptions,\n} from '@prisma-next/sql-relational-core/query-lane-context';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type {\n AggregateFunctions,\n Expression,\n FieldProxy,\n OrderByOptions,\n OrderByScope,\n} from '../expression';\nimport type {\n GatedMethod,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n} from '../scope';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nexport type ExprCallback = (fields: FieldProxy<Scope>, fns: unknown) => Expression<ScopeField>;\n\nexport class BuilderBase<Capabilities = unknown> {\n protected readonly ctx: BuilderContext;\n\n constructor(ctx: BuilderContext) {\n this.ctx = ctx;\n }\n\n protected _gate<Req extends Record<string, Record<string, boolean>>, Args extends unknown[], R>(\n required: Req,\n methodName: string,\n method: (...args: Args) => R,\n ): GatedMethod<Capabilities, Req, (...args: Args) => R> {\n return ((...args: Args): R => {\n assertCapability(this.ctx, required, methodName);\n return method(...args);\n }) as GatedMethod<Capabilities, Req, (...args: Args) => R>;\n }\n}\n\nexport interface BuilderState {\n readonly from: TableSource;\n readonly joins: readonly import('@prisma-next/sql-relational-core/ast').JoinAst[];\n readonly projections: readonly ProjectionItem[];\n readonly where: readonly AstExpression[];\n readonly orderBy: readonly OrderByItem[];\n readonly groupBy: readonly AstExpression[];\n readonly having: AstExpression | undefined;\n readonly limit: LimitOffsetValue | undefined;\n readonly offset: LimitOffsetValue | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: readonly AstExpression[] | undefined;\n readonly scope: Scope;\n readonly rowFields: Record<string, ScopeField>;\n /**\n * Annotations accumulated through `.annotate(...)` calls. Stored as\n * a `Map<namespace, AnnotationValue>` so duplicate namespaces\n * last-write-win. Empty on a fresh state.\n */\n readonly annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n}\n\nexport interface BuilderContext {\n readonly capabilities: Record<string, Record<string, boolean>>;\n readonly queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>;\n readonly target: string;\n readonly storageHash: string;\n /**\n * Contract storage carried by the builder context so column-bound `ParamRef` / `ProjectionItem` construction sites can derive a {@link CodecRef} for each `(table, column)` via {@link codecRefFor}. Builder paths that mint AST nodes without storage (rare — tests, ad-hoc lower paths) leave it undefined; the codec slot then stays `undefined` on the resulting nodes.\n */\n readonly storage: SqlStorage | undefined;\n readonly applyMutationDefaults: (\n options: MutationDefaultsOptions,\n ) => ReadonlyArray<AppliedMutationDefault>;\n /**\n * Codec inferer used inside `createBuiltinFunctions` to construct the raw-SQL tag — `fns.raw` dispatches through `inferCodec(value)` for bare-literal interpolations.\n */\n readonly rawCodecInferer: RawCodecInferer;\n}\n\n/**\n * Derive the canonical {@link CodecRef} for a `(table, column)` from the builder context's storage. Returns `undefined` when the builder context has no storage attached or when the column is unknown to the contract.\n */\nexport function codecRefFor(\n ctx: BuilderContext,\n namespaceId: string,\n tableName: string,\n columnName: string,\n): CodecRef | undefined {\n if (!ctx.storage) return undefined;\n return codecRefForStorageColumn(ctx.storage, namespaceId, tableName, columnName);\n}\n\nexport function emptyState(from: TableSource, scope: Scope): BuilderState {\n return {\n from,\n joins: [],\n projections: [],\n where: [],\n orderBy: [],\n groupBy: [],\n having: undefined,\n limit: undefined,\n offset: undefined,\n distinct: undefined,\n distinctOn: undefined,\n scope,\n rowFields: {},\n annotations: new Map(),\n };\n}\n\nexport function cloneState(state: BuilderState, overrides: Partial<BuilderState>): BuilderState {\n return { ...state, ...overrides };\n}\n\nexport function combineWhereExprs(exprs: readonly AstExpression[]): AstExpression | undefined {\n if (exprs.length === 0) return undefined;\n if (exprs.length === 1) return exprs[0];\n return AndExpr.of(exprs);\n}\n\nexport function buildSelectAst(state: BuilderState): SelectAst {\n const where = combineWhereExprs(state.where);\n return new SelectAst({\n from: state.from,\n joins: state.joins.length > 0 ? state.joins : undefined,\n projection: state.projections,\n where,\n orderBy: state.orderBy.length > 0 ? state.orderBy : undefined,\n distinct: state.distinct,\n distinctOn: state.distinctOn && state.distinctOn.length > 0 ? state.distinctOn : undefined,\n groupBy: state.groupBy.length > 0 ? state.groupBy : undefined,\n having: state.having,\n limit: state.limit,\n offset: state.offset,\n selectAllIntent: undefined,\n });\n}\n\nexport function buildQueryPlan<Row = unknown>(\n ast: import('@prisma-next/sql-relational-core/ast').AnyQueryAst,\n ctx: BuilderContext,\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): SqlQueryPlan<Row> {\n const paramValues = collectOrderedParamRefs(ast).map((r) =>\n r.kind === 'param-ref' ? r.value : undefined,\n );\n\n // SQL DSL has no framework-reserved namespace keys (e.g. `codecs`) in\n // scope at `.build()` time, so user annotations land verbatim here. The\n // ORM dispatch path — which compiles to plans that may already carry\n // reserved keys — enforces the precedence rule in `mergeAnnotations`\n // (`sql-orm-client/src/query-plan-meta.ts`).\n const annotationsRecord =\n annotations !== undefined && annotations.size > 0\n ? Object.freeze(Object.fromEntries(annotations))\n : undefined;\n const meta: PlanMeta = Object.freeze({\n target: ctx.target,\n storageHash: ctx.storageHash,\n lane: 'dsl',\n ...ifDefined('annotations', annotationsRecord),\n });\n\n return Object.freeze({ ast, params: paramValues, meta });\n}\n\nexport function buildPlan<Row = unknown>(\n state: BuilderState,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n return buildQueryPlan<Row>(buildSelectAst(state), ctx, state.annotations);\n}\n\nexport function tableToScope(\n alias: string,\n table: StorageTable,\n options?: {\n readonly storage?: SqlStorage | undefined;\n readonly namespaceId?: string | undefined;\n readonly tableName?: string | undefined;\n },\n): Scope {\n const storage = options?.storage;\n const lookupName = options?.tableName;\n const namespaceId = options?.namespaceId;\n const fields: ScopeTable = {};\n for (const [colName, col] of Object.entries(table.columns)) {\n const codec =\n storage && lookupName && namespaceId !== undefined\n ? codecRefForStorageColumn(storage, namespaceId, lookupName, colName)\n : undefined;\n fields[colName] = {\n codecId: col.codecId,\n nullable: col.nullable,\n ...(codec !== undefined ? { codec } : {}),\n };\n }\n return { topLevel: { ...fields }, namespaces: { [alias]: fields } };\n}\n\nexport function mergeScopes<A extends Scope, B extends Scope>(a: A, b: B): MergeScopes<A, B> {\n const topLevel: ScopeTable = {};\n for (const [k, v] of Object.entries(a.topLevel)) {\n if (!(k in b.topLevel)) topLevel[k] = v;\n }\n for (const [k, v] of Object.entries(b.topLevel)) {\n if (!(k in a.topLevel)) topLevel[k] = v;\n }\n return {\n topLevel,\n namespaces: { ...a.namespaces, ...b.namespaces },\n } as MergeScopes<A, B>;\n}\n\nexport function nullableScope<S extends Scope>(scope: S): NullableScope<S> {\n const mkNullable = (tbl: ScopeTable): ScopeTable => {\n const result: ScopeTable = {};\n for (const [k, v] of Object.entries(tbl)) {\n result[k] = {\n codecId: v.codecId,\n nullable: true,\n ...(v.codec !== undefined ? { codec: v.codec } : {}),\n };\n }\n return result;\n };\n const namespaces: Record<string, ScopeTable> = {};\n for (const [k, v] of Object.entries(scope.namespaces)) {\n namespaces[k] = mkNullable(v);\n }\n return { topLevel: mkNullable(scope.topLevel), namespaces } as NullableScope<S>;\n}\n\nexport function orderByScopeOf<S extends Scope, R extends Record<string, ScopeField>>(\n scope: S,\n rowFields: R,\n): OrderByScope<S, R> {\n return {\n topLevel: { ...scope.topLevel, ...rowFields },\n namespaces: scope.namespaces,\n };\n}\n\nexport function assertCapability(\n ctx: BuilderContext,\n required: Record<string, Record<string, boolean>>,\n methodName: string,\n): void {\n for (const [ns, keys] of Object.entries(required)) {\n for (const key of Object.keys(keys)) {\n if (!ctx.capabilities[ns]?.[key]) {\n throw new Error(`${methodName}() requires capability ${ns}.${key}`);\n }\n }\n }\n}\n\nexport function resolveSelectArgs(\n args: unknown[],\n scope: Scope,\n ctx: BuilderContext,\n): { projections: ProjectionItem[]; newRowFields: Record<string, ScopeField> } {\n const projections: ProjectionItem[] = [];\n const newRowFields: Record<string, ScopeField> = {};\n\n if (args.length === 0) return { projections, newRowFields };\n\n if (typeof args[0] === 'string' && (args.length === 1 || typeof args[1] !== 'function')) {\n for (const colName of args as string[]) {\n const field = scope.topLevel[colName];\n if (!field) throw new Error(`Column \"${colName}\" not found in scope`);\n projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName), field.codec));\n newRowFields[colName] = field;\n }\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'string' && typeof args[1] === 'function') {\n const alias = args[0] as string;\n const exprFn = args[1] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Expression<ScopeField>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = exprFn(createFieldProxy(scope), fns);\n const field = result.returnType;\n projections.push(ProjectionItem.of(alias, result.buildAst(), field.codec));\n newRowFields[alias] = field;\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'function') {\n const callbackFn = args[0] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Record<string, Expression<ScopeField>>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const record = callbackFn(createFieldProxy(scope), fns);\n for (const [key, expr] of Object.entries(record)) {\n const field = expr.returnType;\n projections.push(ProjectionItem.of(key, expr.buildAst(), field.codec));\n newRowFields[key] = field;\n }\n return { projections, newRowFields };\n }\n\n throw new Error('Invalid .select() arguments');\n}\n\nexport function resolveOrderBy(\n arg: unknown,\n options: OrderByOptions | undefined,\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n useAggregateFns: boolean,\n): OrderByItem {\n const dir = options?.direction ?? 'asc';\n\n if (typeof arg === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n if (!(arg in combined.topLevel))\n throw new Error(`Column \"${arg}\" not found in scope for orderBy`);\n const expr = IdentifierRef.of(arg);\n return dir === 'asc' ? OrderByItem.asc(expr) : OrderByItem.desc(expr);\n }\n\n if (typeof arg === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = useAggregateFns\n ? createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer)\n : createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (arg as ExprCallback)(createFieldProxy(combined), fns);\n return dir === 'asc' ? OrderByItem.asc(result.buildAst()) : OrderByItem.desc(result.buildAst());\n }\n\n throw new Error('Invalid orderBy argument');\n}\n\nexport function resolveGroupBy(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (typeof args[0] === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for groupBy`);\n return IdentifierRef.of(colName);\n });\n }\n\n if (typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n\n throw new Error('Invalid groupBy arguments');\n}\n\nexport function resolveDistinctOn(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (args.length === 1 && typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for distinctOn`);\n return IdentifierRef.of(colName);\n });\n}\n","import type {\n AnnotationValue,\n OperationKind,\n ValidAnnotations,\n} from '@prisma-next/framework-components/runtime';\nimport { assertAnnotationsApplicable } from '@prisma-next/framework-components/runtime';\nimport { DerivedTableSource, type SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport { toExpr } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AggregateFunctions,\n BooleanCodecType,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n OrderByOptions,\n OrderByScope,\n WithField,\n WithFields,\n} from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type {\n Expand,\n JoinOuterScope,\n JoinSource,\n QueryContext,\n Scope,\n ScopeField,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n SubqueryMarker,\n} from '../scope';\nimport type { GroupedQuery } from '../types/grouped-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { PaginationValue } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n buildPlan,\n buildSelectAst,\n cloneState,\n orderByScopeOf,\n resolveDistinctOn,\n resolveGroupBy,\n resolveOrderBy,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nabstract class QueryBase<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n> extends BuilderBase<QC['capabilities']> {\n protected readonly state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.state = state;\n }\n\n protected abstract clone(state: BuilderState): this;\n\n distinctOn = this._gate(\n { postgres: { distinctOn: true } },\n 'distinctOn',\n (...args: unknown[]) => {\n const exprs = resolveDistinctOn(args, this.state.scope, this.state.rowFields, this.ctx);\n return this.clone(\n cloneState(this.state, {\n distinctOn: [...(this.state.distinctOn ?? []), ...exprs],\n }),\n );\n },\n );\n\n limit(count: PaginationValue<QC>): this {\n const limit = typeof count === 'number' ? count : toExpr(count);\n return this.clone(cloneState(this.state, { limit }));\n }\n\n offset(count: PaginationValue<QC>): this {\n const offset = typeof count === 'number' ? count : toExpr(count);\n return this.clone(cloneState(this.state, { offset }));\n }\n\n distinct(): this {\n return this.clone(cloneState(this.state, { distinct: true }));\n }\n\n /**\n * Attach one or more annotations to this query plan.\n *\n * Read builders (`SelectQueryImpl`, `GroupedQueryImpl`) accept\n * annotations whose declared `applicableTo` includes `'read'`.\n * The type-level `As & ValidAnnotations<'read', As>` gate rejects\n * write-only annotations at the call site; the runtime check below\n * fails closed for callers that bypass the type gate (cast / `any`).\n *\n * Multiple `.annotate(...)` calls compose; duplicate namespaces use\n * last-write-wins. The accumulated annotations are merged into\n * `plan.meta.annotations` at `.build()` time, alongside any framework-\n * internal metadata under reserved namespaces (e.g. `codecs`).\n *\n * Chainable in any position (before / after `.where`, `.select`,\n * `.limit`, etc.); the returned builder has the same row type.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'read', As>\n ): this {\n assertAnnotationsApplicable(\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n 'read',\n 'sql-dsl.annotate',\n );\n const next = new Map(this.state.annotations);\n for (const annotation of annotations as readonly AnnotationValue<unknown, OperationKind>[]) {\n next.set(annotation.namespace, annotation);\n }\n return this.clone(cloneState(this.state, { annotations: next }));\n }\n\n groupBy(\n ...fields: ((keyof RowType | keyof AvailableScope['topLevel']) & string)[]\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(...args: unknown[]): unknown {\n const exprs = resolveGroupBy(args, this.state.scope, this.state.rowFields, this.ctx);\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(\n cloneState(this.state, { groupBy: [...this.state.groupBy, ...exprs] }),\n this.ctx,\n );\n }\n\n as<Alias extends string>(alias: Alias): JoinSource<RowType, Alias> {\n const ast = buildSelectAst(this.state);\n const derivedSource = DerivedTableSource.as(alias, ast);\n const scope = {\n topLevel: this.state.rowFields as RowType,\n namespaces: { [alias]: this.state.rowFields } as Record<Alias, RowType>,\n };\n return {\n getJoinOuterScope: () => scope,\n buildAst: () => derivedSource,\n\n // `as unknown` is necessary, because JoinOuterScope is a phantom type-only property that does not exist at runtime\n } satisfies Omit<JoinSource<RowType, Alias>, typeof JoinOuterScope> as unknown as JoinSource<\n RowType,\n Alias\n >;\n }\n\n getRowFields(): Record<string, ScopeField> {\n return this.state.rowFields;\n }\n\n buildAst(): SelectAst {\n return buildSelectAst(this.state);\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n return buildPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n this.state,\n this.ctx,\n );\n }\n}\n\nexport class SelectQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements SelectQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new SelectQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<RowType, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<RowType, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<RowType & ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.state.scope, this.ctx);\n return new SelectQueryImpl(\n cloneState(this.state, {\n projections: [...this.state.projections, ...projections],\n rowFields: { ...this.state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): SelectQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.state.scope);\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new SelectQueryImpl(\n cloneState(this.state, {\n where: [...this.state.where, result.buildAst()],\n }),\n this.ctx,\n );\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n false,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n\nexport class GroupedQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements GroupedQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n having(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<BooleanCodecType>,\n ): GroupedQuery<QC, AvailableScope, RowType> {\n const combined = orderByScopeOf(\n this.state.scope as AvailableScope,\n this.state.rowFields as RowType,\n );\n const fns = createAggregateFunctions<QC>(\n this.ctx.queryOperationTypes,\n this.ctx.rawCodecInferer,\n );\n const result = expr(createFieldProxy(combined), fns);\n return new GroupedQueryImpl(cloneState(this.state, { having: result.buildAst() }), this.ctx);\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n true,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n","import {\n AndExpr,\n DerivedTableSource,\n JoinAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n Subquery,\n} from '../scope';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n cloneState,\n emptyState,\n mergeScopes,\n nullableScope,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class JoinedTablesImpl<QC extends QueryContext, AvailableScope extends Scope>\n extends BuilderBase<QC['capabilities']>\n implements JoinedTables<QC, AvailableScope>\n{\n readonly #state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.#state = state;\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n );\n return this.#addLateralJoin('inner', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n >\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n ),\n );\n return this.#addLateralJoin('left', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['outerLateralJoin'];\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.#state.scope, this.ctx);\n return new SelectQueryImpl<QC, AvailableScope>(\n cloneState(this.#state, {\n projections: [...this.#state.projections, ...projections],\n rowFields: { ...this.#state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'inner', targetScope, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'left', targetScope, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'right', targetScope, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'full', targetScope, on);\n }\n\n #addJoin<Other extends JoinSource<ScopeTable, string | never>, ResultScope extends Scope>(\n other: Other,\n joinType: 'inner' | 'left' | 'right' | 'full',\n resultScope: ResultScope,\n onExpr: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, ResultScope> {\n const fieldProxy = createFieldProxy(\n mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n ),\n ) as FieldProxy<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>>;\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const onResult = onExpr(fieldProxy, fns);\n const joinAst = new JoinAst(joinType, other.buildAst(), onResult.buildAst());\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n\n #buildLateral(\n alias: string,\n builderFn: (\n lateral: LateralBuilder<QC, AvailableScope>,\n ) => Subquery<Record<string, ScopeField>>,\n ) {\n const lateralBuilder: LateralBuilder<QC, AvailableScope> = {\n from: (other) => {\n const otherScope = other.getJoinOuterScope();\n const parentMerged = mergeScopes(this.#state.scope, otherScope);\n return new SelectQueryImpl(\n emptyState(other.buildAst() as TableSource, parentMerged),\n this.ctx,\n ) as unknown as SelectQuery<QC, AvailableScope, EmptyRow>;\n },\n };\n\n const subquery = builderFn(lateralBuilder);\n const subqueryAst = subquery.buildAst();\n const derivedSource = DerivedTableSource.as(alias, subqueryAst);\n const subqueryRowFields: ScopeTable = subquery.getRowFields();\n const lateralScope: Scope = {\n topLevel: subqueryRowFields,\n namespaces: { [alias]: subqueryRowFields },\n };\n\n return { derivedSource, lateralScope };\n }\n\n #addLateralJoin<ResultScope extends Scope>(\n joinType: 'inner' | 'left',\n resultScope: ResultScope,\n derivedSource: DerivedTableSource,\n ): JoinedTables<QC, ResultScope> {\n const onExpr = AndExpr.of([]);\n const joinAst = new JoinAst(joinType, derivedSource, onExpr, true);\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n}\n","import type {\n AnnotationValue,\n OperationKind,\n ValidAnnotations,\n} from '@prisma-next/framework-components/runtime';\nimport { assertAnnotationsApplicable } from '@prisma-next/framework-components/runtime';\nimport type { StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression as AstExpression,\n ColumnRef,\n DeleteAst,\n InsertAst,\n ParamRef,\n ProjectionItem,\n type TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { MutationDefaultsOp } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type { Expression, ExpressionBuilder } from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type { QueryContext, Scope, ScopeField } from '../scope';\nimport type {\n DeleteQuery,\n InsertQuery,\n ReturningCapability,\n UpdateQuery,\n} from '../types/mutation-query';\nimport {\n BuilderBase,\n type BuilderContext,\n buildQueryPlan,\n codecRefFor,\n combineWhereExprs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\n\n/**\n * Validates and merges a variadic annotations call into a builder's\n * accumulated user-annotations map. Used by `.annotate(...)` on each of\n * the three mutation builders (`InsertQueryImpl`, `UpdateQueryImpl`,\n * `DeleteQueryImpl`); the read builders share the same logic via\n * `QueryBase.annotate()` in `./query-impl.ts`.\n *\n * Runs `assertAnnotationsApplicable` at call time (not at `.build()`) so\n * inapplicable annotations forced through casts surface immediately\n * rather than at plan-construction time.\n */\nfunction mergeWriteAnnotations(\n current: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n annotations: readonly AnnotationValue<unknown, OperationKind>[],\n): ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> {\n assertAnnotationsApplicable(annotations, 'write', 'sql-dsl.annotate');\n const next = new Map(current);\n for (const annotation of annotations) {\n next.set(annotation.namespace, annotation);\n }\n return next;\n}\n\ntype WhereCallback = ExpressionBuilder<Scope, QueryContext>;\nexport type UpdateSetCallback = (\n fields: ReturnType<typeof createFieldProxy>,\n fns: ReturnType<typeof createFunctions>,\n) => Record<string, Expression<ScopeField> | undefined>;\n\nexport function buildParamValues(\n values: Record<string, unknown>,\n namespaceId: string,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, ParamRef> {\n const params: Record<string, ParamRef> = {};\n for (const [col, value] of Object.entries(values)) {\n const column = table.columns[col];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, col) : undefined;\n params[col] = ParamRef.of(value, codec ? { codec } : undefined);\n }\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values })) {\n const column = table.columns[def.column];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, def.column) : undefined;\n params[def.column] = ParamRef.of(def.value, codec ? { codec } : undefined);\n }\n return params;\n}\n\nfunction buildReturningProjections(\n tableName: string,\n columns: string[],\n rowFields: Record<string, ScopeField>,\n): ProjectionItem[] {\n return columns.map((col) =>\n ProjectionItem.of(col, ColumnRef.of(tableName, col), rowFields[col]?.codec),\n );\n}\n\nfunction evaluateWhere(\n whereCallback: WhereCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n rawCodecInferer: BuilderContext['rawCodecInferer'],\n): AstExpression {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes, rawCodecInferer);\n const result = whereCallback(fieldProxy, fns as never);\n return result.buildAst();\n}\n\nexport function evaluateUpdateCallback(\n callback: UpdateSetCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n rawCodecInferer: BuilderContext['rawCodecInferer'],\n): Record<string, AstExpression> {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes, rawCodecInferer);\n const result = callback(fieldProxy, fns as never);\n const set: Record<string, AstExpression> = {};\n for (const [col, expr] of Object.entries(result)) {\n if (expr !== undefined) {\n set[col] = expr.buildAst();\n }\n }\n return set;\n}\n\nexport function buildSetExpressions(\n exprs: Record<string, AstExpression>,\n namespaceId: string,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, AstExpression> {\n const set: Record<string, AstExpression> = { ...exprs };\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values: exprs })) {\n if (!(def.column in set)) {\n const column = table.columns[def.column];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, def.column) : undefined;\n set[def.column] = ParamRef.of(def.value, ifDefined('codec', codec));\n }\n }\n return set;\n}\n\nexport class InsertQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements InsertQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #namespaceId: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #rows: ReadonlyArray<Record<string, unknown>>;\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n namespaceId: string,\n table: StorageTable,\n scope: Scope,\n rows: ReadonlyArray<Record<string, unknown>>,\n ctx: BuilderContext,\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#namespaceId = namespaceId;\n this.#table = table;\n this.#scope = scope;\n this.#rows = rows;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n returning = this._gate<ReturningCapability, string[], InsertQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new InsertQueryImpl(\n this.#tableSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n this.#rows,\n this.ctx,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as InsertQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * The type-level `As & ValidAnnotations<'write', As>` gate rejects\n * read-only annotations at the call site; the runtime check fails\n * closed for callers that bypass the type gate. See `QueryBase.annotate`\n * in `./query-impl.ts` for the read-builder counterpart.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): InsertQuery<QC, AvailableScope, RowType> {\n return new InsertQueryImpl(\n this.#tableSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n this.#rows,\n this.ctx,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n if (this.#rows.length === 0) {\n throw new Error('insert() called with an empty row array — at least one row is required');\n }\n\n const paramRows = this.#rows.map((rowValues) =>\n buildParamValues(\n rowValues,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'create',\n this.ctx,\n ),\n );\n\n let ast = InsertAst.into(this.#tableSource).withRows(paramRows);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n\nexport class UpdateQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements UpdateQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #setExpressions: Record<string, AstExpression>;\n readonly #whereExprs: readonly AstExpression[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n scope: Scope,\n setExpressions: Record<string, AstExpression>,\n ctx: BuilderContext,\n whereExprs: readonly AstExpression[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#scope = scope;\n this.#setExpressions = setExpressions;\n this.#whereExprs = whereExprs;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): UpdateQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.#scope);\n const fns = createFunctions(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n [...this.#whereExprs, result.buildAst()],\n this.#returningColumns,\n this.#rowFields,\n this.#annotations,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], UpdateQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n this.#whereExprs,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as UpdateQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * See `InsertQueryImpl.annotate` for semantics; the runtime check\n * fails closed for callers that bypass the type-level gate.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): UpdateQuery<QC, AvailableScope, RowType> {\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n this.#whereExprs,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n let ast = UpdateAst.table(this.#tableSource)\n .withSet(this.#setExpressions)\n .withWhere(combineWhereExprs(this.#whereExprs));\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n\nexport class DeleteQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements DeleteQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n scope: Scope,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#scope = scope;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n this.#annotations,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], DeleteQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as DeleteQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * See `InsertQueryImpl.annotate` for semantics.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes, this.ctx.rawCodecInferer),\n ),\n );\n\n let ast = DeleteAst.from(this.#tableSource).withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n","import { TableSource } from '@prisma-next/sql-relational-core/ast';\n\nexport function tableSourceForProxy(\n tableName: string,\n alias: string,\n namespaceId: string,\n): TableSource {\n return TableSource.named(tableName, alias !== tableName ? alias : undefined, namespaceId);\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport type { AnyFromSource, TableSource } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n RebindScope,\n Scope,\n ScopeField,\n ScopeTable,\n StorageTableToScopeTable,\n Subquery,\n} from '../scope';\nimport type { TableProxyContract, UnboundTables } from '../types/db';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport type { TableProxy } from '../types/table-proxy';\nimport { BuilderBase, type BuilderContext, emptyState, tableToScope } from './builder-base';\nimport { JoinedTablesImpl } from './joined-tables-impl';\nimport {\n buildParamValues,\n buildSetExpressions,\n DeleteQueryImpl,\n evaluateUpdateCallback,\n InsertQueryImpl,\n UpdateQueryImpl,\n type UpdateSetCallback,\n} from './mutation-impl';\nimport { SelectQueryImpl } from './query-impl';\nimport { tableSourceForProxy } from './table-source-for-proxy';\n\nexport class TableProxyImpl<\n C extends TableProxyContract,\n Name extends string & keyof UnboundTables<C>,\n Alias extends string,\n AvailableScope extends Scope,\n QC extends QueryContext,\n >\n extends BuilderBase<C['capabilities']>\n implements TableProxy<C, Name, Alias, AvailableScope, QC>\n{\n declare readonly [JoinOuterScope]: JoinSource<\n StorageTableToScopeTable<UnboundTables<C>[Name]>,\n Alias\n >[typeof JoinOuterScope];\n\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #namespaceId: string;\n readonly #fromSource: TableSource;\n readonly #scope: Scope;\n\n constructor(\n tableName: string,\n table: StorageTable,\n alias: string,\n ctx: BuilderContext,\n namespaceId: string,\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#namespaceId = namespaceId;\n this.#scope = tableToScope(alias, table, {\n storage: ctx.storage,\n tableName,\n namespaceId,\n });\n this.#fromSource = tableSourceForProxy(tableName, alias, namespaceId);\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n > => {\n return this.#toJoined().lateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n >\n > => {\n return this.#toJoined().outerLateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['outerLateralJoin'];\n\n getJoinOuterScope(): Scope {\n return this.#scope;\n }\n\n buildAst(): AnyFromSource {\n return this.#fromSource;\n }\n\n as<NewAlias extends string>(\n newAlias: NewAlias,\n ): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC> {\n return new TableProxyImpl(this.#tableName, this.#table, newAlias, this.ctx, this.#namespaceId);\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<LAlias extends string, Field extends ScopeField>(\n alias: LAlias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, LAlias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n return new SelectQueryImpl(emptyState(this.#fromSource, this.#scope), this.ctx).select(\n ...(args as string[]),\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().innerJoin(other, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n return this.#toJoined().outerLeftJoin(other, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().outerRightJoin(other, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n return this.#toJoined().outerFullJoin(other, on);\n }\n\n insert(rows: ReadonlyArray<Record<string, unknown>>): InsertQuery<QC, AvailableScope, EmptyRow> {\n return new InsertQueryImpl(\n this.#fromSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n rows,\n this.ctx,\n );\n }\n\n update(\n setOrCallback:\n | Record<string, unknown>\n | ((\n fields: FieldProxy<AvailableScope>,\n fns: Functions<QC>,\n ) => Record<string, Expression<ScopeField> | undefined>),\n ): UpdateQuery<QC, AvailableScope, EmptyRow> {\n if (typeof setOrCallback === 'function') {\n const callbackExprs = evaluateUpdateCallback(\n setOrCallback as UpdateSetCallback,\n this.#scope,\n this.ctx.queryOperationTypes,\n this.ctx.rawCodecInferer,\n );\n const setExpressions = buildSetExpressions(\n callbackExprs,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n return new UpdateQueryImpl(this.#fromSource, this.#scope, setExpressions, this.ctx);\n }\n const setExpressions = buildParamValues(\n setOrCallback,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n return new UpdateQueryImpl(this.#fromSource, this.#scope, setExpressions, this.ctx);\n }\n\n delete(): DeleteQuery<QC, AvailableScope, EmptyRow> {\n return new DeleteQueryImpl(this.#fromSource, this.#scope, this.ctx);\n }\n\n #toJoined(): JoinedTables<QC, AvailableScope> {\n return new JoinedTablesImpl(emptyState(this.#fromSource, this.#scope), this.ctx);\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { Db, TableProxyContract } from '../types/db';\nimport type { BuilderContext } from './builder-base';\nimport { resolveTableInNamespace } from './resolve-table';\nimport { TableProxyImpl } from './table-proxy-impl';\n\nexport interface SqlOptions<C extends Contract<SqlStorage> & TableProxyContract> {\n readonly context: ExecutionContext<C>;\n readonly rawCodecInferer: RawCodecInferer;\n}\n\nexport function sql<C extends Contract<SqlStorage> & TableProxyContract>(\n options: SqlOptions<C>,\n): Db<C> {\n const { context, rawCodecInferer } = options;\n const ctx: BuilderContext = {\n capabilities: context.contract.capabilities,\n queryOperationTypes: context.queryOperations.entries(),\n target: context.contract.target ?? 'unknown',\n storageHash: context.contract.storage.storageHash ?? 'unknown',\n storage: context.contract.storage,\n applyMutationDefaults: (options) => context.applyMutationDefaults(options),\n rawCodecInferer,\n };\n\n const { storage } = context.contract;\n\n return new Proxy({} as Db<C>, {\n get(_target, prop: string | symbol) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n if (!Object.hasOwn(storage.namespaces, prop)) {\n return undefined;\n }\n const namespaceId = prop;\n return new Proxy(\n {},\n {\n get(_facetTarget, tableName: string | symbol) {\n if (typeof tableName !== 'string') {\n return undefined;\n }\n const table = resolveTableInNamespace(storage, namespaceId, tableName);\n if (table) {\n return new TableProxyImpl(tableName, table, tableName, ctx, namespaceId);\n }\n return undefined;\n },\n },\n );\n },\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#state","#buildLateral","#addLateralJoin","#addJoin","#tableSource","#tableName","#namespaceId","#table","#scope","#rows","#returningColumns","#rowFields","#annotations","#setExpressions","#whereExprs","#whereCallbacks","#tableName","#table","#namespaceId","#fromSource","#scope","#toJoined"],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/resolve-table.ts","../../../../../1-framework/0-foundation/utils/dist/casts-DpaahrlC.mjs","../../../../../1-framework/0-foundation/utils/dist/defined-BQWA85QH.mjs","../../src/runtime/builder-base.ts","../../src/runtime/query-impl.ts","../../src/runtime/joined-tables-impl.ts","../../src/runtime/mutation-impl.ts","../../src/runtime/table-source-for-proxy.ts","../../src/runtime/table-proxy-impl.ts","../../src/runtime/sql.ts"],"sourcesContent":["import type { CodecRef } from '@prisma-next/framework-components/codec';\nimport type { AnyExpression as AstExpression } from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '@prisma-next/sql-relational-core/expression';\nimport type { ScopeField } from '../scope';\n\n/**\n * Runtime wrapper around a relational-core AST expression node. Carries ScopeField metadata (codecId, nullable) so aggregate-like combinators can propagate the input codec onto their result.\n *\n * `codec` records the column-bound {@link CodecRef} when the field-proxy knows the binding — both the namespaced form (`f.user.email` → `ColumnRef`) and the top-level shortcut (`f.email` → `IdentifierRef`) stamp the ref derived from contract storage. `codecOf(expression)` exposes it for operation implementations forwarding the ref to `toExpr`.\n */\nexport class ExpressionImpl<T extends ScopeField = ScopeField> implements Expression<T> {\n private readonly ast: AstExpression;\n readonly returnType: T;\n readonly codec: CodecRef | undefined;\n\n constructor(ast: AstExpression, returnType: T, codec?: CodecRef) {\n this.ast = ast;\n this.returnType = returnType;\n this.codec = codec;\n }\n\n buildAst(): AstExpression {\n return this.ast;\n }\n}\n","import { ColumnRef, IdentifierRef } from '@prisma-next/sql-relational-core/ast';\nimport type { FieldProxy } from '../expression';\nimport type { Scope, ScopeTable } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\nexport function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S> {\n return new Proxy({} as FieldProxy<S>, {\n get(_target, prop: string) {\n if (Object.hasOwn(scope.topLevel, prop)) {\n const topField = scope.topLevel[prop];\n if (topField) {\n return new ExpressionImpl(IdentifierRef.of(prop), topField, topField.codec);\n }\n }\n\n if (Object.hasOwn(scope.namespaces, prop)) {\n const nsFields = scope.namespaces[prop];\n if (nsFields) return createNamespaceProxy(prop, nsFields);\n }\n\n return undefined;\n },\n });\n}\n\nfunction createNamespaceProxy(\n namespaceName: string,\n fields: ScopeTable,\n): Record<string, ExpressionImpl> {\n return new Proxy({} as Record<string, ExpressionImpl>, {\n get(_target, prop: string) {\n if (Object.hasOwn(fields, prop)) {\n const field = fields[prop];\n if (field) return new ExpressionImpl(ColumnRef.of(namespaceName, prop), field, field.codec);\n }\n return undefined;\n },\n });\n}\n","import type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression as AstExpression,\n BinaryExpr,\n type BinaryOp,\n type CodecRef,\n ExistsExpr,\n ListExpression,\n LiteralExpr,\n NullCheckExpr,\n OrExpr,\n SubqueryExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport { codecOf, createRawSql, toExpr } from '@prisma-next/sql-relational-core/expression';\nimport type {\n AggregateFunctions,\n AggregateOnlyFunctions,\n BooleanCodecType,\n BuiltinFunctions,\n CodecExpression,\n Expression,\n Functions,\n} from '../expression';\nimport type { QueryContext, ScopeField, Subquery } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\ntype CodecTypes = Record<string, { readonly input: unknown }>;\n// Runtime-level ExprOrVal — accepts any codec, any nullability. Concrete codec typing lives on the public BuiltinFunctions surface in `../expression`.\ntype ExprOrVal<CodecId extends string = string, N extends boolean = boolean> = CodecExpression<\n CodecId,\n N,\n CodecTypes\n>;\n\nconst BOOL_FIELD: BooleanCodecType = { codecId: 'pg/bool@1', nullable: false };\n\nconst resolve = toExpr;\n\n/**\n * Resolve a binary-comparison operand into an AST expression, threading the column-bound side's {@link CodecRef} to the raw-value side.\n *\n * For `fns.eq(f.email, 'alice@example.com')`, `f.email` is the column-bound expression carrying a `ColumnRef` AST and a `CodecRef` derived from contract storage; the raw string operand has no codec context. By deriving the codec context from the column-bound side and forwarding it via `toExpr(value, codec)`, the resulting `ParamRef` carries the `CodecRef` that encode-side dispatch needs to materialise the per-instance codec for parameterized codec ids (`vector(1024)` vs. `vector(1536)`).\n */\nfunction resolveOperand(operand: ExprOrVal, otherCodec?: CodecRef): AstExpression {\n if (isExpressionLike(operand)) return operand.buildAst();\n return toExpr(operand, otherCodec);\n}\n\nfunction isExpressionLike(\n value: unknown,\n): value is { buildAst: () => AstExpression; returnType?: { codecId: string } } {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'buildAst' in value &&\n typeof (value as { buildAst: unknown }).buildAst === 'function'\n );\n}\n\n/**\n * Resolves an Expression via `buildAst()`, or wraps a raw value as a `LiteralExpr` — an SQL literal inlined into the query text, not a bound parameter.\n *\n * Used for `and` / `or` operands. The usual operand is an `Expression<bool>` (e.g. the result of `fns.eq`), which this function passes through by calling `buildAst()`. The only time the raw-value branch fires is when the caller writes `fns.and(true, x)` or similar — inlining `TRUE`/`FALSE` literals lets the SQL planner statically simplify `TRUE AND x` to `x`, which it cannot do for an opaque `ParamRef`.\n */\nfunction toLiteralExpr(value: unknown): AstExpression {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'buildAst' in value &&\n typeof (value as { buildAst: unknown }).buildAst === 'function'\n ) {\n return (value as { buildAst(): AstExpression }).buildAst();\n }\n return new LiteralExpr(value);\n}\n\nfunction boolExpr(astNode: AstExpression): ExpressionImpl<BooleanCodecType> {\n return new ExpressionImpl(astNode, BOOL_FIELD);\n}\n\nfunction binaryWithSharedCodec(\n a: ExprOrVal,\n b: ExprOrVal,\n build: (left: AstExpression, right: AstExpression) => AstExpression,\n): AstExpression {\n const aCodec = codecOf(a);\n const bCodec = codecOf(b);\n const left = resolveOperand(a, bCodec);\n const right = resolveOperand(b, aCodec);\n return build(left, right);\n}\n\nfunction eq(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNull(resolve(b)));\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('eq', l, r)));\n}\n\nfunction ne(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNotNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNotNull(resolve(b)));\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('neq', l, r)));\n}\n\nfunction comparison(a: ExprOrVal, b: ExprOrVal, op: BinaryOp): ExpressionImpl<BooleanCodecType> {\n return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr(op, l, r)));\n}\n\nfunction inOrNotIn(\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n op: 'in' | 'notIn',\n): ExpressionImpl<BooleanCodecType> {\n const left = expr.buildAst();\n const leftCodec = codecOf(expr);\n const binaryFn = op === 'in' ? BinaryExpr.in : BinaryExpr.notIn;\n\n if (Array.isArray(valuesOrSubquery)) {\n const refs = valuesOrSubquery.map((v) => resolveOperand(v, leftCodec));\n return boolExpr(binaryFn(left, ListExpression.of(refs)));\n }\n return boolExpr(binaryFn(left, SubqueryExpr.of(valuesOrSubquery.buildAst())));\n}\n\nfunction numericAgg(\n fn: 'sum' | 'avg' | 'min' | 'max',\n expr: Expression<ScopeField>,\n): ExpressionImpl<{ codecId: string; nullable: true }> {\n return new ExpressionImpl(AggregateExpr[fn](expr.buildAst()), {\n codecId: expr.returnType.codecId,\n nullable: true as const,\n });\n}\n\nfunction createBuiltinFunctions(rawCodecInferer: RawCodecInferer) {\n return {\n eq: (a: ExprOrVal, b: ExprOrVal) => eq(a, b),\n ne: (a: ExprOrVal, b: ExprOrVal) => ne(a, b),\n gt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gt'),\n gte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gte'),\n lt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lt'),\n lte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lte'),\n and: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>\n boolExpr(AndExpr.of(exprs.map(toLiteralExpr))),\n or: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>\n boolExpr(OrExpr.of(exprs.map(toLiteralExpr))),\n exists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.exists(subquery.buildAst())),\n notExists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.notExists(subquery.buildAst())),\n in: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'in'),\n notIn: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'notIn'),\n raw: createRawSql(rawCodecInferer),\n } satisfies BuiltinFunctions<CodecTypes>;\n}\n\nfunction createAggregateOnlyFunctions() {\n return {\n count: (expr?: Expression<ScopeField>) => {\n const astExpr = expr ? expr.buildAst() : undefined;\n return new ExpressionImpl(AggregateExpr.count(astExpr), {\n codecId: 'pg/int8@1',\n nullable: false,\n });\n },\n sum: (expr: Expression<ScopeField>) => numericAgg('sum', expr),\n avg: (expr: Expression<ScopeField>) => numericAgg('avg', expr),\n min: (expr: Expression<ScopeField>) => numericAgg('min', expr),\n max: (expr: Expression<ScopeField>) => numericAgg('max', expr),\n } satisfies AggregateOnlyFunctions;\n}\n\nexport function createFunctions<QC extends QueryContext>(\n operations: Readonly<Record<string, SqlOperationEntry>>,\n rawCodecInferer: RawCodecInferer,\n): Functions<QC> {\n const builtins = createBuiltinFunctions(rawCodecInferer);\n\n return new Proxy({} as Functions<QC>, {\n get(_target, prop: string) {\n if (Object.hasOwn(builtins, prop)) {\n return (builtins as Record<string, unknown>)[prop];\n }\n\n const op = operations[prop];\n if (op) return op.impl;\n return undefined;\n },\n });\n}\n\nexport function createAggregateFunctions<QC extends QueryContext>(\n operations: Readonly<Record<string, SqlOperationEntry>>,\n rawCodecInferer: RawCodecInferer,\n): AggregateFunctions<QC> {\n const baseFns = createFunctions<QC>(operations, rawCodecInferer);\n const aggregates = createAggregateOnlyFunctions();\n\n return new Proxy({} as AggregateFunctions<QC>, {\n get(_target, prop: string) {\n const agg = (aggregates as Record<string, unknown>)[prop];\n if (agg) return agg;\n\n return (baseFns as Record<string, unknown>)[prop];\n },\n });\n}\n","import type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\n\nexport function resolveTableInNamespace(\n storage: SqlStorage,\n namespaceId: string,\n tableName: string,\n): StorageTable | undefined {\n const namespace = storage.namespaces[namespaceId];\n if (namespace === undefined) return undefined;\n const tables = namespace.entries.table;\n if (tables === undefined || !Object.hasOwn(tables, tableName)) return undefined;\n return tables[tableName];\n}\n","//#region src/casts.ts\n/**\n* **Last-resort escape hatch for unsafe type assertions. Not a sanctioned tool to reach for.**\n*\n* Before reaching for `blindCast`, **rewrite the surrounding code so the cast becomes\n* unnecessary**: tighten an input type, add a runtime check that narrows via a type\n* predicate, restructure a generic so the compiler can see the relationship you're\n* asserting, or use {@link castAs} when the value already satisfies the target type.\n* Only when no rewrite is feasible does `blindCast` become the right answer — and at\n* that point, the `Reason` literal you supply must articulate the compromise in\n* language a reviewer can evaluate.\n*\n* The reviewer **will** validate the `Reason`. If it doesn't hold up under scrutiny,\n* that is not a signal to soften the reason; it is a signal to go back and solve the\n* underlying type-system problem properly. An unconvincing justification is rework,\n* not a free pass.\n*\n* `blindCast` is the auditable form of `as Foo` / `as unknown as Foo`: it bypasses\n* the compiler's checks (the input type is `unknown`, the output type is whatever the\n* caller asks for), but it forces the unsafety to be named at the call site instead of\n* smuggled in via a bare `as`. The `Reason` type parameter exists only at compile\n* time — it is not present in the emitted JavaScript — but it is grep-able and\n* visible to future readers.\n*\n* @example\n* ```typescript\n* const stringValue = blindCast<\n* string,\n* \"JSON.parse returns `unknown`; this field is documented to be a string in the API contract\"\n* >(parsed[key]);\n* ```\n*\n* @typeParam TargetType - The type the caller is asserting the input has.\n* @typeParam _Reason - A string literal describing why bypassing the type system is necessary here.\n* Only meaningful at compile time. The reviewer evaluates whether it justifies the unsafety.\n*/\nfunction blindCast(input) {\n\treturn input;\n}\n/**\n* Type-checked, runtime pass-through alternative to a bare `as Type` cast.\n*\n* Use `castAs` when the value already satisfies the target type but you want to make\n* the type assertion explicit at the call site — for example, when an inferred type is\n* wider than the type you want to publish, or when a literal object should be tagged\n* with its nominal interface. Unlike {@link blindCast}, the compiler still checks that\n* the value is assignable to the target type, so this helper cannot smuggle in an\n* unsafe assertion.\n*\n* `castAs` exists alongside `blindCast` so authors pick the right name at the call\n* site: a `castAs` is type-checked and benign; a `blindCast` is the unsafe escape\n* hatch. The split makes review faster — readers know which casts to scrutinize and\n* which are pure annotations.\n*\n* @example\n* ```typescript\n* interface FancyObject {\n* key: string;\n* keyTwo: {\n* subKey: string;\n* subKeyTwo: number;\n* };\n* }\n*\n* const typedObject = castAs<FancyObject>({\n* key: 'Chookede',\n* keyTwo: {\n* subKey: 'Choookeeeee',\n* subKeyTwo: 2,\n* },\n* });\n* ```\n*\n* @typeParam Type - The type to constrain and tag the value with. The value must be assignable to `Type`.\n*/\nfunction castAs(value) {\n\treturn value;\n}\n//#endregion\nexport { castAs as n, blindCast as t };\n\n//# sourceMappingURL=casts-DpaahrlC.mjs.map","import { t as blindCast } from \"./casts-DpaahrlC.mjs\";\n//#region src/defined.ts\n/**\n* Returns an object with the key/value if value is defined, otherwise an empty object.\n*\n* Use with spread to conditionally include optional properties while satisfying\n* exactOptionalPropertyTypes. This is explicit about which properties are optional\n* and won't inadvertently strip other undefined values.\n*\n* @example\n* ```typescript\n* // Instead of:\n* const obj = {\n* required: 'value',\n* ...(optional ? { optional } : {}),\n* };\n*\n* // Use:\n* const obj = {\n* required: 'value',\n* ...ifDefined('optional', optional),\n* };\n* ```\n*/\nfunction ifDefined(key, value) {\n\treturn value !== void 0 ? blindCast({ [key]: value }) : {};\n}\n//#endregion\nexport { ifDefined as t };\n\n//# sourceMappingURL=defined-BQWA85QH.mjs.map","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { CodecRef } from '@prisma-next/framework-components/codec';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AndExpr,\n type AnyExpression as AstExpression,\n collectOrderedParamRefs,\n IdentifierRef,\n type LimitOffsetValue,\n OrderByItem,\n ProjectionItem,\n SelectAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AppliedMutationDefault,\n MutationDefaultsOptions,\n} from '@prisma-next/sql-relational-core/query-lane-context';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type {\n AggregateFunctions,\n Expression,\n FieldProxy,\n OrderByOptions,\n OrderByScope,\n} from '../expression';\nimport type {\n GatedMethod,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n} from '../scope';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nexport type ExprCallback = (fields: FieldProxy<Scope>, fns: unknown) => Expression<ScopeField>;\n\nexport class BuilderBase<Capabilities = unknown> {\n protected readonly ctx: BuilderContext;\n\n constructor(ctx: BuilderContext) {\n this.ctx = ctx;\n }\n\n protected _gate<Req extends Record<string, Record<string, boolean>>, Args extends unknown[], R>(\n required: Req,\n methodName: string,\n method: (...args: Args) => R,\n ): GatedMethod<Capabilities, Req, (...args: Args) => R> {\n return ((...args: Args): R => {\n assertCapability(this.ctx, required, methodName);\n return method(...args);\n }) as GatedMethod<Capabilities, Req, (...args: Args) => R>;\n }\n}\n\nexport interface BuilderState {\n readonly from: TableSource;\n readonly joins: readonly import('@prisma-next/sql-relational-core/ast').JoinAst[];\n readonly projections: readonly ProjectionItem[];\n readonly where: readonly AstExpression[];\n readonly orderBy: readonly OrderByItem[];\n readonly groupBy: readonly AstExpression[];\n readonly having: AstExpression | undefined;\n readonly limit: LimitOffsetValue | undefined;\n readonly offset: LimitOffsetValue | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: readonly AstExpression[] | undefined;\n readonly scope: Scope;\n readonly rowFields: Record<string, ScopeField>;\n /**\n * Annotations accumulated through `.annotate(...)` calls. Stored as\n * a `Map<namespace, AnnotationValue>` so duplicate namespaces\n * last-write-win. Empty on a fresh state.\n */\n readonly annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n}\n\nexport interface BuilderContext {\n readonly capabilities: Record<string, Record<string, boolean>>;\n readonly queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>;\n readonly target: string;\n readonly storageHash: string;\n /**\n * Contract storage carried by the builder context so column-bound `ParamRef` / `ProjectionItem` construction sites can derive a {@link CodecRef} for each `(table, column)` via {@link codecRefFor}. Builder paths that mint AST nodes without storage (rare — tests, ad-hoc lower paths) leave it undefined; the codec slot then stays `undefined` on the resulting nodes.\n */\n readonly storage: SqlStorage | undefined;\n readonly applyMutationDefaults: (\n options: MutationDefaultsOptions,\n ) => ReadonlyArray<AppliedMutationDefault>;\n /**\n * Codec inferer used inside `createBuiltinFunctions` to construct the raw-SQL tag — `fns.raw` dispatches through `inferCodec(value)` for bare-literal interpolations.\n */\n readonly rawCodecInferer: RawCodecInferer;\n}\n\n/**\n * Derive the canonical {@link CodecRef} for a `(table, column)` from the builder context's storage. Returns `undefined` when the builder context has no storage attached or when the column is unknown to the contract.\n */\nexport function codecRefFor(\n ctx: BuilderContext,\n namespaceId: string,\n tableName: string,\n columnName: string,\n): CodecRef | undefined {\n if (!ctx.storage) return undefined;\n return codecRefForStorageColumn(ctx.storage, namespaceId, tableName, columnName);\n}\n\nexport function emptyState(from: TableSource, scope: Scope): BuilderState {\n return {\n from,\n joins: [],\n projections: [],\n where: [],\n orderBy: [],\n groupBy: [],\n having: undefined,\n limit: undefined,\n offset: undefined,\n distinct: undefined,\n distinctOn: undefined,\n scope,\n rowFields: {},\n annotations: new Map(),\n };\n}\n\nexport function cloneState(state: BuilderState, overrides: Partial<BuilderState>): BuilderState {\n return { ...state, ...overrides };\n}\n\nexport function combineWhereExprs(exprs: readonly AstExpression[]): AstExpression | undefined {\n if (exprs.length === 0) return undefined;\n if (exprs.length === 1) return exprs[0];\n return AndExpr.of(exprs);\n}\n\nexport function buildSelectAst(state: BuilderState): SelectAst {\n const where = combineWhereExprs(state.where);\n return new SelectAst({\n from: state.from,\n joins: state.joins.length > 0 ? state.joins : undefined,\n projection: state.projections,\n where,\n orderBy: state.orderBy.length > 0 ? state.orderBy : undefined,\n distinct: state.distinct,\n distinctOn: state.distinctOn && state.distinctOn.length > 0 ? state.distinctOn : undefined,\n groupBy: state.groupBy.length > 0 ? state.groupBy : undefined,\n having: state.having,\n limit: state.limit,\n offset: state.offset,\n selectAllIntent: undefined,\n });\n}\n\nexport function buildQueryPlan<Row = unknown>(\n ast: import('@prisma-next/sql-relational-core/ast').AnyQueryAst,\n ctx: BuilderContext,\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): SqlQueryPlan<Row> {\n const paramValues = collectOrderedParamRefs(ast).map((r) =>\n r.kind === 'param-ref' ? r.value : undefined,\n );\n\n // SQL DSL has no framework-reserved namespace keys (e.g. `codecs`) in\n // scope at `.build()` time, so user annotations land verbatim here. The\n // ORM dispatch path — which compiles to plans that may already carry\n // reserved keys — enforces the precedence rule in `mergeAnnotations`\n // (`sql-orm-client/src/query-plan-meta.ts`).\n const annotationsRecord =\n annotations !== undefined && annotations.size > 0\n ? Object.freeze(Object.fromEntries(annotations))\n : undefined;\n const meta: PlanMeta = Object.freeze({\n target: ctx.target,\n storageHash: ctx.storageHash,\n lane: 'dsl',\n ...ifDefined('annotations', annotationsRecord),\n });\n\n return Object.freeze({ ast, params: paramValues, meta });\n}\n\nexport function buildPlan<Row = unknown>(\n state: BuilderState,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n return buildQueryPlan<Row>(buildSelectAst(state), ctx, state.annotations);\n}\n\nexport function tableToScope(\n alias: string,\n table: StorageTable,\n options?: {\n readonly storage?: SqlStorage | undefined;\n readonly namespaceId?: string | undefined;\n readonly tableName?: string | undefined;\n },\n): Scope {\n const storage = options?.storage;\n const lookupName = options?.tableName;\n const namespaceId = options?.namespaceId;\n const fields: ScopeTable = {};\n for (const [colName, col] of Object.entries(table.columns)) {\n const codec =\n storage && lookupName && namespaceId !== undefined\n ? codecRefForStorageColumn(storage, namespaceId, lookupName, colName)\n : undefined;\n fields[colName] = {\n codecId: col.codecId,\n nullable: col.nullable,\n ...(codec !== undefined ? { codec } : {}),\n };\n }\n return { topLevel: { ...fields }, namespaces: { [alias]: fields } };\n}\n\nexport function mergeScopes<A extends Scope, B extends Scope>(a: A, b: B): MergeScopes<A, B> {\n const topLevel: ScopeTable = {};\n for (const [k, v] of Object.entries(a.topLevel)) {\n if (!(k in b.topLevel)) topLevel[k] = v;\n }\n for (const [k, v] of Object.entries(b.topLevel)) {\n if (!(k in a.topLevel)) topLevel[k] = v;\n }\n return {\n topLevel,\n namespaces: { ...a.namespaces, ...b.namespaces },\n } as MergeScopes<A, B>;\n}\n\nexport function nullableScope<S extends Scope>(scope: S): NullableScope<S> {\n const mkNullable = (tbl: ScopeTable): ScopeTable => {\n const result: ScopeTable = {};\n for (const [k, v] of Object.entries(tbl)) {\n result[k] = {\n codecId: v.codecId,\n nullable: true,\n ...(v.codec !== undefined ? { codec: v.codec } : {}),\n };\n }\n return result;\n };\n const namespaces: Record<string, ScopeTable> = {};\n for (const [k, v] of Object.entries(scope.namespaces)) {\n namespaces[k] = mkNullable(v);\n }\n return { topLevel: mkNullable(scope.topLevel), namespaces } as NullableScope<S>;\n}\n\nexport function orderByScopeOf<S extends Scope, R extends Record<string, ScopeField>>(\n scope: S,\n rowFields: R,\n): OrderByScope<S, R> {\n return {\n topLevel: { ...scope.topLevel, ...rowFields },\n namespaces: scope.namespaces,\n };\n}\n\nexport function assertCapability(\n ctx: BuilderContext,\n required: Record<string, Record<string, boolean>>,\n methodName: string,\n): void {\n for (const [ns, keys] of Object.entries(required)) {\n for (const key of Object.keys(keys)) {\n if (!ctx.capabilities[ns]?.[key]) {\n throw new Error(`${methodName}() requires capability ${ns}.${key}`);\n }\n }\n }\n}\n\nexport function resolveSelectArgs(\n args: unknown[],\n scope: Scope,\n ctx: BuilderContext,\n): { projections: ProjectionItem[]; newRowFields: Record<string, ScopeField> } {\n const projections: ProjectionItem[] = [];\n const newRowFields: Record<string, ScopeField> = {};\n\n if (args.length === 0) return { projections, newRowFields };\n\n if (typeof args[0] === 'string' && (args.length === 1 || typeof args[1] !== 'function')) {\n for (const colName of args as string[]) {\n const field = scope.topLevel[colName];\n if (!field) throw new Error(`Column \"${colName}\" not found in scope`);\n projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName), field.codec));\n newRowFields[colName] = field;\n }\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'string' && typeof args[1] === 'function') {\n const alias = args[0] as string;\n const exprFn = args[1] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Expression<ScopeField>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = exprFn(createFieldProxy(scope), fns);\n const field = result.returnType;\n projections.push(ProjectionItem.of(alias, result.buildAst(), field.codec));\n newRowFields[alias] = field;\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'function') {\n const callbackFn = args[0] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Record<string, Expression<ScopeField>>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const record = callbackFn(createFieldProxy(scope), fns);\n for (const [key, expr] of Object.entries(record)) {\n const field = expr.returnType;\n projections.push(ProjectionItem.of(key, expr.buildAst(), field.codec));\n newRowFields[key] = field;\n }\n return { projections, newRowFields };\n }\n\n throw new Error('Invalid .select() arguments');\n}\n\nexport function resolveOrderBy(\n arg: unknown,\n options: OrderByOptions | undefined,\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n useAggregateFns: boolean,\n): OrderByItem {\n const dir = options?.direction ?? 'asc';\n\n if (typeof arg === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n if (!(arg in combined.topLevel))\n throw new Error(`Column \"${arg}\" not found in scope for orderBy`);\n const expr = IdentifierRef.of(arg);\n return dir === 'asc' ? OrderByItem.asc(expr) : OrderByItem.desc(expr);\n }\n\n if (typeof arg === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = useAggregateFns\n ? createAggregateFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer)\n : createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (arg as ExprCallback)(createFieldProxy(combined), fns);\n return dir === 'asc' ? OrderByItem.asc(result.buildAst()) : OrderByItem.desc(result.buildAst());\n }\n\n throw new Error('Invalid orderBy argument');\n}\n\nexport function resolveGroupBy(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (typeof args[0] === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for groupBy`);\n return IdentifierRef.of(colName);\n });\n }\n\n if (typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n\n throw new Error('Invalid groupBy arguments');\n}\n\nexport function resolveDistinctOn(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (args.length === 1 && typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes, ctx.rawCodecInferer);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for distinctOn`);\n return IdentifierRef.of(colName);\n });\n}\n","import type {\n AnnotationValue,\n OperationKind,\n ValidAnnotations,\n} from '@prisma-next/framework-components/runtime';\nimport { assertAnnotationsApplicable } from '@prisma-next/framework-components/runtime';\nimport { DerivedTableSource, type SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport { toExpr } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AggregateFunctions,\n BooleanCodecType,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n OrderByOptions,\n OrderByScope,\n WithField,\n WithFields,\n} from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type {\n Expand,\n JoinOuterScope,\n JoinSource,\n QueryContext,\n Scope,\n ScopeField,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n SubqueryMarker,\n} from '../scope';\nimport type { GroupedQuery } from '../types/grouped-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { PaginationValue } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n buildPlan,\n buildSelectAst,\n cloneState,\n orderByScopeOf,\n resolveDistinctOn,\n resolveGroupBy,\n resolveOrderBy,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nabstract class QueryBase<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n> extends BuilderBase<QC['capabilities']> {\n protected readonly state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.state = state;\n }\n\n protected abstract clone(state: BuilderState): this;\n\n distinctOn = this._gate(\n { postgres: { distinctOn: true } },\n 'distinctOn',\n (...args: unknown[]) => {\n const exprs = resolveDistinctOn(args, this.state.scope, this.state.rowFields, this.ctx);\n return this.clone(\n cloneState(this.state, {\n distinctOn: [...(this.state.distinctOn ?? []), ...exprs],\n }),\n );\n },\n );\n\n limit(count: PaginationValue<QC>): this {\n const limit = typeof count === 'number' ? count : toExpr(count);\n return this.clone(cloneState(this.state, { limit }));\n }\n\n offset(count: PaginationValue<QC>): this {\n const offset = typeof count === 'number' ? count : toExpr(count);\n return this.clone(cloneState(this.state, { offset }));\n }\n\n distinct(): this {\n return this.clone(cloneState(this.state, { distinct: true }));\n }\n\n /**\n * Attach one or more annotations to this query plan.\n *\n * Read builders (`SelectQueryImpl`, `GroupedQueryImpl`) accept\n * annotations whose declared `applicableTo` includes `'read'`.\n * The type-level `As & ValidAnnotations<'read', As>` gate rejects\n * write-only annotations at the call site; the runtime check below\n * fails closed for callers that bypass the type gate (cast / `any`).\n *\n * Multiple `.annotate(...)` calls compose; duplicate namespaces use\n * last-write-wins. The accumulated annotations are merged into\n * `plan.meta.annotations` at `.build()` time, alongside any framework-\n * internal metadata under reserved namespaces (e.g. `codecs`).\n *\n * Chainable in any position (before / after `.where`, `.select`,\n * `.limit`, etc.); the returned builder has the same row type.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'read', As>\n ): this {\n assertAnnotationsApplicable(\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n 'read',\n 'sql-dsl.annotate',\n );\n const next = new Map(this.state.annotations);\n for (const annotation of annotations as readonly AnnotationValue<unknown, OperationKind>[]) {\n next.set(annotation.namespace, annotation);\n }\n return this.clone(cloneState(this.state, { annotations: next }));\n }\n\n groupBy(\n ...fields: ((keyof RowType | keyof AvailableScope['topLevel']) & string)[]\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(...args: unknown[]): unknown {\n const exprs = resolveGroupBy(args, this.state.scope, this.state.rowFields, this.ctx);\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(\n cloneState(this.state, { groupBy: [...this.state.groupBy, ...exprs] }),\n this.ctx,\n );\n }\n\n as<Alias extends string>(alias: Alias): JoinSource<RowType, Alias> {\n const ast = buildSelectAst(this.state);\n const derivedSource = DerivedTableSource.as(alias, ast);\n const scope = {\n topLevel: this.state.rowFields as RowType,\n namespaces: { [alias]: this.state.rowFields } as Record<Alias, RowType>,\n };\n return {\n getJoinOuterScope: () => scope,\n buildAst: () => derivedSource,\n\n // `as unknown` is necessary, because JoinOuterScope is a phantom type-only property that does not exist at runtime\n } satisfies Omit<JoinSource<RowType, Alias>, typeof JoinOuterScope> as unknown as JoinSource<\n RowType,\n Alias\n >;\n }\n\n getRowFields(): Record<string, ScopeField> {\n return this.state.rowFields;\n }\n\n buildAst(): SelectAst {\n return buildSelectAst(this.state);\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n return buildPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n this.state,\n this.ctx,\n );\n }\n}\n\nexport class SelectQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements SelectQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new SelectQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<RowType, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<RowType, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<RowType & ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.state.scope, this.ctx);\n return new SelectQueryImpl(\n cloneState(this.state, {\n projections: [...this.state.projections, ...projections],\n rowFields: { ...this.state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): SelectQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.state.scope);\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new SelectQueryImpl(\n cloneState(this.state, {\n where: [...this.state.where, result.buildAst()],\n }),\n this.ctx,\n );\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n false,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n\nexport class GroupedQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements GroupedQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n having(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<BooleanCodecType>,\n ): GroupedQuery<QC, AvailableScope, RowType> {\n const combined = orderByScopeOf(\n this.state.scope as AvailableScope,\n this.state.rowFields as RowType,\n );\n const fns = createAggregateFunctions<QC>(\n this.ctx.queryOperationTypes,\n this.ctx.rawCodecInferer,\n );\n const result = expr(createFieldProxy(combined), fns);\n return new GroupedQueryImpl(cloneState(this.state, { having: result.buildAst() }), this.ctx);\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n true,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n","import {\n AndExpr,\n DerivedTableSource,\n JoinAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n Subquery,\n} from '../scope';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n cloneState,\n emptyState,\n mergeScopes,\n nullableScope,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class JoinedTablesImpl<QC extends QueryContext, AvailableScope extends Scope>\n extends BuilderBase<QC['capabilities']>\n implements JoinedTables<QC, AvailableScope>\n{\n readonly #state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.#state = state;\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n );\n return this.#addLateralJoin('inner', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n >\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n ),\n );\n return this.#addLateralJoin('left', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['outerLateralJoin'];\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.#state.scope, this.ctx);\n return new SelectQueryImpl<QC, AvailableScope>(\n cloneState(this.#state, {\n projections: [...this.#state.projections, ...projections],\n rowFields: { ...this.#state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'inner', targetScope, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'left', targetScope, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'right', targetScope, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'full', targetScope, on);\n }\n\n #addJoin<Other extends JoinSource<ScopeTable, string | never>, ResultScope extends Scope>(\n other: Other,\n joinType: 'inner' | 'left' | 'right' | 'full',\n resultScope: ResultScope,\n onExpr: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, ResultScope> {\n const fieldProxy = createFieldProxy(\n mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n ),\n ) as FieldProxy<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>>;\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const onResult = onExpr(fieldProxy, fns);\n const joinAst = new JoinAst(joinType, other.buildAst(), onResult.buildAst());\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n\n #buildLateral(\n alias: string,\n builderFn: (\n lateral: LateralBuilder<QC, AvailableScope>,\n ) => Subquery<Record<string, ScopeField>>,\n ) {\n const lateralBuilder: LateralBuilder<QC, AvailableScope> = {\n from: (other) => {\n const otherScope = other.getJoinOuterScope();\n const parentMerged = mergeScopes(this.#state.scope, otherScope);\n return new SelectQueryImpl(\n emptyState(other.buildAst() as TableSource, parentMerged),\n this.ctx,\n ) as unknown as SelectQuery<QC, AvailableScope, EmptyRow>;\n },\n };\n\n const subquery = builderFn(lateralBuilder);\n const subqueryAst = subquery.buildAst();\n const derivedSource = DerivedTableSource.as(alias, subqueryAst);\n const subqueryRowFields: ScopeTable = subquery.getRowFields();\n const lateralScope: Scope = {\n topLevel: subqueryRowFields,\n namespaces: { [alias]: subqueryRowFields },\n };\n\n return { derivedSource, lateralScope };\n }\n\n #addLateralJoin<ResultScope extends Scope>(\n joinType: 'inner' | 'left',\n resultScope: ResultScope,\n derivedSource: DerivedTableSource,\n ): JoinedTables<QC, ResultScope> {\n const onExpr = AndExpr.of([]);\n const joinAst = new JoinAst(joinType, derivedSource, onExpr, true);\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n}\n","import type {\n AnnotationValue,\n OperationKind,\n ValidAnnotations,\n} from '@prisma-next/framework-components/runtime';\nimport { assertAnnotationsApplicable } from '@prisma-next/framework-components/runtime';\nimport type { StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression as AstExpression,\n ColumnRef,\n DeleteAst,\n InsertAst,\n ParamRef,\n ProjectionItem,\n type TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { MutationDefaultsOp } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type { Expression, ExpressionBuilder } from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type { QueryContext, Scope, ScopeField } from '../scope';\nimport type {\n DeleteQuery,\n InsertQuery,\n ReturningCapability,\n UpdateQuery,\n} from '../types/mutation-query';\nimport {\n BuilderBase,\n type BuilderContext,\n buildQueryPlan,\n codecRefFor,\n combineWhereExprs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\n\n/**\n * Validates and merges a variadic annotations call into a builder's\n * accumulated user-annotations map. Used by `.annotate(...)` on each of\n * the three mutation builders (`InsertQueryImpl`, `UpdateQueryImpl`,\n * `DeleteQueryImpl`); the read builders share the same logic via\n * `QueryBase.annotate()` in `./query-impl.ts`.\n *\n * Runs `assertAnnotationsApplicable` at call time (not at `.build()`) so\n * inapplicable annotations forced through casts surface immediately\n * rather than at plan-construction time.\n */\nfunction mergeWriteAnnotations(\n current: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n annotations: readonly AnnotationValue<unknown, OperationKind>[],\n): ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> {\n assertAnnotationsApplicable(annotations, 'write', 'sql-dsl.annotate');\n const next = new Map(current);\n for (const annotation of annotations) {\n next.set(annotation.namespace, annotation);\n }\n return next;\n}\n\ntype WhereCallback = ExpressionBuilder<Scope, QueryContext>;\nexport type UpdateSetCallback = (\n fields: ReturnType<typeof createFieldProxy>,\n fns: ReturnType<typeof createFunctions>,\n) => Record<string, Expression<ScopeField> | undefined>;\n\nexport function buildParamValues(\n values: Record<string, unknown>,\n namespaceId: string,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, ParamRef> {\n const params: Record<string, ParamRef> = {};\n for (const [col, value] of Object.entries(values)) {\n const column = table.columns[col];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, col) : undefined;\n params[col] = ParamRef.of(value, codec ? { codec } : undefined);\n }\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values })) {\n const column = table.columns[def.column];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, def.column) : undefined;\n params[def.column] = ParamRef.of(def.value, codec ? { codec } : undefined);\n }\n return params;\n}\n\nfunction buildReturningProjections(\n tableName: string,\n columns: string[],\n rowFields: Record<string, ScopeField>,\n): ProjectionItem[] {\n return columns.map((col) =>\n ProjectionItem.of(col, ColumnRef.of(tableName, col), rowFields[col]?.codec),\n );\n}\n\nfunction evaluateWhere(\n whereCallback: WhereCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n rawCodecInferer: BuilderContext['rawCodecInferer'],\n): AstExpression {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes, rawCodecInferer);\n const result = whereCallback(fieldProxy, fns as never);\n return result.buildAst();\n}\n\nexport function evaluateUpdateCallback(\n callback: UpdateSetCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n rawCodecInferer: BuilderContext['rawCodecInferer'],\n): Record<string, AstExpression> {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes, rawCodecInferer);\n const result = callback(fieldProxy, fns as never);\n const set: Record<string, AstExpression> = {};\n for (const [col, expr] of Object.entries(result)) {\n if (expr !== undefined) {\n set[col] = expr.buildAst();\n }\n }\n return set;\n}\n\nexport function buildSetExpressions(\n exprs: Record<string, AstExpression>,\n namespaceId: string,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, AstExpression> {\n const set: Record<string, AstExpression> = { ...exprs };\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values: exprs })) {\n if (!(def.column in set)) {\n const column = table.columns[def.column];\n const codec = column ? codecRefFor(ctx, namespaceId, tableName, def.column) : undefined;\n set[def.column] = ParamRef.of(def.value, ifDefined('codec', codec));\n }\n }\n return set;\n}\n\nexport class InsertQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements InsertQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #namespaceId: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #rows: ReadonlyArray<Record<string, unknown>>;\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n namespaceId: string,\n table: StorageTable,\n scope: Scope,\n rows: ReadonlyArray<Record<string, unknown>>,\n ctx: BuilderContext,\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#namespaceId = namespaceId;\n this.#table = table;\n this.#scope = scope;\n this.#rows = rows;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n returning = this._gate<ReturningCapability, string[], InsertQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new InsertQueryImpl(\n this.#tableSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n this.#rows,\n this.ctx,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as InsertQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * The type-level `As & ValidAnnotations<'write', As>` gate rejects\n * read-only annotations at the call site; the runtime check fails\n * closed for callers that bypass the type gate. See `QueryBase.annotate`\n * in `./query-impl.ts` for the read-builder counterpart.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): InsertQuery<QC, AvailableScope, RowType> {\n return new InsertQueryImpl(\n this.#tableSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n this.#rows,\n this.ctx,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n if (this.#rows.length === 0) {\n throw new Error('insert() called with an empty row array — at least one row is required');\n }\n\n const paramRows = this.#rows.map((rowValues) =>\n buildParamValues(\n rowValues,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'create',\n this.ctx,\n ),\n );\n\n let ast = InsertAst.into(this.#tableSource).withRows(paramRows);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n\nexport class UpdateQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements UpdateQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #setExpressions: Record<string, AstExpression>;\n readonly #whereExprs: readonly AstExpression[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n scope: Scope,\n setExpressions: Record<string, AstExpression>,\n ctx: BuilderContext,\n whereExprs: readonly AstExpression[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#scope = scope;\n this.#setExpressions = setExpressions;\n this.#whereExprs = whereExprs;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): UpdateQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.#scope);\n const fns = createFunctions(this.ctx.queryOperationTypes, this.ctx.rawCodecInferer);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n [...this.#whereExprs, result.buildAst()],\n this.#returningColumns,\n this.#rowFields,\n this.#annotations,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], UpdateQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n this.#whereExprs,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as UpdateQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * See `InsertQueryImpl.annotate` for semantics; the runtime check\n * fails closed for callers that bypass the type-level gate.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): UpdateQuery<QC, AvailableScope, RowType> {\n return new UpdateQueryImpl(\n this.#tableSource,\n this.#scope,\n this.#setExpressions,\n this.ctx,\n this.#whereExprs,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n let ast = UpdateAst.table(this.#tableSource)\n .withSet(this.#setExpressions)\n .withWhere(combineWhereExprs(this.#whereExprs));\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n\nexport class DeleteQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements DeleteQuery<QC, AvailableScope, RowType>\n{\n readonly #tableSource: TableSource;\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n readonly #annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n\n constructor(\n tableSource: TableSource,\n scope: Scope,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> = new Map(),\n ) {\n super(ctx);\n this.#tableSource = tableSource;\n this.#tableName = tableSource.name;\n this.#scope = scope;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n this.#annotations = annotations;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n this.#annotations,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], DeleteQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n this.#annotations,\n ) as unknown as DeleteQuery<QC, AvailableScope, never>;\n },\n );\n\n /**\n * Attach one or more write-typed annotations to this query plan.\n * See `InsertQueryImpl.annotate` for semantics.\n */\n annotate<As extends readonly AnnotationValue<unknown, OperationKind>[]>(\n ...annotations: As & ValidAnnotations<'write', As>\n ): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableSource,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n this.#returningColumns,\n this.#rowFields,\n mergeWriteAnnotations(\n this.#annotations,\n annotations as readonly AnnotationValue<unknown, OperationKind>[],\n ),\n );\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes, this.ctx.rawCodecInferer),\n ),\n );\n\n let ast = DeleteAst.from(this.#tableSource).withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(\n buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),\n );\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.ctx,\n this.#annotations,\n );\n }\n}\n","import { TableSource } from '@prisma-next/sql-relational-core/ast';\n\nexport function tableSourceForProxy(\n tableName: string,\n alias: string,\n namespaceId: string,\n): TableSource {\n return TableSource.named(tableName, alias !== tableName ? alias : undefined, namespaceId);\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport type { AnyFromSource, TableSource } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n RebindScope,\n Scope,\n ScopeField,\n ScopeTable,\n StorageTableToScopeTable,\n Subquery,\n} from '../scope';\nimport type { NamespaceTable, TableProxyContract } from '../types/db';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport type { TableProxy } from '../types/table-proxy';\nimport { BuilderBase, type BuilderContext, emptyState, tableToScope } from './builder-base';\nimport { JoinedTablesImpl } from './joined-tables-impl';\nimport {\n buildParamValues,\n buildSetExpressions,\n DeleteQueryImpl,\n evaluateUpdateCallback,\n InsertQueryImpl,\n UpdateQueryImpl,\n type UpdateSetCallback,\n} from './mutation-impl';\nimport { SelectQueryImpl } from './query-impl';\nimport { tableSourceForProxy } from './table-source-for-proxy';\n\nexport class TableProxyImpl<\n C extends TableProxyContract,\n Name extends string,\n Alias extends string,\n AvailableScope extends Scope,\n QC extends QueryContext,\n NsId extends string = string,\n >\n extends BuilderBase<C['capabilities']>\n implements TableProxy<C, NsId, Name, Alias, AvailableScope, QC>\n{\n declare readonly [JoinOuterScope]: JoinSource<\n StorageTableToScopeTable<NamespaceTable<C, NsId, Name>>,\n Alias\n >[typeof JoinOuterScope];\n\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #namespaceId: string;\n readonly #fromSource: TableSource;\n readonly #scope: Scope;\n\n constructor(\n tableName: string,\n table: StorageTable,\n alias: string,\n ctx: BuilderContext,\n namespaceId: string,\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#namespaceId = namespaceId;\n this.#scope = tableToScope(alias, table, {\n storage: ctx.storage,\n tableName,\n namespaceId,\n });\n this.#fromSource = tableSourceForProxy(tableName, alias, namespaceId);\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n > => {\n return this.#toJoined().lateralJoin(alias, builder);\n },\n ) as TableProxy<C, NsId, Name, Alias, AvailableScope, QC>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n >\n > => {\n return this.#toJoined().outerLateralJoin(alias, builder);\n },\n ) as TableProxy<C, NsId, Name, Alias, AvailableScope, QC>['outerLateralJoin'];\n\n getJoinOuterScope(): Scope {\n return this.#scope;\n }\n\n buildAst(): AnyFromSource {\n return this.#fromSource;\n }\n\n as<NewAlias extends string>(\n newAlias: NewAlias,\n ): TableProxy<C, NsId, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC> {\n return new TableProxyImpl<\n C,\n Name,\n NewAlias,\n RebindScope<AvailableScope, Alias, NewAlias>,\n QC,\n NsId\n >(this.#tableName, this.#table, newAlias, this.ctx, this.#namespaceId);\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<LAlias extends string, Field extends ScopeField>(\n alias: LAlias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, LAlias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n return new SelectQueryImpl(emptyState(this.#fromSource, this.#scope), this.ctx).select(\n ...(args as string[]),\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().innerJoin(other, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n return this.#toJoined().outerLeftJoin(other, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().outerRightJoin(other, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n return this.#toJoined().outerFullJoin(other, on);\n }\n\n insert(rows: ReadonlyArray<Record<string, unknown>>): InsertQuery<QC, AvailableScope, EmptyRow> {\n return new InsertQueryImpl(\n this.#fromSource,\n this.#namespaceId,\n this.#table,\n this.#scope,\n rows,\n this.ctx,\n );\n }\n\n update(\n setOrCallback:\n | Record<string, unknown>\n | ((\n fields: FieldProxy<AvailableScope>,\n fns: Functions<QC>,\n ) => Record<string, Expression<ScopeField> | undefined>),\n ): UpdateQuery<QC, AvailableScope, EmptyRow> {\n if (typeof setOrCallback === 'function') {\n const callbackExprs = evaluateUpdateCallback(\n setOrCallback as UpdateSetCallback,\n this.#scope,\n this.ctx.queryOperationTypes,\n this.ctx.rawCodecInferer,\n );\n const setExpressions = buildSetExpressions(\n callbackExprs,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n return new UpdateQueryImpl(this.#fromSource, this.#scope, setExpressions, this.ctx);\n }\n const setExpressions = buildParamValues(\n setOrCallback,\n this.#namespaceId,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n return new UpdateQueryImpl(this.#fromSource, this.#scope, setExpressions, this.ctx);\n }\n\n delete(): DeleteQuery<QC, AvailableScope, EmptyRow> {\n return new DeleteQueryImpl(this.#fromSource, this.#scope, this.ctx);\n }\n\n #toJoined(): JoinedTables<QC, AvailableScope> {\n return new JoinedTablesImpl(emptyState(this.#fromSource, this.#scope), this.ctx);\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RawCodecInferer } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { Db, TableProxyContract } from '../types/db';\nimport type { BuilderContext } from './builder-base';\nimport { resolveTableInNamespace } from './resolve-table';\nimport { TableProxyImpl } from './table-proxy-impl';\n\nexport interface SqlOptions<C extends Contract<SqlStorage> & TableProxyContract> {\n readonly context: ExecutionContext<C>;\n readonly rawCodecInferer: RawCodecInferer;\n}\n\nexport function sql<C extends Contract<SqlStorage> & TableProxyContract>(\n options: SqlOptions<C>,\n): Db<C> {\n const { context, rawCodecInferer } = options;\n const ctx: BuilderContext = {\n capabilities: context.contract.capabilities,\n queryOperationTypes: context.queryOperations.entries(),\n target: context.contract.target ?? 'unknown',\n storageHash: context.contract.storage.storageHash ?? 'unknown',\n storage: context.contract.storage,\n applyMutationDefaults: (options) => context.applyMutationDefaults(options),\n rawCodecInferer,\n };\n\n const { storage } = context.contract;\n\n return new Proxy({} as Db<C>, {\n get(_target, prop: string | symbol) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n if (!Object.hasOwn(storage.namespaces, prop)) {\n return undefined;\n }\n const namespaceId = prop;\n return new Proxy(\n {},\n {\n get(_facetTarget, tableName: string | symbol) {\n if (typeof tableName !== 'string') {\n return undefined;\n }\n const table = resolveTableInNamespace(storage, namespaceId, tableName);\n if (table) {\n // `namespaceId` is a dynamic Proxy key with no static literal here, so the\n // proxy's `NsId` type param lands on its `string` default at this boundary.\n // `TableProxyImpl` still forwards `NsId` through its `as()`/join chain.\n return new TableProxyImpl(tableName, table, tableName, ctx, namespaceId);\n }\n return undefined;\n },\n },\n );\n },\n });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-builder",
|
|
3
|
-
"version": "0.13.0-dev.
|
|
3
|
+
"version": "0.13.0-dev.34",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"description": "SQL builder lane for Prisma Next",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@prisma-next/contract": "0.13.0-dev.
|
|
10
|
-
"@prisma-next/framework-components": "0.13.0-dev.
|
|
11
|
-
"@prisma-next/sql-contract": "0.13.0-dev.
|
|
12
|
-
"@prisma-next/sql-operations": "0.13.0-dev.
|
|
13
|
-
"@prisma-next/sql-relational-core": "0.13.0-dev.
|
|
9
|
+
"@prisma-next/contract": "0.13.0-dev.34",
|
|
10
|
+
"@prisma-next/framework-components": "0.13.0-dev.34",
|
|
11
|
+
"@prisma-next/sql-contract": "0.13.0-dev.34",
|
|
12
|
+
"@prisma-next/sql-operations": "0.13.0-dev.34",
|
|
13
|
+
"@prisma-next/sql-relational-core": "0.13.0-dev.34"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@prisma-next/adapter-postgres": "0.13.0-dev.
|
|
17
|
-
"@prisma-next/ids": "0.13.0-dev.
|
|
18
|
-
"@prisma-next/sql-contract-ts": "0.13.0-dev.
|
|
19
|
-
"@prisma-next/target-postgres": "0.13.0-dev.
|
|
20
|
-
"@prisma-next/test-utils": "0.13.0-dev.
|
|
21
|
-
"@prisma-next/utils": "0.13.0-dev.
|
|
22
|
-
"@prisma-next/tsconfig": "0.13.0-dev.
|
|
23
|
-
"@prisma-next/tsdown": "0.13.0-dev.
|
|
16
|
+
"@prisma-next/adapter-postgres": "0.13.0-dev.34",
|
|
17
|
+
"@prisma-next/ids": "0.13.0-dev.34",
|
|
18
|
+
"@prisma-next/sql-contract-ts": "0.13.0-dev.34",
|
|
19
|
+
"@prisma-next/target-postgres": "0.13.0-dev.34",
|
|
20
|
+
"@prisma-next/test-utils": "0.13.0-dev.34",
|
|
21
|
+
"@prisma-next/utils": "0.13.0-dev.34",
|
|
22
|
+
"@prisma-next/tsconfig": "0.13.0-dev.34",
|
|
23
|
+
"@prisma-next/tsdown": "0.13.0-dev.34",
|
|
24
24
|
"tsdown": "0.22.1",
|
|
25
25
|
"typescript": "5.9.3",
|
|
26
26
|
"vitest": "4.1.8"
|
package/src/runtime/sql.ts
CHANGED
|
@@ -46,6 +46,9 @@ export function sql<C extends Contract<SqlStorage> & TableProxyContract>(
|
|
|
46
46
|
}
|
|
47
47
|
const table = resolveTableInNamespace(storage, namespaceId, tableName);
|
|
48
48
|
if (table) {
|
|
49
|
+
// `namespaceId` is a dynamic Proxy key with no static literal here, so the
|
|
50
|
+
// proxy's `NsId` type param lands on its `string` default at this boundary.
|
|
51
|
+
// `TableProxyImpl` still forwards `NsId` through its `as()`/join chain.
|
|
49
52
|
return new TableProxyImpl(tableName, table, tableName, ctx, namespaceId);
|
|
50
53
|
}
|
|
51
54
|
return undefined;
|
|
@@ -25,7 +25,7 @@ import type {
|
|
|
25
25
|
StorageTableToScopeTable,
|
|
26
26
|
Subquery,
|
|
27
27
|
} from '../scope';
|
|
28
|
-
import type {
|
|
28
|
+
import type { NamespaceTable, TableProxyContract } from '../types/db';
|
|
29
29
|
import type { JoinedTables } from '../types/joined-tables';
|
|
30
30
|
import type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';
|
|
31
31
|
import type { SelectQuery } from '../types/select-query';
|
|
@@ -47,16 +47,17 @@ import { tableSourceForProxy } from './table-source-for-proxy';
|
|
|
47
47
|
|
|
48
48
|
export class TableProxyImpl<
|
|
49
49
|
C extends TableProxyContract,
|
|
50
|
-
Name extends string
|
|
50
|
+
Name extends string,
|
|
51
51
|
Alias extends string,
|
|
52
52
|
AvailableScope extends Scope,
|
|
53
53
|
QC extends QueryContext,
|
|
54
|
+
NsId extends string = string,
|
|
54
55
|
>
|
|
55
56
|
extends BuilderBase<C['capabilities']>
|
|
56
|
-
implements TableProxy<C, Name, Alias, AvailableScope, QC>
|
|
57
|
+
implements TableProxy<C, NsId, Name, Alias, AvailableScope, QC>
|
|
57
58
|
{
|
|
58
59
|
declare readonly [JoinOuterScope]: JoinSource<
|
|
59
|
-
StorageTableToScopeTable<
|
|
60
|
+
StorageTableToScopeTable<NamespaceTable<C, NsId, Name>>,
|
|
60
61
|
Alias
|
|
61
62
|
>[typeof JoinOuterScope];
|
|
62
63
|
|
|
@@ -97,7 +98,7 @@ export class TableProxyImpl<
|
|
|
97
98
|
> => {
|
|
98
99
|
return this.#toJoined().lateralJoin(alias, builder);
|
|
99
100
|
},
|
|
100
|
-
) as TableProxy<C, Name, Alias, AvailableScope, QC>['lateralJoin'];
|
|
101
|
+
) as TableProxy<C, NsId, Name, Alias, AvailableScope, QC>['lateralJoin'];
|
|
101
102
|
|
|
102
103
|
outerLateralJoin = this._gate(
|
|
103
104
|
{ sql: { lateral: true } },
|
|
@@ -114,7 +115,7 @@ export class TableProxyImpl<
|
|
|
114
115
|
> => {
|
|
115
116
|
return this.#toJoined().outerLateralJoin(alias, builder);
|
|
116
117
|
},
|
|
117
|
-
) as TableProxy<C, Name, Alias, AvailableScope, QC>['outerLateralJoin'];
|
|
118
|
+
) as TableProxy<C, NsId, Name, Alias, AvailableScope, QC>['outerLateralJoin'];
|
|
118
119
|
|
|
119
120
|
getJoinOuterScope(): Scope {
|
|
120
121
|
return this.#scope;
|
|
@@ -126,8 +127,15 @@ export class TableProxyImpl<
|
|
|
126
127
|
|
|
127
128
|
as<NewAlias extends string>(
|
|
128
129
|
newAlias: NewAlias,
|
|
129
|
-
): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC> {
|
|
130
|
-
return new TableProxyImpl
|
|
130
|
+
): TableProxy<C, NsId, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC> {
|
|
131
|
+
return new TableProxyImpl<
|
|
132
|
+
C,
|
|
133
|
+
Name,
|
|
134
|
+
NewAlias,
|
|
135
|
+
RebindScope<AvailableScope, Alias, NewAlias>,
|
|
136
|
+
QC,
|
|
137
|
+
NsId
|
|
138
|
+
>(this.#tableName, this.#table, newAlias, this.ctx, this.#namespaceId);
|
|
131
139
|
}
|
|
132
140
|
|
|
133
141
|
select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(
|
package/src/types/db.ts
CHANGED
|
@@ -5,7 +5,20 @@ export type CapabilitiesBase = Record<string, Record<string, boolean>>;
|
|
|
5
5
|
|
|
6
6
|
type NamespaceEntries = Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
7
7
|
|
|
8
|
+
// The application-domain models the table-proxy helpers read to map a storage
|
|
9
|
+
// table -> model and column -> field within a namespace coordinate. The index
|
|
10
|
+
// signature lets the helpers index `C['domain']['namespaces'][NsId]` by a
|
|
11
|
+
// generic `NsId` directly, so `FindModelForTable` / `FindFieldForColumn` no
|
|
12
|
+
// longer need a `C extends Contract<SqlStorage>` guard to reach the per-namespace
|
|
13
|
+
// models; concrete emitted contracts (whose models are richer) satisfy it.
|
|
14
|
+
type NamespaceDomain = Readonly<
|
|
15
|
+
Record<string, { readonly models: Readonly<Record<string, unknown>> }>
|
|
16
|
+
>;
|
|
17
|
+
|
|
8
18
|
export type TableProxyContract = {
|
|
19
|
+
readonly domain: {
|
|
20
|
+
readonly namespaces: NamespaceDomain;
|
|
21
|
+
};
|
|
9
22
|
readonly storage: {
|
|
10
23
|
readonly namespaces: Readonly<Record<string, { readonly entries: NamespaceEntries }>>;
|
|
11
24
|
};
|
|
@@ -38,19 +51,34 @@ export type TableInAnyNamespace<C extends TableProxyContract, Name extends strin
|
|
|
38
51
|
: never;
|
|
39
52
|
}[keyof C['storage']['namespaces']];
|
|
40
53
|
|
|
54
|
+
// The exact storage table at a single namespace coordinate. Resolving through
|
|
55
|
+
// the coordinate (rather than the cross-namespace `UnboundTables` union) keeps
|
|
56
|
+
// a bare table name shared across namespaces resolving to each namespace's own
|
|
57
|
+
// table — no per-namespace column intersection. `TablesInNamespace` narrows the
|
|
58
|
+
// open-dict `entries['table']` (`Record<string, unknown>`) back to the typed
|
|
59
|
+
// `StorageTable` map before indexing by the bare name.
|
|
60
|
+
export type NamespaceTable<
|
|
61
|
+
C extends TableProxyContract,
|
|
62
|
+
NsId extends string,
|
|
63
|
+
Name extends string,
|
|
64
|
+
> = TablesInNamespace<C['storage']['namespaces'][NsId]>[Name];
|
|
65
|
+
|
|
41
66
|
// The tables of a single storage namespace, keyed by bare table name. Lets
|
|
42
67
|
// callers reach a table by its namespace coordinate (`db.<ns>.<table>`) when
|
|
43
|
-
// the same bare name is declared in more than one namespace.
|
|
68
|
+
// the same bare name is declared in more than one namespace. The `NsId`
|
|
69
|
+
// coordinate is threaded into each `TableProxy` so its column/field resolution
|
|
70
|
+
// is a function of `(NsId, Name)`, not `Name` alone.
|
|
44
71
|
export type Namespace<
|
|
45
72
|
C extends TableProxyContract,
|
|
46
|
-
NsId extends keyof C['storage']['namespaces'],
|
|
73
|
+
NsId extends string & keyof C['storage']['namespaces'],
|
|
47
74
|
> = {
|
|
48
75
|
readonly [Name in keyof TablesInNamespace<C['storage']['namespaces'][NsId]> & string]: TableProxy<
|
|
49
76
|
C,
|
|
77
|
+
NsId,
|
|
50
78
|
Name
|
|
51
79
|
>;
|
|
52
80
|
};
|
|
53
81
|
|
|
54
82
|
export type Db<C extends TableProxyContract> = {
|
|
55
|
-
readonly [Ns in keyof C['storage']['namespaces']]: Namespace<C, Ns>;
|
|
83
|
+
readonly [Ns in keyof C['storage']['namespaces'] & string]: Namespace<C, Ns>;
|
|
56
84
|
};
|
package/src/types/table-proxy.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { Contract, ContractModelDefinitions } from '@prisma-next/contract/types';
|
|
2
1
|
import type {
|
|
3
2
|
ExtractCodecTypes,
|
|
4
3
|
ExtractFieldInputTypes,
|
|
5
|
-
ExtractFieldOutputTypes,
|
|
6
4
|
ExtractQueryOperationTypes,
|
|
7
5
|
StorageTable,
|
|
8
6
|
} from '@prisma-next/sql-contract/types';
|
|
7
|
+
import type { ComputeColumnJsType } from '@prisma-next/sql-relational-core/types';
|
|
9
8
|
import type { Expression, FieldProxy, Functions } from '../expression';
|
|
10
9
|
import type {
|
|
11
10
|
DefaultScope,
|
|
@@ -16,98 +15,111 @@ import type {
|
|
|
16
15
|
Scope,
|
|
17
16
|
StorageTableToScopeTable,
|
|
18
17
|
} from '../scope';
|
|
19
|
-
import type {
|
|
18
|
+
import type { NamespaceTable, TableProxyContract } from './db';
|
|
20
19
|
import type { DeleteQuery, InsertQuery, InsertValues, UpdateQuery } from './mutation-query';
|
|
21
20
|
import type { WithJoin, WithSelect } from './shared';
|
|
22
21
|
|
|
23
|
-
type FindModelForTable<
|
|
22
|
+
type FindModelForTable<
|
|
23
|
+
C extends TableProxyContract,
|
|
24
|
+
NsId extends string,
|
|
25
|
+
TableName extends string,
|
|
26
|
+
> = C['domain']['namespaces'][NsId]['models'] extends infer Models extends Record<string, unknown>
|
|
24
27
|
? {
|
|
25
|
-
[M in keyof
|
|
28
|
+
[M in keyof Models & string]: Models[M] extends {
|
|
26
29
|
readonly storage: { readonly table: TableName };
|
|
27
30
|
}
|
|
28
31
|
? M
|
|
29
32
|
: never;
|
|
30
|
-
}[keyof
|
|
33
|
+
}[keyof Models & string]
|
|
31
34
|
: never;
|
|
32
35
|
|
|
33
|
-
type FindFieldForColumn<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
36
|
+
type FindFieldForColumn<
|
|
37
|
+
C extends TableProxyContract,
|
|
38
|
+
NsId extends string,
|
|
39
|
+
ModelName extends string,
|
|
40
|
+
ColumnName extends string,
|
|
41
|
+
> = C['domain']['namespaces'][NsId]['models'] extends infer Models extends Record<string, unknown>
|
|
42
|
+
? ModelName extends keyof Models
|
|
43
|
+
? Models[ModelName] extends {
|
|
44
|
+
readonly storage: { readonly fields: infer Fields extends Record<string, unknown> };
|
|
45
|
+
}
|
|
46
|
+
? {
|
|
47
|
+
[F in keyof Fields & string]: Fields[F] extends { readonly column: ColumnName }
|
|
48
|
+
? F
|
|
49
|
+
: never;
|
|
50
|
+
}[keyof Fields & string]
|
|
51
|
+
: never
|
|
43
52
|
: never
|
|
44
53
|
: never;
|
|
45
54
|
|
|
55
|
+
// The select-result row's column types for a table at a namespace coordinate.
|
|
56
|
+
// Each column resolves through `ComputeColumnJsType` with the coordinate, so
|
|
57
|
+
// refined per-namespace output types (e.g. `Vector<N>`) are preserved and
|
|
58
|
+
// same-named tables across namespaces resolve to each namespace's own columns.
|
|
59
|
+
// `ComputeColumnJsType`'s constraint is the minimal `ColumnResolutionContract`,
|
|
60
|
+
// which `TableProxyContract` satisfies, so `C` is indexed directly — no
|
|
61
|
+
// `C extends Contract<SqlStorage>` guard.
|
|
46
62
|
type ResolvedColumnTypes<
|
|
47
|
-
C,
|
|
63
|
+
C extends TableProxyContract,
|
|
64
|
+
NsId extends string,
|
|
48
65
|
TableName extends string,
|
|
49
|
-
|
|
50
|
-
>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
ModelName,
|
|
61
|
-
ColName
|
|
62
|
-
> extends infer FieldName extends string
|
|
63
|
-
? FieldName extends keyof FieldTypes[ModelName]
|
|
64
|
-
? FieldTypes[ModelName][FieldName]
|
|
65
|
-
: unknown
|
|
66
|
-
: unknown;
|
|
67
|
-
}
|
|
68
|
-
: Record<string, never>
|
|
69
|
-
: Record<string, never>
|
|
70
|
-
: Record<string, never>
|
|
71
|
-
: Record<string, never>
|
|
66
|
+
> =
|
|
67
|
+
NamespaceTable<C, NsId, TableName> extends infer Table extends StorageTable
|
|
68
|
+
? {
|
|
69
|
+
[ColName in keyof Table['columns'] & string]: ComputeColumnJsType<
|
|
70
|
+
C,
|
|
71
|
+
NsId,
|
|
72
|
+
TableName,
|
|
73
|
+
ColName,
|
|
74
|
+
ExtractCodecTypes<C>
|
|
75
|
+
>;
|
|
76
|
+
}
|
|
72
77
|
: Record<string, never>;
|
|
73
78
|
|
|
74
79
|
type ResolvedInsertValues<
|
|
75
|
-
C,
|
|
80
|
+
C extends TableProxyContract,
|
|
81
|
+
NsId extends string,
|
|
76
82
|
Table extends StorageTable,
|
|
77
83
|
TableName extends string,
|
|
78
84
|
CT extends Record<string, { readonly input: unknown }>,
|
|
79
|
-
FieldInputs extends Record<string, Record<string, unknown
|
|
85
|
+
FieldInputs extends Record<string, Record<string, Record<string, unknown>>>,
|
|
80
86
|
> = string extends keyof FieldInputs
|
|
81
87
|
? InsertValues<Table, CT>
|
|
82
|
-
:
|
|
83
|
-
?
|
|
84
|
-
?
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
: NsId extends keyof FieldInputs
|
|
89
|
+
? FieldInputs[NsId] extends infer NsInputs extends Record<string, Record<string, unknown>>
|
|
90
|
+
? FindModelForTable<C, NsId, TableName> extends infer ModelName extends string
|
|
91
|
+
? ModelName extends keyof NsInputs
|
|
92
|
+
? {
|
|
93
|
+
[K in keyof Table['columns']]?: FindFieldForColumn<
|
|
94
|
+
C,
|
|
95
|
+
NsId,
|
|
96
|
+
ModelName,
|
|
97
|
+
K & string
|
|
98
|
+
> extends infer FieldName extends string
|
|
99
|
+
? FieldName extends keyof NsInputs[ModelName]
|
|
100
|
+
? Table['columns'][K]['nullable'] extends true
|
|
101
|
+
? NonNullable<NsInputs[ModelName][FieldName]> | null
|
|
102
|
+
: NonNullable<NsInputs[ModelName][FieldName]>
|
|
103
|
+
: Table['columns'][K]['codecId'] extends keyof CT
|
|
104
|
+
? CT[Table['columns'][K]['codecId']]['input']
|
|
105
|
+
: unknown
|
|
106
|
+
: Table['columns'][K]['codecId'] extends keyof CT
|
|
107
|
+
? CT[Table['columns'][K]['codecId']]['input']
|
|
108
|
+
: unknown;
|
|
109
|
+
}
|
|
110
|
+
: InsertValues<Table, CT>
|
|
111
|
+
: InsertValues<Table, CT>
|
|
101
112
|
: InsertValues<Table, CT>
|
|
102
113
|
: InsertValues<Table, CT>;
|
|
103
114
|
|
|
104
115
|
type ResolvedUpdateValues<
|
|
105
|
-
C,
|
|
116
|
+
C extends TableProxyContract,
|
|
117
|
+
NsId extends string,
|
|
106
118
|
Table extends StorageTable,
|
|
107
119
|
TableName extends string,
|
|
108
120
|
CT extends Record<string, { readonly input: unknown }>,
|
|
109
|
-
FieldInputs extends Record<string, Record<string, unknown
|
|
110
|
-
> = ResolvedInsertValues<C, Table, TableName, CT, FieldInputs>;
|
|
121
|
+
FieldInputs extends Record<string, Record<string, Record<string, unknown>>>,
|
|
122
|
+
> = ResolvedInsertValues<C, NsId, Table, TableName, CT, FieldInputs>;
|
|
111
123
|
|
|
112
124
|
type ResolvedUpdateExpressions<Table extends StorageTable> = {
|
|
113
125
|
[K in keyof Table['columns']]?: Expression<{
|
|
@@ -116,31 +128,37 @@ type ResolvedUpdateExpressions<Table extends StorageTable> = {
|
|
|
116
128
|
}>;
|
|
117
129
|
};
|
|
118
130
|
|
|
119
|
-
export type ContractToQC<
|
|
131
|
+
export type ContractToQC<
|
|
132
|
+
C extends TableProxyContract,
|
|
133
|
+
NsId extends string = string,
|
|
134
|
+
Name extends string = string,
|
|
135
|
+
> = {
|
|
120
136
|
readonly codecTypes: ExtractCodecTypes<C>;
|
|
121
137
|
readonly capabilities: C['capabilities'];
|
|
122
138
|
readonly queryOperationTypes: ExtractQueryOperationTypes<C>;
|
|
123
|
-
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C,
|
|
139
|
+
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C, NsId, Name>;
|
|
124
140
|
};
|
|
125
141
|
|
|
126
142
|
export interface TableProxy<
|
|
127
143
|
C extends TableProxyContract,
|
|
128
|
-
|
|
144
|
+
NsId extends string,
|
|
145
|
+
Name extends string,
|
|
129
146
|
Alias extends string = Name,
|
|
130
|
-
AvailableScope extends Scope = DefaultScope<Name,
|
|
131
|
-
QC extends QueryContext = ContractToQC<C, Name>,
|
|
132
|
-
> extends JoinSource<StorageTableToScopeTable<
|
|
147
|
+
AvailableScope extends Scope = DefaultScope<Name, NamespaceTable<C, NsId, Name>>,
|
|
148
|
+
QC extends QueryContext = ContractToQC<C, NsId, Name>,
|
|
149
|
+
> extends JoinSource<StorageTableToScopeTable<NamespaceTable<C, NsId, Name>>, Alias>,
|
|
133
150
|
WithSelect<QC, AvailableScope, EmptyRow>,
|
|
134
151
|
WithJoin<QC, AvailableScope, C['capabilities']> {
|
|
135
152
|
as<NewAlias extends string>(
|
|
136
153
|
newAlias: NewAlias,
|
|
137
|
-
): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC>;
|
|
154
|
+
): TableProxy<C, NsId, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>, QC>;
|
|
138
155
|
|
|
139
156
|
insert(
|
|
140
157
|
rows: ReadonlyArray<
|
|
141
158
|
ResolvedInsertValues<
|
|
142
159
|
C,
|
|
143
|
-
|
|
160
|
+
NsId,
|
|
161
|
+
NamespaceTable<C, NsId, Name>,
|
|
144
162
|
Name,
|
|
145
163
|
QC['codecTypes'],
|
|
146
164
|
ExtractFieldInputTypes<C>
|
|
@@ -151,7 +169,8 @@ export interface TableProxy<
|
|
|
151
169
|
update(
|
|
152
170
|
set: ResolvedUpdateValues<
|
|
153
171
|
C,
|
|
154
|
-
|
|
172
|
+
NsId,
|
|
173
|
+
NamespaceTable<C, NsId, Name>,
|
|
155
174
|
Name,
|
|
156
175
|
QC['codecTypes'],
|
|
157
176
|
ExtractFieldInputTypes<C>
|
|
@@ -162,7 +181,7 @@ export interface TableProxy<
|
|
|
162
181
|
callback: (
|
|
163
182
|
fields: FieldProxy<AvailableScope>,
|
|
164
183
|
fns: Functions<QC>,
|
|
165
|
-
) => ResolvedUpdateExpressions<
|
|
184
|
+
) => ResolvedUpdateExpressions<NamespaceTable<C, NsId, Name>>,
|
|
166
185
|
): UpdateQuery<QC, AvailableScope, EmptyRow>;
|
|
167
186
|
|
|
168
187
|
delete(): DeleteQuery<QC, AvailableScope, EmptyRow>;
|