@prisma-next/sql-lane 0.1.0-pr.43.2 → 0.1.0-pr.43.4
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.
|
@@ -365,7 +365,7 @@ function collectColumnRefs(expr) {
|
|
|
365
365
|
return [];
|
|
366
366
|
}
|
|
367
367
|
function isOperationExpr(expr) {
|
|
368
|
-
return expr.kind === "operation";
|
|
368
|
+
return expr != null && expr.kind === "operation";
|
|
369
369
|
}
|
|
370
370
|
function isExpressionBuilder(value) {
|
|
371
371
|
return typeof value === "object" && value !== null && "kind" in value && value.kind === "expression";
|
|
@@ -510,8 +510,9 @@ function buildMeta(args) {
|
|
|
510
510
|
const orderBy = args.orderBy;
|
|
511
511
|
const orderByExpr = orderBy.expr;
|
|
512
512
|
if (orderByExpr) {
|
|
513
|
-
|
|
514
|
-
|
|
513
|
+
const extractedExpr = extractExpression(orderByExpr);
|
|
514
|
+
if (isOperationExpr(extractedExpr)) {
|
|
515
|
+
const allRefs = collectColumnRefs(extractedExpr);
|
|
515
516
|
for (const ref of allRefs) {
|
|
516
517
|
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
517
518
|
table: ref.table,
|
|
@@ -519,13 +520,10 @@ function buildMeta(args) {
|
|
|
519
520
|
});
|
|
520
521
|
}
|
|
521
522
|
} else {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
column: colBuilder.column
|
|
527
|
-
});
|
|
528
|
-
}
|
|
523
|
+
refsColumns.set(`${extractedExpr.table}.${extractedExpr.column}`, {
|
|
524
|
+
table: extractedExpr.table,
|
|
525
|
+
column: extractedExpr.column
|
|
526
|
+
});
|
|
529
527
|
}
|
|
530
528
|
}
|
|
531
529
|
}
|
|
@@ -1588,4 +1586,4 @@ export {
|
|
|
1588
1586
|
createJoinOnBuilder2 as createJoinOnBuilder,
|
|
1589
1587
|
sql
|
|
1590
1588
|
};
|
|
1591
|
-
//# sourceMappingURL=chunk-
|
|
1589
|
+
//# sourceMappingURL=chunk-JE6UTALD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/guards.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst POSTGRES_TARGET = 'postgres';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n if (contract.target !== POSTGRES_TARGET) {\n throw planInvalid('Raw lane currently supports only postgres target', {\n expectedTarget: POSTGRES_TARGET,\n actualTarget: contract.target,\n });\n }\n\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: POSTGRES_TARGET,\n ...(contract.targetFamily ? { targetFamily: contract.targetFamily } : {}),\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { errorMissingColumnForAlias } from '../utils/errors';\nimport {\n collectColumnRefs,\n extractExpression,\n getColumnInfo,\n isColumnBuilder,\n isExpressionBuilder,\n isOperationExpr,\n} from '../utils/guards';\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n const allRefs = collectColumnRefs(expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // expr is ColumnRef\n refsColumns.set(`${expr.table}.${expr.column}`, {\n table: expr.table,\n column: expr.column,\n });\n }\n }\n\n if (args.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n // TypeScript can't narrow ColumnBuilder properly\n const onLeft = join.on.left as unknown as { table: string; column: string };\n const onRight = join.on.right as unknown as { table: string; column: string };\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n // Handle right side of child WHERE clause\n const childWhereRight = include.childWhere.right;\n if (isColumnBuilder(childWhereRight)) {\n const rightColInfo = getColumnInfo(childWhereRight);\n refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {\n table: rightColInfo.table,\n column: rightColInfo.column,\n });\n }\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | AnyExpressionBuilder;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const expr = extractExpression(whereLeft as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n const allRefs = collectColumnRefs(expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // expr is ColumnRef\n refsColumns.set(`${expr.table}.${expr.column}`, {\n table: expr.table,\n column: expr.column,\n });\n }\n\n // Handle right side of WHERE clause - can be ParamPlaceholder or AnyColumnBuilder\n const whereRight = args.where.right;\n if (isColumnBuilder(whereRight)) {\n const colInfo = getColumnInfo(whereRight);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | AnyExpressionBuilder;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n const extractedExpr = extractExpression(orderByExpr);\n if (isOperationExpr(extractedExpr)) {\n const allRefs = collectColumnRefs(extractedExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // extractedExpr is ColumnRef\n refsColumns.set(`${extractedExpr.table}.${extractedExpr.column}`, {\n table: extractedExpr.table,\n column: extractedExpr.column,\n });\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n errorMissingColumnForAlias(alias, index);\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n return [alias, `operation:${expr.method}`];\n }\n // expr is ColumnRef\n return [alias, `${expr.table}.${expr.column}`];\n }),\n );\n\n // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n if (expr.returns.kind === 'typeId') {\n projectionTypes[alias] = expr.returns.type;\n } else if (expr.returns.kind === 'builtin') {\n projectionTypes[alias] = expr.returns.type;\n }\n } else {\n // expr is ColumnRef - get codecId from columnMeta\n if (isExpressionBuilder(column)) {\n const codecId = column.columnMeta.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n } else {\n // column is ColumnBuilder\n const col = column as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n if (expr.returns.kind === 'typeId') {\n projectionCodecs[alias] = expr.returns.type;\n }\n } else {\n // expr is ColumnRef - get codecId from columnMeta\n if (isExpressionBuilder(column)) {\n const codecId = column.columnMeta.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n } else {\n // column is ColumnBuilder\n const col = column as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n }\n\n // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import type {\n ColumnRef,\n LiteralExpr,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { isParamPlaceholder } from '@prisma-next/sql-relational-core/utils/guards';\n\n/**\n * Recursively extracts the base ColumnRef from an OperationExpr.\n * If the expression is already a ColumnRef, it is returned directly.\n */\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\n/**\n * Recursively collects all ColumnRef nodes from an expression tree.\n * Handles nested OperationExpr structures by traversing both self and args.\n */\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\n/**\n * Type predicate to check if an expression is an OperationExpr.\n */\nexport function isOperationExpr(\n expr: ColumnRef | OperationExpr | null | undefined,\n): expr is OperationExpr {\n return expr != null && expr.kind === 'operation';\n}\n\n/**\n * Type predicate to check if a value is an ExpressionBuilder.\n */\nexport function isExpressionBuilder(value: unknown): value is AnyExpressionBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'expression'\n );\n}\n\n/**\n * Helper to extract table and column from a ColumnBuilder or ExpressionBuilder.\n * For ExpressionBuilder wrapping an OperationExpr, recursively unwraps to find the base ColumnRef.\n */\nexport function getColumnInfo(expr: AnyColumnBuilder | AnyExpressionBuilder): {\n table: string;\n column: string;\n} {\n if (isExpressionBuilder(expr)) {\n const baseCol = extractBaseColumnRef(expr.expr);\n return { table: baseCol.table, column: baseCol.column };\n }\n // expr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\n/**\n * Type predicate to check if a value is a ColumnBuilder.\n */\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\n/**\n * Extracts the expression from a ColumnBuilder or ExpressionBuilder.\n * Returns the underlying ColumnRef or OperationExpr.\n */\nexport function extractExpression(\n builder: AnyColumnBuilder | AnyExpressionBuilder,\n): ColumnRef | OperationExpr {\n if (isExpressionBuilder(builder)) {\n return builder.expr;\n }\n // It's a ColumnBuilder - convert to ColumnRef\n const colBuilder = builder as { table: string; column: string };\n return {\n kind: 'col',\n table: colBuilder.table,\n column: colBuilder.column,\n };\n}\n\nexport { isParamPlaceholder };\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n} from '../utils/errors';\nimport {\n extractExpression,\n getColumnInfo,\n isColumnBuilder,\n isParamPlaceholder,\n} from '../utils/guards';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId: string | undefined;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n // Extract expression from ColumnBuilder or ExpressionBuilder\n leftExpr = extractExpression(where.left);\n\n // If it's a ColumnRef, get codecId from contract\n if (leftExpr.kind === 'col') {\n const contractTable = contract.storage.tables[leftExpr.table];\n if (!contractTable) {\n errorUnknownTable(leftExpr.table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[leftExpr.column];\n if (!columnMeta) {\n errorUnknownColumn(leftExpr.column, leftExpr.table);\n }\n\n codecId = columnMeta.codecId;\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyColumnBuilder\n if (isParamPlaceholder(where.right)) {\n // Handle param placeholder (existing logic)\n const placeholder: ParamPlaceholder = where.right;\n paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n // Construct descriptor directly from validated StorageColumn\n if (leftExpr.kind === 'col') {\n const contractTable = contract.storage.tables[leftExpr.table];\n const columnMeta = contractTable?.columns[leftExpr.column];\n if (columnMeta) {\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: leftExpr.table, column: leftExpr.column },\n nullable: columnMeta.nullable,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n });\n }\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyExpressionBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport { extractExpression, isOperationExpr } from '../utils/guards';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n // Extract the underlying expression from ExpressionBuilder\n const extractedExpr = extractExpression(orderExpr);\n const expr: ColumnRef | OperationExpr = isOperationExpr(extractedExpr)\n ? extractedExpr\n : extractedExpr; // extractedExpr is ColumnRef\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n\n // Check if this alias matches an include alias\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Extract expression from ColumnBuilder or ExpressionBuilder\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n projectEntries.push({\n alias,\n expr,\n });\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport { extractBaseColumnRef, extractExpression, isOperationExpr } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n // Extract the underlying expression from ExpressionBuilder\n const extractedExpr = extractExpression(orderExpr);\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(extractedExpr)) {\n const baseCol = extractBaseColumnRef(extractedExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // extractedExpr is ColumnRef\n return extractedExpr;\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n return {\n alias,\n expr: createColumnRef(col.table, col.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport { isColumnBuilder, isExpressionBuilder } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: Array<AnyColumnBuilder | AnyExpressionBuilder> } {\n const aliases: string[] = [];\n const columns: Array<AnyColumnBuilder | AnyExpressionBuilder> = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<IncludeState>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: Array<AnyColumnBuilder | AnyExpressionBuilder> = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use a placeholder column\n // The actual handling happens in AST building where we create includeRef\n aliases.push(key);\n // Use a placeholder column - this won't be used for includes, but we need\n // to maintain the same array length for aliases and columns\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { nativeType: 'jsonb', codecId: 'core/json@1', nullable: true },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":"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","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","planInvalid","createParamRef","createColumnRef","createOrderByItem","createTableRef","createColumnRef","createTableRef","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","createOrderByItem","createTableRef"]}
|
package/dist/exports/sql.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-lane",
|
|
3
|
-
"version": "0.1.0-pr.43.
|
|
3
|
+
"version": "0.1.0-pr.43.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "Relational DSL and raw SQL helpers for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@prisma-next/contract": "0.1.0-pr.43.
|
|
9
|
-
"@prisma-next/
|
|
10
|
-
"@prisma-next/
|
|
11
|
-
"@prisma-next/sql-relational-core": "0.1.0-pr.43.
|
|
8
|
+
"@prisma-next/contract": "0.1.0-pr.43.4",
|
|
9
|
+
"@prisma-next/sql-contract": "0.1.0-pr.43.4",
|
|
10
|
+
"@prisma-next/plan": "0.1.0-pr.43.4",
|
|
11
|
+
"@prisma-next/sql-relational-core": "0.1.0-pr.43.4"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@types/pg": "^8.11.10",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"typescript": "^5.9.3",
|
|
18
18
|
"vite-tsconfig-paths": "^5.1.4",
|
|
19
19
|
"vitest": "^2.1.1",
|
|
20
|
-
"@prisma-next/sql-contract-ts": "0.1.0-pr.43.
|
|
21
|
-
"@prisma-next/
|
|
22
|
-
"@prisma-next/
|
|
20
|
+
"@prisma-next/sql-contract-ts": "0.1.0-pr.43.4",
|
|
21
|
+
"@prisma-next/test-utils": "0.0.1",
|
|
22
|
+
"@prisma-next/sql-runtime": "0.1.0-pr.43.4"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/guards.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst POSTGRES_TARGET = 'postgres';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n if (contract.target !== POSTGRES_TARGET) {\n throw planInvalid('Raw lane currently supports only postgres target', {\n expectedTarget: POSTGRES_TARGET,\n actualTarget: contract.target,\n });\n }\n\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: POSTGRES_TARGET,\n ...(contract.targetFamily ? { targetFamily: contract.targetFamily } : {}),\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { errorMissingColumnForAlias } from '../utils/errors';\nimport {\n collectColumnRefs,\n extractExpression,\n getColumnInfo,\n isColumnBuilder,\n isExpressionBuilder,\n isOperationExpr,\n} from '../utils/guards';\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n const allRefs = collectColumnRefs(expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // expr is ColumnRef\n refsColumns.set(`${expr.table}.${expr.column}`, {\n table: expr.table,\n column: expr.column,\n });\n }\n }\n\n if (args.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n // TypeScript can't narrow ColumnBuilder properly\n const onLeft = join.on.left as unknown as { table: string; column: string };\n const onRight = join.on.right as unknown as { table: string; column: string };\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n // Handle right side of child WHERE clause\n const childWhereRight = include.childWhere.right;\n if (isColumnBuilder(childWhereRight)) {\n const rightColInfo = getColumnInfo(childWhereRight);\n refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {\n table: rightColInfo.table,\n column: rightColInfo.column,\n });\n }\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const expr = extractExpression(whereLeft as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n const allRefs = collectColumnRefs(expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // expr is ColumnRef\n refsColumns.set(`${expr.table}.${expr.column}`, {\n table: expr.table,\n column: expr.column,\n });\n }\n\n // Handle right side of WHERE clause - can be ParamPlaceholder or AnyColumnBuilder\n const whereRight = args.where.right;\n if (isColumnBuilder(whereRight)) {\n const colInfo = getColumnInfo(whereRight);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // orderByExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n errorMissingColumnForAlias(alias, index);\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n return [alias, `operation:${expr.method}`];\n }\n // expr is ColumnRef\n return [alias, `${expr.table}.${expr.column}`];\n }),\n );\n\n // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n if (expr.returns.kind === 'typeId') {\n projectionTypes[alias] = expr.returns.type;\n } else if (expr.returns.kind === 'builtin') {\n projectionTypes[alias] = expr.returns.type;\n }\n } else {\n // expr is ColumnRef - get codecId from columnMeta\n if (isExpressionBuilder(column)) {\n const codecId = column.columnMeta.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n } else {\n // column is ColumnBuilder\n const col = column as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n if (isOperationExpr(expr)) {\n if (expr.returns.kind === 'typeId') {\n projectionCodecs[alias] = expr.returns.type;\n }\n } else {\n // expr is ColumnRef - get codecId from columnMeta\n if (isExpressionBuilder(column)) {\n const codecId = column.columnMeta.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n } else {\n // column is ColumnBuilder\n const col = column as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n }\n\n // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import type {\n ColumnRef,\n LiteralExpr,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { isParamPlaceholder } from '@prisma-next/sql-relational-core/utils/guards';\n\n/**\n * Recursively extracts the base ColumnRef from an OperationExpr.\n * If the expression is already a ColumnRef, it is returned directly.\n */\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\n/**\n * Recursively collects all ColumnRef nodes from an expression tree.\n * Handles nested OperationExpr structures by traversing both self and args.\n */\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\n/**\n * Type predicate to check if an expression is an OperationExpr.\n */\nexport function isOperationExpr(expr: ColumnRef | OperationExpr): expr is OperationExpr {\n return expr.kind === 'operation';\n}\n\n/**\n * Type predicate to check if a value is an ExpressionBuilder.\n */\nexport function isExpressionBuilder(value: unknown): value is AnyExpressionBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'expression'\n );\n}\n\n/**\n * Helper to extract table and column from a ColumnBuilder or ExpressionBuilder.\n * For ExpressionBuilder wrapping an OperationExpr, recursively unwraps to find the base ColumnRef.\n */\nexport function getColumnInfo(expr: AnyColumnBuilder | AnyExpressionBuilder): {\n table: string;\n column: string;\n} {\n if (isExpressionBuilder(expr)) {\n const baseCol = extractBaseColumnRef(expr.expr);\n return { table: baseCol.table, column: baseCol.column };\n }\n // expr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\n/**\n * Type predicate to check if a value is a ColumnBuilder.\n */\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\n/**\n * Extracts the expression from a ColumnBuilder or ExpressionBuilder.\n * Returns the underlying ColumnRef or OperationExpr.\n */\nexport function extractExpression(\n builder: AnyColumnBuilder | AnyExpressionBuilder,\n): ColumnRef | OperationExpr {\n if (isExpressionBuilder(builder)) {\n return builder.expr;\n }\n // It's a ColumnBuilder - convert to ColumnRef\n const colBuilder = builder as { table: string; column: string };\n return {\n kind: 'col',\n table: colBuilder.table,\n column: colBuilder.column,\n };\n}\n\nexport { isParamPlaceholder };\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n} from '../utils/errors';\nimport {\n extractExpression,\n getColumnInfo,\n isColumnBuilder,\n isParamPlaceholder,\n} from '../utils/guards';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId: string | undefined;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n // Extract expression from ColumnBuilder or ExpressionBuilder\n leftExpr = extractExpression(where.left);\n\n // If it's a ColumnRef, get codecId from contract\n if (leftExpr.kind === 'col') {\n const contractTable = contract.storage.tables[leftExpr.table];\n if (!contractTable) {\n errorUnknownTable(leftExpr.table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[leftExpr.column];\n if (!columnMeta) {\n errorUnknownColumn(leftExpr.column, leftExpr.table);\n }\n\n codecId = columnMeta.codecId;\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyColumnBuilder\n if (isParamPlaceholder(where.right)) {\n // Handle param placeholder (existing logic)\n const placeholder: ParamPlaceholder = where.right;\n paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n // Construct descriptor directly from validated StorageColumn\n if (leftExpr.kind === 'col') {\n const contractTable = contract.storage.tables[leftExpr.table];\n const columnMeta = contractTable?.columns[leftExpr.column];\n if (columnMeta) {\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: leftExpr.table, column: leftExpr.column },\n nullable: columnMeta.nullable,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n });\n }\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyExpressionBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport { extractExpression, isOperationExpr } from '../utils/guards';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n // Extract the underlying expression from ExpressionBuilder\n const extractedExpr = extractExpression(orderExpr);\n const expr: ColumnRef | OperationExpr = isOperationExpr(extractedExpr)\n ? extractedExpr\n : extractedExpr; // extractedExpr is ColumnRef\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n\n // Check if this alias matches an include alias\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Extract expression from ColumnBuilder or ExpressionBuilder\n const expr = extractExpression(column as AnyColumnBuilder | AnyExpressionBuilder);\n projectEntries.push({\n alias,\n expr,\n });\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport { extractBaseColumnRef, extractExpression, isOperationExpr } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n // Extract the underlying expression from ExpressionBuilder\n const extractedExpr = extractExpression(orderExpr);\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(extractedExpr)) {\n const baseCol = extractBaseColumnRef(extractedExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // extractedExpr is ColumnRef\n return extractedExpr;\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n return {\n alias,\n expr: createColumnRef(col.table, col.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyExpressionBuilder,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport { isColumnBuilder, isExpressionBuilder } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: Array<AnyColumnBuilder | AnyExpressionBuilder> } {\n const aliases: string[] = [];\n const columns: Array<AnyColumnBuilder | AnyExpressionBuilder> = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<IncludeState>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: Array<AnyColumnBuilder | AnyExpressionBuilder> = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use a placeholder column\n // The actual handling happens in AST building where we create includeRef\n aliases.push(key);\n // Use a placeholder column - this won't be used for includes, but we need\n // to maintain the same array length for aliases and columns\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { nativeType: 'jsonb', codecId: 'core/json@1', nullable: true },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":"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","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","planInvalid","createParamRef","createColumnRef","createOrderByItem","createTableRef","createColumnRef","createTableRef","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","createOrderByItem","createTableRef"]}
|