{"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      ...(col.many ? { many: true as const } : {}),\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({\n    op,\n    namespace: namespaceId,\n    table: tableName,\n    values,\n  })) {\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({\n    op,\n    namespace: namespaceId,\n    table: tableName,\n    values: exprs,\n  })) {\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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"}