@prisma-next/sql-orm-client 0.10.0-dev.15 → 0.10.0-dev.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -20
- package/src/query-plan-mutations.ts +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["unboundTable","candidate","#clone","#cloneWithRow","#createCollection","#assertIncludeRefinementMode","#withAnnotationsFromMeta","#dispatch","#collectAnnotationsFromMeta","#reloadMutationRowByPrimaryKey","#createAllWithAnnotations","#resolveMtiCreateContext","#executeMtiCreate","#mapCreateRows","#assertNotMtiVariant","#buildUpsertConflictCriterion","#reloadMutationRowByCriterion","#withRuntime","#findFirstMatchingRowIdentityWhere","#updateAllWithAnnotations","#executeDeleteReturning","#deleteAllWithAnnotations","#createSelf"],"sources":["../src/collection-contract.ts","../src/aggregate-builder.ts","../src/collection-aggregate-result.ts","../src/collection-column-mapping.ts","../src/collection-runtime.ts","../src/execute-query-plan.ts","../src/include-strategy.ts","../src/include-tree-predicates.ts","../src/query-plan-meta.ts","../src/where-utils.ts","../src/query-plan-aggregate.ts","../src/query-plan-mutations.ts","../src/where-binding.ts","../src/query-plan-select.ts","../src/collection-dispatch.ts","../src/collection-mutation-dispatch.ts","../src/filters.ts","../src/grouped-collection.ts","../src/include-descriptors.ts","../src/types.ts","../src/model-accessor.ts","../src/relation-mutator.ts","../src/mutation-executor.ts","../src/where-interop.ts","../src/collection.ts","../src/orm.ts"],"sourcesContent":["import type { Contract, ContractFieldType } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { RelationCardinalityTag } from './types';\n\ntype ModelStorageFields = Record<string, { column?: string }>;\ntype ModelEntry = {\n storage?: { table?: string; fields?: ModelStorageFields };\n relations?: Record<string, unknown>;\n fields?: Record<string, { type?: ContractFieldType }>;\n discriminator?: { field: string };\n variants?: Record<string, { value: string }>;\n base?: string;\n};\ntype ModelsMap = Record<string, ModelEntry>;\n\nexport interface PolymorphismVariantInfo {\n readonly modelName: string;\n readonly value: string;\n readonly table: string;\n readonly strategy: 'sti' | 'mti';\n}\n\nexport interface PolymorphismInfo {\n readonly discriminatorField: string;\n readonly discriminatorColumn: string;\n readonly baseTable: string;\n readonly variants: ReadonlyMap<string, PolymorphismVariantInfo>;\n readonly variantsByValue: ReadonlyMap<string, PolymorphismVariantInfo>;\n readonly mtiVariants: readonly PolymorphismVariantInfo[];\n}\n\nfunction unboundTable(contract: Contract<SqlStorage>, tableName: string): StorageTable | undefined {\n return contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n}\n\nfunction modelsOf(contract: Contract<SqlStorage>): ModelsMap {\n return contract.models as ModelsMap;\n}\n\nexport function modelOf(contract: Contract<SqlStorage>, name: string): ModelEntry | undefined {\n return modelsOf(contract)[name];\n}\n\nconst fieldToColumnCache = new WeakMap<object, Map<string, Record<string, string>>>();\nconst columnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\nconst polymorphismCache = new WeakMap<object, Map<string, PolymorphismInfo | undefined>>();\n\nexport function resolvePolymorphismInfo(\n contract: Contract<SqlStorage>,\n modelName: string,\n): PolymorphismInfo | undefined {\n let perContract = polymorphismCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n polymorphismCache.set(contract, perContract);\n }\n if (perContract.has(modelName)) return perContract.get(modelName);\n\n const models = modelsOf(contract);\n const model = models[modelName];\n if (!model?.discriminator || !model.variants) {\n perContract.set(modelName, undefined);\n return undefined;\n }\n\n const baseTable = model.storage?.table;\n if (!baseTable) {\n perContract.set(modelName, undefined);\n return undefined;\n }\n\n const discriminatorField = model.discriminator.field;\n const discriminatorColumn = resolveFieldToColumn(contract, modelName, discriminatorField);\n\n const variants = new Map<string, PolymorphismVariantInfo>();\n const variantsByValue = new Map<string, PolymorphismVariantInfo>();\n const mtiVariants: PolymorphismVariantInfo[] = [];\n\n for (const [variantModelName, variantEntry] of Object.entries(model.variants)) {\n const variantModel = models[variantModelName];\n if (!variantModel) {\n throw new Error(\n `Model \"${modelName}\" declares variant \"${variantModelName}\", but that model is missing from the contract`,\n );\n }\n const variantTable = variantModel.storage?.table ?? baseTable;\n const strategy = variantTable === baseTable ? 'sti' : 'mti';\n\n const info: PolymorphismVariantInfo = {\n modelName: variantModelName,\n value: variantEntry.value,\n table: variantTable,\n strategy,\n };\n\n variants.set(variantModelName, info);\n variantsByValue.set(variantEntry.value, info);\n if (strategy === 'mti') {\n mtiVariants.push(info);\n }\n }\n\n const result: PolymorphismInfo = {\n discriminatorField,\n discriminatorColumn,\n baseTable,\n variants,\n variantsByValue,\n mtiVariants,\n };\n\n perContract.set(modelName, result);\n return result;\n}\n\nexport function resolveFieldToColumn(\n contract: Contract<SqlStorage>,\n modelName: string,\n fieldName: string,\n): string {\n return getFieldToColumnMap(contract, modelName)[fieldName] ?? fieldName;\n}\n\nexport function getFieldToColumnMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = fieldToColumnCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n fieldToColumnCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n if (s?.column) cached[f] = s.column;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\nexport function getColumnToFieldMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = columnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n columnToFieldCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n if (s?.column) cached[s.column] = f;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\nconst completeColumnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\n\n/**\n * Like getColumnToFieldMap but includes identity-mapped fields (where field name equals column\n * name). getColumnToFieldMap only returns explicit remaps; this returns ALL column→field entries.\n */\nexport function getCompleteColumnToFieldMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = completeColumnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n completeColumnToFieldCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n cached[s?.column ?? f] = f;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\ninterface ResolvedRelation {\n readonly to: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly on: {\n readonly localFields: readonly string[];\n readonly targetFields: readonly string[];\n };\n}\n\nexport interface ResolvedIncludeRelation {\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly targetColumn: string;\n readonly localColumn: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n}\n\nexport function resolveIncludeRelation(\n contract: Contract<SqlStorage>,\n modelName: string,\n relationName: string,\n): ResolvedIncludeRelation {\n const relations = resolveModelRelations(contract, modelName);\n const relation = relations[relationName];\n if (!relation) {\n throw new Error(`Relation '${relationName}' not found on model '${modelName}'`);\n }\n const localField = relation.on.localFields[0];\n const targetField = relation.on.targetFields[0];\n if (!localField || !targetField) {\n throw new Error(\n `Relation '${relationName}' on model '${modelName}' has incomplete join metadata (missing localFields or targetFields)`,\n );\n }\n\n const relatedTableName = resolveModelTableName(contract, relation.to);\n const localColumn = resolveFieldToColumn(contract, modelName, localField);\n const targetColumn = resolveFieldToColumn(contract, relation.to, targetField);\n\n return {\n relatedModelName: relation.to,\n relatedTableName,\n targetColumn,\n localColumn,\n cardinality: relation.cardinality,\n };\n}\n\nconst modelRelationsCache = new WeakMap<object, Map<string, Record<string, ResolvedRelation>>>();\n\nexport function resolveModelRelations(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, ResolvedRelation> {\n let perContract = modelRelationsCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n modelRelationsCache.set(contract, perContract);\n }\n const cached = perContract.get(modelName);\n if (cached) return cached;\n\n const models = modelsOf(contract);\n const relationMap = models[modelName]?.relations ?? {};\n const resolved: Record<string, ResolvedRelation> = {};\n\n for (const [name, value] of Object.entries(relationMap)) {\n if (!value || typeof value !== 'object') continue;\n\n const rel = value as {\n to?: unknown;\n cardinality?: unknown;\n on?: { localFields?: unknown; targetFields?: unknown };\n };\n const localFields = rel.on?.localFields;\n const targetFields = rel.on?.targetFields;\n\n if (typeof rel.to !== 'string' || !Array.isArray(localFields) || !Array.isArray(targetFields)) {\n continue;\n }\n\n resolved[name] = {\n to: rel.to,\n cardinality: parseRelationCardinality(rel.cardinality),\n on: {\n localFields: localFields as readonly string[],\n targetFields: targetFields as readonly string[],\n },\n };\n }\n\n perContract.set(modelName, resolved);\n return resolved;\n}\n\nexport function parseRelationCardinality(value: unknown): RelationCardinalityTag | undefined {\n if (value === '1:1' || value === 'N:1' || value === '1:N' || value === 'M:N') {\n return value;\n }\n return undefined;\n}\n\nexport function resolveUpsertConflictColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n conflictOn: Record<string, unknown> | undefined,\n): string[] {\n if (conflictOn && typeof conflictOn === 'object') {\n const columns = Object.keys(conflictOn).map((fieldName) =>\n resolveFieldToColumn(contract, modelName, fieldName),\n );\n if (columns.length > 0) {\n return columns;\n }\n }\n\n const tableName = resolveModelTableName(contract, modelName);\n const primaryKeyColumns = unboundTable(contract, tableName)?.primaryKey?.columns ?? [];\n return [...primaryKeyColumns];\n}\n\nexport function resolveModelTableName(contract: Contract<SqlStorage>, modelName: string): string {\n const model = modelsOf(contract)[modelName];\n if (!model) {\n throw new Error(`Model \"${modelName}\" not found in contract`);\n }\n if (model.storage && typeof model.storage.table === 'string') {\n return model.storage.table;\n }\n throw new Error(`Model \"${modelName}\" has invalid or missing storage.table in the contract`);\n}\n\nexport function resolvePrimaryKeyColumn(contract: Contract<SqlStorage>, tableName: string): string {\n return unboundTable(contract, tableName)?.primaryKey?.columns[0] ?? 'id';\n}\n\nexport function resolveRowIdentityColumns(\n contract: Contract<SqlStorage>,\n tableName: string,\n): readonly string[] {\n const table = unboundTable(contract, tableName);\n if (!table) {\n return [];\n }\n if (table.primaryKey && table.primaryKey.columns.length > 0) {\n return table.primaryKey.columns;\n }\n for (const unique of table.uniques) {\n if (unique.columns.length > 0) {\n return unique.columns;\n }\n }\n return [];\n}\n\nexport function assertReturningCapability(contract: Contract<SqlStorage>, action: string): void {\n if (hasContractCapability(contract, 'returning')) {\n return;\n }\n\n throw new Error(`${action} requires contract capability \"returning\"`);\n}\n\nexport function hasContractCapability(contract: Contract<SqlStorage>, capability: string): boolean {\n const capabilities = contract.capabilities;\n const value = capabilities[capability];\n\n if (capabilityEnabled(value)) {\n return true;\n }\n\n return Object.values(capabilities).some((targetCapabilities) => {\n if (typeof targetCapabilities !== 'object' || targetCapabilities === null) {\n return false;\n }\n return capabilityEnabled(targetCapabilities[capability]);\n });\n}\n\nfunction capabilityEnabled(value: unknown): boolean {\n if (value === true) {\n return true;\n }\n\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return Object.values(value as Record<string, unknown>).some((flag) => flag === true);\n}\n\nexport function isToOneCardinality(cardinality: RelationCardinalityTag | undefined): boolean {\n return cardinality === '1:1' || cardinality === 'N:1';\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { getFieldToColumnMap } from './collection-contract';\nimport type { AggregateBuilder, AggregateSelector, NumericFieldNames } from './types';\n\nexport function createAggregateBuilder<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(contract: TContract, modelName: ModelName): AggregateBuilder<TContract, ModelName> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n\n return {\n count() {\n return {\n kind: 'aggregate',\n fn: 'count',\n };\n },\n sum(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'sum');\n },\n avg(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'avg');\n },\n min(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'min');\n },\n max(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'max');\n },\n };\n}\n\nexport function isAggregateSelector(value: unknown): value is AggregateSelector<unknown> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const candidate = value as { kind?: unknown; fn?: unknown };\n if (candidate.kind !== 'aggregate') {\n return false;\n }\n\n return (\n candidate.fn === 'count' ||\n candidate.fn === 'sum' ||\n candidate.fn === 'avg' ||\n candidate.fn === 'min' ||\n candidate.fn === 'max'\n );\n}\n\nfunction createFieldAggregateSelector<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(\n fieldToColumn: Record<string, string>,\n field: NumericFieldNames<TContract, ModelName>,\n fn: 'sum' | 'avg' | 'min' | 'max',\n): AggregateSelector<number | null> {\n const fieldName = field as string;\n return {\n kind: 'aggregate',\n fn,\n column: fieldToColumn[fieldName] ?? fieldName,\n };\n}\n","import type { AggregateResult, AggregateSelector } from './types';\n\nexport function normalizeAggregateResult<Spec extends Record<string, AggregateSelector<unknown>>>(\n aggregateSpec: Spec,\n row: Record<string, unknown>,\n): AggregateResult<Spec> {\n const result: Record<string, unknown> = {};\n\n for (const [alias, selector] of Object.entries(aggregateSpec)) {\n const value = row[alias];\n if (value === null) {\n result[alias] = null;\n continue;\n }\n\n if (value === undefined) {\n result[alias] = selector.fn === 'count' ? 0 : null;\n continue;\n }\n\n if (typeof value === 'number') {\n result[alias] = value;\n continue;\n }\n\n if (typeof value === 'bigint') {\n result[alias] = Number(value);\n continue;\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n result[alias] = Number.isNaN(numeric) ? value : numeric;\n continue;\n }\n\n result[alias] = value;\n }\n\n return result as AggregateResult<Spec>;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { getFieldToColumnMap } from './collection-contract';\n\nexport function mapFieldsToColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n fieldNames: readonly string[],\n): string[] {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n return fieldNames.map((fieldName) => fieldToColumn[fieldName] ?? fieldName);\n}\n\nexport function mapCursorValuesToColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n cursorValues: Readonly<Record<string, unknown>>,\n): Record<string, unknown> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const mappedCursor: Record<string, unknown> = {};\n\n for (const [fieldName, value] of Object.entries(cursorValues)) {\n if (value === undefined) {\n continue;\n }\n\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n mappedCursor[columnName] = value;\n }\n\n return mappedCursor;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnToFieldMap,\n getCompleteColumnToFieldMap,\n getFieldToColumnMap,\n type PolymorphismInfo,\n} from './collection-contract';\nimport type { CollectionContext, RuntimeConnection } from './types';\n\nexport interface RowEnvelope {\n readonly raw: Record<string, unknown>;\n readonly mapped: Record<string, unknown>;\n}\n\nexport function augmentSelectionForJoinColumns(\n selectedFields: readonly string[] | undefined,\n requiredColumns: readonly string[],\n): {\n selectedForQuery: readonly string[] | undefined;\n hiddenColumns: readonly string[];\n} {\n if (!selectedFields) {\n return {\n selectedForQuery: selectedFields,\n hiddenColumns: [],\n };\n }\n\n const hiddenColumns = requiredColumns.filter((column) => !selectedFields.includes(column));\n if (hiddenColumns.length === 0) {\n return {\n selectedForQuery: selectedFields,\n hiddenColumns: [],\n };\n }\n\n return {\n selectedForQuery: [...selectedFields, ...hiddenColumns],\n hiddenColumns,\n };\n}\n\nexport function stripHiddenMappedFields(\n contract: Contract<SqlStorage>,\n modelName: string,\n mapped: Record<string, unknown>,\n hiddenColumns: readonly string[],\n): void {\n if (hiddenColumns.length === 0) {\n return;\n }\n\n const columnToField = getColumnToFieldMap(contract, modelName);\n for (const hiddenColumn of hiddenColumns) {\n const fieldName = columnToField[hiddenColumn] ?? hiddenColumn;\n delete mapped[fieldName];\n }\n}\n\nexport function createRowEnvelope(\n contract: Contract<SqlStorage>,\n modelName: string,\n raw: Record<string, unknown>,\n): RowEnvelope {\n return {\n raw,\n mapped: mapStorageRowToModelFields(contract, modelName, raw),\n };\n}\n\nexport function mapStorageRowToModelFields(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const columnToField = getColumnToFieldMap(contract, modelName);\n if (Object.keys(columnToField).length === 0) {\n return { ...row };\n }\n\n const mapped: Record<string, unknown> = {};\n for (const [columnName, value] of Object.entries(row)) {\n mapped[columnToField[columnName] ?? columnName] = value;\n }\n return mapped;\n}\n\nconst mergedColumnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\n\nfunction getMergedColumnToFieldMap(\n contract: Contract<SqlStorage>,\n baseModelName: string,\n variantModelName: string,\n variantTable: string | undefined,\n): Record<string, string> {\n const cacheKey = `${baseModelName}:${variantModelName}:${variantTable ?? ''}`;\n let perContract = mergedColumnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n mergedColumnToFieldCache.set(contract, perContract);\n }\n const cached = perContract.get(cacheKey);\n if (cached) return cached;\n\n const baseMap = getCompleteColumnToFieldMap(contract, baseModelName);\n const variantMap = getCompleteColumnToFieldMap(contract, variantModelName);\n\n const merged: Record<string, string> = { ...baseMap };\n for (const [col, field] of Object.entries(variantMap)) {\n if (variantTable) {\n merged[`${variantTable}__${col}`] = field;\n } else {\n merged[col] = field;\n }\n }\n\n perContract.set(cacheKey, merged);\n return merged;\n}\n\nexport function mapPolymorphicRow(\n contract: Contract<SqlStorage>,\n baseModelName: string,\n polyInfo: PolymorphismInfo,\n row: Record<string, unknown>,\n variantName?: string,\n): Record<string, unknown> {\n const variant = variantName\n ? polyInfo.variants.get(variantName)\n : polyInfo.variantsByValue.get(row[polyInfo.discriminatorColumn] as string);\n\n if (!variant) {\n const baseMap = getCompleteColumnToFieldMap(contract, baseModelName);\n const mapped: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(row)) {\n const field = baseMap[col];\n if (field !== undefined) {\n mapped[field] = val;\n }\n }\n return mapped;\n }\n\n const mtiTable = variant.strategy === 'mti' ? variant.table : undefined;\n const mergedMap = getMergedColumnToFieldMap(contract, baseModelName, variant.modelName, mtiTable);\n const mapped: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(row)) {\n const field = mergedMap[col];\n if (field !== undefined) {\n mapped[field] = val;\n }\n }\n return mapped;\n}\n\nexport function mapModelDataToStorageRow(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const mapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row)) {\n if (value === undefined) {\n continue;\n }\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n mapped[columnName] = value;\n }\n return mapped;\n}\n\nexport function mapResultRows<TIn, TOut>(\n result: AsyncIterableResult<TIn>,\n mapper: (value: TIn) => TOut,\n): AsyncIterableResult<TOut> {\n const generator = async function* (): AsyncGenerator<TOut, void, unknown> {\n for await (const value of result) {\n yield mapper(value);\n }\n };\n return new AsyncIterableResult(generator());\n}\n\nexport async function acquireRuntimeScope(\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'],\n): Promise<{\n scope: RuntimeScope;\n release?: () => Promise<void>;\n}> {\n if (typeof runtime.connection !== 'function') {\n return { scope: runtime };\n }\n\n const connection = await runtime.connection();\n if (typeof connection.release === 'function') {\n return {\n scope: connection,\n release: () => (connection as RuntimeConnection).release?.() ?? Promise.resolve(),\n };\n }\n\n return { scope: connection };\n}\n","import type { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlExecutionPlan, SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\n\nexport function executeQueryPlan<Row>(\n scope: RuntimeScope,\n plan: SqlExecutionPlan<Row> | SqlQueryPlan<Row>,\n): AsyncIterableResult<Row> {\n return scope.execute(plan);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\n\nexport type IncludeStrategy = 'lateral' | 'correlated' | 'multiQuery';\n\n/**\n * Choose the SQL emission strategy for nested includes based on the\n * contract's declared capabilities.\n *\n * - `'lateral'`: outer SELECT with one LATERAL JOIN per relation,\n * aggregating to JSON. Requires both `lateral` and `jsonAgg`.\n * Postgres has both.\n * - `'correlated'`: outer SELECT with one correlated subquery per\n * relation, aggregating to JSON. Requires `jsonAgg` only.\n * SQLite has `jsonAgg` (via `json_group_array`) but no LATERAL.\n * - `'multiQuery'`: fallback. One SELECT per relation, stitched\n * together in JS via `WHERE pk IN (parent-pk-values)`. Always\n * correct; just N+1 round-trips.\n *\n * The capability flags are looked up under the contract's\n * `targetFamily` and `target` namespaces — the two layers the contract\n * emitter actually populates. Cross-namespace (\"`postgres.lateral`\n * found while running SQLite\") false positives are impossible because\n * we only inspect the running target's namespaces.\n */\nexport function selectIncludeStrategy(contract: Contract<SqlStorage>): IncludeStrategy {\n const hasLateral = capabilityFlag(contract, 'lateral');\n const hasJsonAgg = capabilityFlag(contract, 'jsonAgg');\n\n if (hasLateral && hasJsonAgg) {\n return 'lateral';\n }\n\n if (hasJsonAgg) {\n return 'correlated';\n }\n\n return 'multiQuery';\n}\n\n/**\n * Read a capability flag from the contract's target/family namespaces.\n *\n * The contract emitter populates `capabilities[targetFamily]` (universal\n * SQL flags like `jsonAgg`, `returning`) and `capabilities[target]`\n * (target-specific flags like `lateral` on Postgres). Either may\n * declare a given flag; the family namespace declares the floor and the\n * target namespace can extend on top.\n */\nfunction capabilityFlag(contract: Contract<SqlStorage>, flag: string): boolean {\n return (\n contract.capabilities[contract.targetFamily]?.[flag] === true ||\n contract.capabilities[contract.target]?.[flag] === true\n );\n}\n","import type { IncludeExpr } from './types';\n\n/**\n * Recursive predicate: does any include in the tree carry a\n * non-leaf `distinct()` — i.e. `nested.distinct` set on an include\n * whose `nested.includes` is non-empty?\n *\n * Such shapes cannot be lowered into the lateral / correlated\n * single-query strategies: the child SELECT would emit\n * `SELECT DISTINCT <scalars>, json_agg(<nested>) FROM ...`, and\n * Postgres rejects equality on `json`. The dispatch path routes\n * these to multi-query (which applies distinct to scalar-only rows\n * before grandchildren stitch in JS); the planner rejects them at\n * the boundary.\n *\n * `distinctOn` is intentionally not included: Postgres only\n * compares the `ON (...)` expressions for equality, so a hashable\n * key column plus json projections is well-defined.\n */\nexport function hasNonLeafIncludeWithDistinct(includes: readonly IncludeExpr[]): boolean {\n return includes.some(\n (include) =>\n (include.nested.distinct !== undefined &&\n include.nested.distinct.length > 0 &&\n include.nested.includes.length > 0) ||\n hasNonLeafIncludeWithDistinct(include.nested.includes),\n );\n}\n\n/**\n * Recursive predicate: does any include in the tree carry a scalar\n * selector (`count` / `sum` / ...) or a `combine()` descriptor?\n *\n * Such shapes cannot be lowered into the lateral / correlated\n * single-query strategies (TML-2595). The dispatch path uses this\n * to gate the whole tree to multi-query at any depth; the planner\n * (`compileSelectWithIncludeStrategy`) uses the same predicate to\n * fail fast at the boundary rather than build a malformed plan.\n * Without the recursion, a depth-2+ row include containing a\n * depth-3 `count()` would fall through to the planner and hit its\n * explicit `throw` instead of routing to multi-query.\n */\nexport function hasScalarOrCombineIncludeDescriptors(includes: readonly IncludeExpr[]): boolean {\n return includes.some(\n (include) =>\n include.scalar !== undefined ||\n include.combine !== undefined ||\n hasScalarOrCombineIncludeDescriptors(include.nested.includes),\n );\n}\n","import type { Contract, PlanMeta } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport { type AnyQueryAst, collectOrderedParamRefs } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\n\nexport function deriveParamsFromAst(ast: AnyQueryAst): {\n params: unknown[];\n} {\n return {\n params: collectOrderedParamRefs(ast).map((p) => (p.kind === 'param-ref' ? p.value : undefined)),\n };\n}\n\nexport function resolveTableColumns(contract: Contract<SqlStorage>, tableName: string): string[] {\n const table = contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\" in SQL ORM query planner`);\n }\n return Object.keys(table.columns);\n}\n\nexport function buildOrmPlanMeta(\n contract: Contract<SqlStorage>,\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): PlanMeta {\n const annotationRecord =\n annotations !== undefined && annotations.size > 0\n ? Object.freeze(Object.fromEntries(annotations))\n : undefined;\n return {\n target: contract.target,\n targetFamily: contract.targetFamily,\n storageHash: contract.storage.storageHash,\n ...ifDefined('profileHash', contract.profileHash),\n ...ifDefined('annotations', annotationRecord),\n lane: 'orm-client',\n };\n}\n\nexport function buildOrmQueryPlan<Row>(\n contract: Contract<SqlStorage>,\n ast: AnyQueryAst,\n params: readonly unknown[],\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): SqlQueryPlan<Row> {\n return Object.freeze({\n ast,\n params: [...params],\n meta: buildOrmPlanMeta(contract, annotations),\n });\n}\n\n/**\n * Merges annotations into an existing `SqlQueryPlan`'s\n * `meta.annotations` and returns a new frozen plan.\n *\n * Used by the ORM dispatch path to attach terminal-call annotations to\n * plans produced by mutation compile functions (which don't take\n * annotations as parameters). Reads compile through `compileSelect`-\n * family functions that pass `state.annotations` directly to\n * `buildOrmQueryPlan`; this helper is the alternate path for write\n * terminals where annotations arrive at the call site, not via state.\n *\n * Returns the input plan unchanged when `annotations` is undefined\n * or empty. Reserved framework namespaces (`codecs`, `limit`) on the\n * input plan win over caller-supplied entries under the same key —\n * see the reserved-namespace policy on `defineAnnotation`.\n */\nexport function mergeAnnotations<Row>(\n plan: SqlQueryPlan<Row>,\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n): SqlQueryPlan<Row> {\n if (annotations === undefined || annotations.size === 0) {\n return plan;\n }\n const callerEntries: Record<string, AnnotationValue<unknown, OperationKind>> = {};\n for (const [namespace, value] of annotations) {\n callerEntries[namespace] = value;\n }\n // Caller-supplied annotations go first so framework-reserved keys on\n // the existing plan (codecs, limit) override any collision under the\n // same namespace.\n const mergedAnnotations = Object.freeze({\n ...callerEntries,\n ...(plan.meta.annotations ?? {}),\n });\n return Object.freeze({\n ...plan,\n meta: Object.freeze({\n ...plan.meta,\n annotations: mergedAnnotations,\n }),\n });\n}\n","import { AndExpr, type AnyExpression } from '@prisma-next/sql-relational-core/ast';\n\nexport function combineWhereExprs(filters: readonly AnyExpression[]): AnyExpression | undefined {\n if (filters.length === 0) {\n return undefined;\n }\n\n if (filters.length === 1) {\n return filters[0];\n }\n\n return AndExpr.of(filters);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n type CodecRef,\n ColumnRef,\n NotExpr,\n NullCheckExpr,\n OrExpr,\n ProjectionItem,\n SelectAst,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { buildOrmQueryPlan, deriveParamsFromAst } from './query-plan-meta';\nimport type { AggregateSelector } from './types';\nimport { combineWhereExprs } from './where-utils';\n\nfunction toAggregateProjection(\n contract: Contract<SqlStorage>,\n tableName: string,\n selector: AggregateSelector<unknown>,\n): { expr: AggregateExpr; codec: CodecRef | undefined } {\n if (selector.fn === 'count') {\n // count() returns a target-specific bigint; mapping isn't derivable here\n // without target coupling, so we leave the codec slot empty.\n return { expr: AggregateExpr.count(), codec: undefined };\n }\n\n if (!selector.column) {\n throw new Error(`Aggregate selector \"${selector.fn}\" requires a field`);\n }\n\n const expr = new AggregateExpr(selector.fn, ColumnRef.of(tableName, selector.column));\n // min/max preserve the input column's type, so propagate the column codec.\n // sum widens (int4 → int8 in Postgres) and avg → numeric; both need\n // target+input-aware mapping that doesn't exist yet, so leave unstamped.\n if (selector.fn === 'min' || selector.fn === 'max') {\n const codec = codecRefForStorageColumn(contract.storage, tableName, selector.column);\n return { expr, codec };\n }\n return { expr, codec: undefined };\n}\n\n// ORM HAVING filters use literal binding (values inlined at plan-build time),\n// not parameterized binding. ParamRef is rejected because the ORM's grouped\n// collection API always produces literal comparisons for having() predicates.\nfunction validateGroupedComparable(value: AnyExpression): AnyExpression {\n switch (value.kind) {\n case 'param-ref':\n throw new Error('ParamRef is not supported in grouped having expressions');\n case 'literal':\n case 'column-ref':\n case 'identifier-ref':\n case 'aggregate':\n case 'operation':\n return value;\n case 'list':\n if (value.values.some((entry) => entry.kind === 'param-ref')) {\n throw new Error('ParamRef is not supported in grouped having expressions');\n }\n return value;\n default:\n throw new Error(`Unsupported comparable kind in grouped having: \"${value.kind}\"`);\n }\n}\n\nfunction validateGroupedMetricExpr(expr: AnyExpression): AggregateExpr {\n if (expr.kind !== 'aggregate') {\n throw new Error('groupBy().having() only supports aggregate metric expressions');\n }\n\n return expr;\n}\n\nfunction rejectHavingExpr(expr: { kind: string }): never {\n throw new Error(`Unsupported grouped having expression kind \"${expr.kind}\"`);\n}\n\nfunction validateGroupedHavingExpr(expr: AnyExpression): AnyExpression {\n return expr.accept<AnyExpression>({\n columnRef: rejectHavingExpr,\n identifierRef: rejectHavingExpr,\n subquery: rejectHavingExpr,\n operation: rejectHavingExpr,\n aggregate: rejectHavingExpr,\n jsonObject: rejectHavingExpr,\n jsonArrayAgg: rejectHavingExpr,\n literal: rejectHavingExpr,\n param() {\n throw new Error('ParamRef is not supported in grouped having expressions');\n },\n preparedParam() {\n throw new Error('PreparedParamRef is not supported in grouped having expressions');\n },\n list: rejectHavingExpr,\n and(expr) {\n return AndExpr.of(expr.exprs.map((child) => validateGroupedHavingExpr(child)));\n },\n or(expr) {\n return OrExpr.of(expr.exprs.map((child) => validateGroupedHavingExpr(child)));\n },\n exists(expr) {\n throw new Error(`Unsupported grouped having expression kind \"${expr.kind}\"`);\n },\n nullCheck(expr) {\n return new NullCheckExpr(validateGroupedMetricExpr(expr.expr), expr.isNull);\n },\n not(expr) {\n return new NotExpr(validateGroupedHavingExpr(expr.expr));\n },\n binary(expr) {\n return new BinaryExpr(\n expr.op,\n validateGroupedMetricExpr(expr.left),\n validateGroupedComparable(expr.right),\n );\n },\n });\n}\n\nexport function compileAggregate(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n aggregateSpec: Record<string, AggregateSelector<unknown>>,\n): SqlQueryPlan<Record<string, unknown>> {\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('aggregate() requires at least one aggregation selector');\n }\n\n const projection: ProjectionItem[] = entries.map(([alias, selector]) => {\n const { expr, codec } = toAggregateProjection(contract, tableName, selector);\n return ProjectionItem.of(alias, expr, codec);\n });\n let ast = SelectAst.from(TableSource.named(tableName)).withProjection(projection);\n const where = combineWhereExprs(filters);\n if (where) {\n ast = ast.withWhere(where);\n }\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileGroupedAggregate(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n groupByColumns: readonly string[],\n aggregateSpec: Record<string, AggregateSelector<unknown>>,\n havingExpr: AnyExpression | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n if (groupByColumns.length === 0) {\n throw new Error('groupBy() requires at least one field');\n }\n\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('groupBy().aggregate() requires at least one aggregation selector');\n }\n\n const projection: ProjectionItem[] = [\n ...groupByColumns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableName, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n ),\n ...entries.map(([alias, selector]) => {\n const { expr, codec } = toAggregateProjection(contract, tableName, selector);\n return ProjectionItem.of(alias, expr, codec);\n }),\n ];\n\n let ast = SelectAst.from(TableSource.named(tableName))\n .withProjection(projection)\n .withGroupBy(groupByColumns.map((column) => ColumnRef.of(tableName, column)));\n const where = combineWhereExprs(filters);\n if (where) {\n ast = ast.withWhere(where);\n }\n\n if (havingExpr) {\n ast = ast.withHaving(validateGroupedHavingExpr(havingExpr));\n }\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n ColumnRef,\n DefaultValueExpr,\n DeleteAst,\n InsertAst,\n InsertOnConflict,\n ParamRef,\n ProjectionItem,\n TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { buildOrmQueryPlan, deriveParamsFromAst, resolveTableColumns } from './query-plan-meta';\nimport { combineWhereExprs } from './where-utils';\n\nfunction unboundTable(contract: Contract<SqlStorage>, tableName: string): StorageTable | undefined {\n return contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n}\n\nfunction buildReturningColumns(\n contract: Contract<SqlStorage>,\n tableName: string,\n returningColumns: readonly string[] | undefined,\n): ReadonlyArray<ProjectionItem> {\n const columns =\n returningColumns && returningColumns.length > 0\n ? [...returningColumns]\n : resolveTableColumns(contract, tableName);\n\n return columns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableName, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n );\n}\n\nfunction toParamAssignments(\n contract: Contract<SqlStorage>,\n tableName: string,\n values: Record<string, unknown>,\n): {\n readonly assignments: Record<string, ParamRef>;\n} {\n const assignments: Record<string, ParamRef> = {};\n\n const table = unboundTable(contract, tableName);\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\"`);\n }\n\n for (const [column, value] of Object.entries(values)) {\n if (!table.columns[column]) {\n throw new Error(`Unknown column \"${column}\" in table \"${tableName}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, tableName, column);\n assignments[column] = ParamRef.of(value, {\n name: column,\n ...ifDefined('codec', codec),\n });\n }\n\n return { assignments };\n}\n\nfunction normalizeInsertRows(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): {\n readonly rows: ReadonlyArray<Record<string, ParamRef | DefaultValueExpr>>;\n} {\n if (rows.length === 0) {\n throw new Error('normalizeInsertRows requires at least one row');\n }\n\n const orderedColumns: string[] = [];\n const seenColumns = new Set<string>();\n\n for (const row of rows) {\n for (const column of Object.keys(row)) {\n if (seenColumns.has(column)) {\n continue;\n }\n seenColumns.add(column);\n orderedColumns.push(column);\n }\n }\n\n const table = unboundTable(contract, tableName);\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\"`);\n }\n\n const normalizedRows = rows.map((row) => {\n if (orderedColumns.length === 0) {\n return {};\n }\n\n const normalizedRow: Record<string, ParamRef | DefaultValueExpr> = {};\n for (const column of orderedColumns) {\n if (Object.hasOwn(row, column)) {\n if (!table.columns[column]) {\n throw new Error(`Unknown column \"${column}\" in table \"${tableName}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, tableName, column);\n normalizedRow[column] = ParamRef.of(row[column], {\n name: column,\n ...ifDefined('codec', codec),\n });\n continue;\n }\n normalizedRow[column] = new DefaultValueExpr();\n }\n return normalizedRow;\n });\n\n return { rows: normalizedRows };\n}\n\nexport function compileInsertReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const { rows: normalizedRows } = normalizeInsertRows(contract, tableName, rows);\n const ast = InsertAst.into(TableSource.named(tableName))\n .withRows(normalizedRows)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileInsertCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): SqlQueryPlan<Record<string, unknown>> {\n const { rows: normalizedRows } = normalizeInsertRows(contract, tableName, rows);\n const ast = InsertAst.into(TableSource.named(tableName)).withRows(normalizedRows);\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nfunction stripUndefinedValues(row: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\n// Groups rows by their set of present columns so each group can be emitted as a single INSERT statement. Groups are created in input order — rows with the same signature that are non-adjacent produce separate groups. This is deliberate: preserving insertion order ensures autogenerated/autoincrement columns are assigned in the same order as the caller's input.\nfunction groupRowsByColumnSignature(\n rows: readonly Record<string, unknown>[],\n): ReadonlyArray<readonly Record<string, unknown>[]> {\n const groups: Array<Record<string, unknown>[]> = [];\n let currentKey = '';\n let currentGroup: Record<string, unknown>[] = [];\n\n for (const rawRow of rows) {\n const row = stripUndefinedValues(rawRow);\n const key = Object.keys(row).sort().join(',');\n if (key !== currentKey || currentGroup.length === 0) {\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n currentKey = key;\n currentGroup = [row];\n } else {\n currentGroup.push(row);\n }\n }\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n\n return groups;\n}\n\nexport function compileInsertReturningSplit(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n returningColumns: readonly string[] | undefined,\n): ReadonlyArray<SqlQueryPlan<Record<string, unknown>>> {\n if (rows.length === 0) {\n throw new Error('create() requires at least one row');\n }\n return groupRowsByColumnSignature(rows).map((group) =>\n compileInsertReturning(contract, tableName, group, returningColumns),\n );\n}\n\nexport function compileInsertCountSplit(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): ReadonlyArray<SqlQueryPlan<Record<string, unknown>>> {\n if (rows.length === 0) {\n throw new Error('createCount() requires at least one row');\n }\n return groupRowsByColumnSignature(rows).map((group) =>\n compileInsertCount(contract, tableName, group),\n );\n}\n\nexport function compileUpsertReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n createValues: Record<string, unknown>,\n updateValues: Record<string, unknown>,\n conflictColumns: readonly string[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const createAssignments = toParamAssignments(contract, tableName, createValues);\n const hasUpdateValues = Object.keys(updateValues).length > 0;\n const updateAssignments = hasUpdateValues\n ? toParamAssignments(contract, tableName, updateValues)\n : undefined;\n const onConflict = updateAssignments\n ? InsertOnConflict.on(\n conflictColumns.map((column) => ColumnRef.of(tableName, column)),\n ).doUpdateSet(updateAssignments.assignments)\n : InsertOnConflict.on(\n conflictColumns.map((column) => ColumnRef.of(tableName, column)),\n ).doNothing();\n\n const ast = InsertAst.into(TableSource.named(tableName))\n .withValues(createAssignments.assignments)\n .withOnConflict(onConflict)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileUpdateReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n const { assignments } = toParamAssignments(contract, tableName, setValues);\n let ast = UpdateAst.table(TableSource.named(tableName))\n .withSet(assignments)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileUpdateCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n const { assignments } = toParamAssignments(contract, tableName, setValues);\n let ast = UpdateAst.table(TableSource.named(tableName)).withSet(assignments);\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileDeleteReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n let ast = DeleteAst.from(TableSource.named(tableName)).withReturning(\n buildReturningColumns(contract, tableName, returningColumns),\n );\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileDeleteCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n let ast = DeleteAst.from(TableSource.named(tableName));\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n type AnyFromSource,\n BinaryExpr,\n type ColumnRef,\n DerivedTableSource,\n ExistsExpr,\n type ExpressionRewriter,\n JoinAst,\n ListExpression,\n NotExpr,\n NullCheckExpr,\n OrderByItem,\n OrExpr,\n ParamRef,\n type ProjectionExpr,\n ProjectionItem,\n SelectAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\n\nexport function bindWhereExpr(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return bindWhereExprNode(contract, expr);\n}\n\nfunction bindWhereExprNode(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return expr.accept<AnyExpression>({\n columnRef(expr) {\n return bindExpression(contract, expr);\n },\n identifierRef(expr) {\n return expr;\n },\n subquery(expr) {\n return bindExpression(contract, expr);\n },\n operation(expr) {\n return bindExpression(contract, expr);\n },\n aggregate(expr) {\n return bindExpression(contract, expr);\n },\n jsonObject(expr) {\n return bindExpression(contract, expr);\n },\n jsonArrayAgg(expr) {\n return bindExpression(contract, expr);\n },\n literal(expr) {\n return expr;\n },\n param(expr) {\n return expr;\n },\n preparedParam(expr) {\n return expr;\n },\n list(expr) {\n return bindExpression(contract, expr);\n },\n binary(expr) {\n const left = bindExpression(contract, expr.left);\n const bindingColumn = left.kind === 'column-ref' ? (left as ColumnRef) : undefined;\n\n return new BinaryExpr(expr.op, left, bindComparable(contract, expr.right, bindingColumn));\n },\n and(expr) {\n return AndExpr.of(expr.exprs.map((part) => bindWhereExprNode(contract, part)));\n },\n or(expr) {\n return OrExpr.of(expr.exprs.map((part) => bindWhereExprNode(contract, part)));\n },\n exists(expr) {\n return expr.notExists\n ? ExistsExpr.notExists(bindSelectAst(contract, expr.subquery))\n : ExistsExpr.exists(bindSelectAst(contract, expr.subquery));\n },\n nullCheck(expr) {\n return expr.isNull\n ? NullCheckExpr.isNull(bindExpression(contract, expr.expr))\n : NullCheckExpr.isNotNull(bindExpression(contract, expr.expr));\n },\n not(expr) {\n return new NotExpr(bindWhereExprNode(contract, expr.expr));\n },\n });\n}\n\nfunction bindComparable(\n contract: Contract<SqlStorage>,\n comparable: AnyExpression,\n bindingColumn: ColumnRef | undefined,\n): AnyExpression {\n if (comparable.kind === 'param-ref' || bindingColumn === undefined) {\n return comparable.kind === 'param-ref'\n ? comparable\n : comparable.kind === 'literal' || comparable.kind === 'list'\n ? comparable\n : bindExpression(contract, comparable);\n }\n\n if (comparable.kind === 'literal') {\n return createParamRef(contract, bindingColumn, comparable.value);\n }\n\n if (comparable.kind === 'list') {\n return ListExpression.of(\n comparable.values.map((value) =>\n value.kind === 'literal' ? createParamRef(contract, bindingColumn, value.value) : value,\n ),\n );\n }\n\n return bindExpression(contract, comparable);\n}\n\nfunction createParamRef(\n contract: Contract<SqlStorage>,\n columnRef: ColumnRef,\n value: unknown,\n): ParamRef {\n if (\n !(\n contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[columnRef.table] as\n | StorageTable\n | undefined\n )?.columns[columnRef.column]\n ) {\n throw new Error(`Unknown column \"${columnRef.column}\" in table \"${columnRef.table}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, columnRef.table, columnRef.column);\n return ParamRef.of(value, codec ? { codec } : undefined);\n}\n\nfunction createExpressionBinder(contract: Contract<SqlStorage>): ExpressionRewriter {\n return {\n select: (ast) => bindSelectAst(contract, ast),\n };\n}\n\nfunction bindExpression(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return expr.rewrite(createExpressionBinder(contract));\n}\n\nfunction bindProjectionExpr(contract: Contract<SqlStorage>, expr: ProjectionExpr): ProjectionExpr {\n return expr.kind === 'literal' ? expr : bindExpression(contract, expr);\n}\n\nfunction bindOrderByItem(contract: Contract<SqlStorage>, orderItem: OrderByItem): OrderByItem {\n return new OrderByItem(bindExpression(contract, orderItem.expr), orderItem.dir);\n}\n\nfunction bindJoin(contract: Contract<SqlStorage>, join: JoinAst): JoinAst {\n return new JoinAst(\n join.joinType,\n bindFromSource(contract, join.source),\n join.on.kind === 'eq-col-join-on' ? join.on : bindWhereExprNode(contract, join.on),\n join.lateral,\n );\n}\n\nfunction bindFromSource(contract: Contract<SqlStorage>, source: AnyFromSource): AnyFromSource {\n if (source.kind === 'table-source') {\n return source;\n }\n if (source.kind === 'derived-table-source') {\n const derived = source as DerivedTableSource;\n return DerivedTableSource.as(derived.alias, bindSelectAst(contract, derived.query));\n }\n\n return source;\n}\n\nfunction bindSelectAst(contract: Contract<SqlStorage>, ast: SelectAst): SelectAst {\n return new SelectAst({\n from: bindFromSource(contract, ast.from),\n joins: ast.joins?.map((join) => bindJoin(contract, join)),\n projection: ast.projection.map(\n (projection) =>\n new ProjectionItem(\n projection.alias,\n bindProjectionExpr(contract, projection.expr),\n projection.codec,\n ),\n ),\n where: ast.where ? bindWhereExprNode(contract, ast.where) : undefined,\n orderBy: ast.orderBy?.map((orderItem) => bindOrderByItem(contract, orderItem)),\n distinct: ast.distinct,\n distinctOn: ast.distinctOn?.map((expr) => bindExpression(contract, expr)),\n groupBy: ast.groupBy?.map((expr) => bindExpression(contract, expr)),\n having: ast.having ? bindWhereExprNode(contract, ast.having) : undefined,\n limit: ast.limit,\n offset: ast.offset,\n selectAllIntent: ast.selectAllIntent,\n });\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n type AstRewriter,\n BinaryExpr,\n type BinaryOp,\n ColumnRef,\n DerivedTableSource,\n EqColJoinOn,\n JoinAst,\n JsonArrayAggExpr,\n JsonObjectExpr,\n ListExpression,\n LiteralExpr,\n OrderByItem,\n OrExpr,\n ProjectionItem,\n SelectAst,\n SubqueryExpr,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n type PolymorphismInfo,\n resolvePolymorphismInfo,\n resolvePrimaryKeyColumn,\n} from './collection-contract';\nimport {\n hasNonLeafIncludeWithDistinct,\n hasScalarOrCombineIncludeDescriptors,\n} from './include-tree-predicates';\nimport { buildOrmQueryPlan, deriveParamsFromAst, resolveTableColumns } from './query-plan-meta';\nimport type { CollectionState, IncludeExpr } from './types';\nimport { bindWhereExpr } from './where-binding';\nimport { combineWhereExprs } from './where-utils';\n\ntype CursorOrderEntry = {\n readonly column: string;\n readonly direction: 'asc' | 'desc';\n readonly value: unknown;\n};\n\nfunction buildProjection(\n contract: Contract<SqlStorage>,\n tableName: string,\n selectedFields: readonly string[] | undefined,\n tableRef = tableName,\n): ProjectionItem[] {\n const columns =\n selectedFields && selectedFields.length > 0\n ? [...selectedFields]\n : resolveTableColumns(contract, tableName);\n\n return columns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableRef, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n );\n}\n\nfunction createBoundaryExpr(tableName: string, entry: CursorOrderEntry): AnyExpression {\n const comparator: BinaryOp = entry.direction === 'asc' ? 'gt' : 'lt';\n return new BinaryExpr(\n comparator,\n ColumnRef.of(tableName, entry.column),\n LiteralExpr.of(entry.value),\n );\n}\n\nfunction buildLexicographicCursorWhere(\n tableName: string,\n entries: readonly CursorOrderEntry[],\n): AnyExpression {\n const branches = entries.map((entry, index): AnyExpression => {\n const branchExprs: AnyExpression[] = [];\n\n for (const prefixEntry of entries.slice(0, index)) {\n branchExprs.push(\n BinaryExpr.eq(\n ColumnRef.of(tableName, prefixEntry.column),\n LiteralExpr.of(prefixEntry.value),\n ),\n );\n }\n\n branchExprs.push(createBoundaryExpr(tableName, entry));\n if (branchExprs.length === 1) {\n return branchExprs[0] as AnyExpression;\n }\n\n return AndExpr.of(branchExprs);\n });\n\n if (branches.length === 1) {\n return branches[0] as AnyExpression;\n }\n\n return OrExpr.of(branches);\n}\n\nfunction buildCursorWhere(\n tableName: string,\n orderBy: readonly OrderByItem[] | undefined,\n cursor: Readonly<Record<string, unknown>> | undefined,\n): AnyExpression | undefined {\n if (!cursor || !orderBy || orderBy.length === 0) {\n return undefined;\n }\n\n const entries: CursorOrderEntry[] = [];\n for (const order of orderBy) {\n if (order.expr.kind !== 'column-ref') continue;\n const column = order.expr.column;\n const value = cursor[column];\n if (value === undefined) {\n throw new Error(`Missing cursor value for orderBy column \"${column}\"`);\n }\n entries.push({\n column,\n direction: order.dir,\n value,\n });\n }\n\n const firstEntry = entries[0];\n if (entries.length === 1 && firstEntry !== undefined) {\n return createBoundaryExpr(tableName, firstEntry);\n }\n\n return buildLexicographicCursorWhere(tableName, entries);\n}\n\nfunction createTableRefRemapper(fromTable: string, toTable: string): AstRewriter {\n return {\n columnRef: (col) => (col.table === fromTable ? ColumnRef.of(toTable, col.column) : col),\n tableSource: (source) => {\n if (source.alias === fromTable) return TableSource.named(source.name, toTable);\n if (!source.alias && source.name === fromTable)\n return TableSource.named(source.name, toTable);\n return source;\n },\n eqColJoinOn: (on) =>\n EqColJoinOn.of(\n on.left.table === fromTable ? ColumnRef.of(toTable, on.left.column) : on.left,\n on.right.table === fromTable ? ColumnRef.of(toTable, on.right.column) : on.right,\n ),\n };\n}\n\nfunction buildStateWhere(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n options?: {\n readonly filterTableName?: string;\n },\n): AnyExpression | undefined {\n const filterTableName = options?.filterTableName;\n const cursorTableName = filterTableName ?? tableName;\n const cursorWhere = buildCursorWhere(cursorTableName, state.orderBy, state.cursor);\n const remappedFilters =\n filterTableName && filterTableName !== tableName\n ? state.filters.map((filter) =>\n filter.rewrite(createTableRefRemapper(filterTableName, tableName)),\n )\n : state.filters;\n const boundCursorWhere = cursorWhere ? bindWhereExpr(contract, cursorWhere) : undefined;\n const remappedCursorWhere =\n boundCursorWhere && filterTableName && filterTableName !== tableName\n ? boundCursorWhere.rewrite(createTableRefRemapper(filterTableName, tableName))\n : boundCursorWhere;\n const filters = remappedCursorWhere ? [...remappedFilters, remappedCursorWhere] : remappedFilters;\n return combineWhereExprs(filters);\n}\n\nfunction buildIncludeOrderArtifacts(\n relationName: string,\n rowAlias: string,\n childOrderBy: readonly OrderByItem[] | undefined,\n): {\n readonly childOrderBy: ReadonlyArray<OrderByItem> | undefined;\n readonly hiddenOrderProjection: ReadonlyArray<ProjectionItem>;\n readonly aggregateOrderBy: ReadonlyArray<OrderByItem> | undefined;\n} {\n if (!childOrderBy || childOrderBy.length === 0) {\n return {\n childOrderBy: undefined,\n hiddenOrderProjection: [],\n aggregateOrderBy: undefined,\n };\n }\n\n const hiddenOrderProjection = childOrderBy.map((orderItem, index) =>\n ProjectionItem.of(`${relationName}__order_${index}`, orderItem.expr),\n );\n const aggregateOrderBy = hiddenOrderProjection.map((projection, index) => {\n const orderItem = childOrderBy[index];\n if (!orderItem) {\n throw new Error(`Missing include order metadata at index ${index}`);\n }\n return new OrderByItem(ColumnRef.of(rowAlias, projection.alias), orderItem.dir);\n });\n\n return {\n childOrderBy,\n hiddenOrderProjection,\n aggregateOrderBy,\n };\n}\n\n/**\n * Recursively build the join + projection artifacts for the nested\n * includes attached to a child SELECT. Used by\n * `buildIncludeChildRowsSelect` to wire depth-2+ aggregates into the\n * inner SELECT at each level.\n *\n * Under the `lateral` strategy each nested include contributes one\n * LEFT JOIN LATERAL plus one projection item that references the\n * lateral alias. Under the `correlated` strategy each nested include\n * contributes a single projection item whose expression is a\n * correlated subquery; no joins are produced. The two cases are\n * symmetric, which is why both paths share `buildIncludeChildRowsSelect`.\n */\nfunction buildNestedIncludeArtifacts(\n contract: Contract<SqlStorage>,\n parentTableRef: string,\n includes: readonly IncludeExpr[],\n strategy: 'lateral' | 'correlated',\n): {\n readonly joins: ReadonlyArray<JoinAst>;\n readonly projections: ReadonlyArray<ProjectionItem>;\n} {\n if (includes.length === 0) {\n return { joins: [], projections: [] };\n }\n\n const joins: JoinAst[] = [];\n const projections: ProjectionItem[] = [];\n\n for (const nested of includes) {\n if (strategy === 'lateral') {\n const artifact = buildLateralIncludeArtifacts(contract, parentTableRef, nested);\n joins.push(artifact.join);\n projections.push(artifact.projection);\n continue;\n }\n const artifact = buildCorrelatedIncludeProjection(contract, parentTableRef, nested);\n projections.push(artifact.projection);\n }\n\n return { joins, projections };\n}\n\nfunction buildIncludeChildRowsSelect(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n strategy: 'lateral' | 'correlated',\n): {\n readonly childRows: SelectAst;\n readonly childProjection: ReadonlyArray<ProjectionItem>;\n readonly rowsAlias: string;\n readonly aggregateOrderBy: ReadonlyArray<OrderByItem> | undefined;\n} {\n const childState = include.nested;\n const childTableAlias =\n include.relatedTableName === parentTableName ? `${include.relationName}__child` : undefined;\n const childTableRef = childTableAlias ?? include.relatedTableName;\n const rowsAlias = `${include.relationName}__rows`;\n const scalarProjection = buildProjection(\n contract,\n include.relatedTableName,\n childState.selectedFields,\n childTableRef,\n );\n // Self-relations rename the inner table source via `childTableAlias`,\n // so any ColumnRef the user-supplied `orderBy` carries against the\n // original `include.relatedTableName` is no longer in scope inside the\n // child SELECT. Remap before lowering to the hidden order projection\n // — mirrors the `filterTableName` remap `buildStateWhere` applies to\n // the where clauses just below.\n const remappedChildOrderBy =\n childTableAlias && childState.orderBy\n ? childState.orderBy.map((item) =>\n item.rewrite(createTableRefRemapper(include.relatedTableName, childTableRef)),\n )\n : childState.orderBy;\n const { childOrderBy, hiddenOrderProjection, aggregateOrderBy } = buildIncludeOrderArtifacts(\n include.relationName,\n rowsAlias,\n remappedChildOrderBy,\n );\n const childWhere = buildStateWhere(contract, childTableRef, childState, {\n filterTableName: include.relatedTableName,\n });\n const joinExpr = BinaryExpr.eq(\n ColumnRef.of(childTableRef, include.targetColumn),\n ColumnRef.of(parentTableName, include.localColumn),\n );\n const whereExpr = childWhere ? AndExpr.of([joinExpr, childWhere]) : joinExpr;\n\n // Recurse: each nested include produces either a LATERAL JOIN (under\n // `lateral`) or a correlated subquery projection (under `correlated`).\n // The nested aggregates are attached to *this* child SELECT, so they\n // correlate against `childTableRef` — which may itself be an alias if\n // the relation is self-referential.\n const { joins: nestedJoins, projections: nestedProjections } = buildNestedIncludeArtifacts(\n contract,\n childTableRef,\n childState.includes,\n strategy,\n );\n\n // `childProjection` is the set of items that survive into the parent's\n // JSON object — the scalar columns plus any nested-include aggregate\n // columns. The hidden order-by projection is separate and is dropped\n // before assembling the parent's json_object_expr.\n const childProjection: ReadonlyArray<ProjectionItem> = [\n ...scalarProjection,\n ...nestedProjections,\n ];\n\n let childRows = SelectAst.from(TableSource.named(include.relatedTableName, childTableAlias))\n .withProjection([...childProjection, ...hiddenOrderProjection])\n .withJoins(nestedJoins)\n .withWhere(whereExpr);\n\n if (childOrderBy) {\n childRows = childRows.withOrderBy(childOrderBy);\n }\n if (childState.distinctOn && childState.distinctOn.length > 0) {\n childRows = childRows.withDistinctOn(\n childState.distinctOn.map((column) => ColumnRef.of(childTableRef, column)),\n );\n } else if (childState.distinct && childState.distinct.length > 0) {\n childRows = childRows.withDistinct(true);\n }\n if (childState.limit !== undefined) {\n childRows = childRows.withLimit(childState.limit);\n }\n if (childState.offset !== undefined) {\n childRows = childRows.withOffset(childState.offset);\n }\n\n return {\n childRows,\n childProjection,\n rowsAlias,\n aggregateOrderBy,\n };\n}\n\nfunction buildLateralIncludeArtifacts(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n): {\n readonly join: JoinAst;\n readonly projection: ProjectionItem;\n} {\n const { childRows, childProjection, rowsAlias, aggregateOrderBy } = buildIncludeChildRowsSelect(\n contract,\n parentTableName,\n include,\n 'lateral',\n );\n const lateralAlias = `${include.relationName}_lateral`;\n const jsonObjectExpr = JsonObjectExpr.fromEntries(\n childProjection.map((item) =>\n JsonObjectExpr.entry(item.alias, ColumnRef.of(rowsAlias, item.alias)),\n ),\n );\n\n const aggregateQuery = SelectAst.from(DerivedTableSource.as(rowsAlias, childRows)).withProjection(\n [\n ProjectionItem.of(\n include.relationName,\n JsonArrayAggExpr.of(jsonObjectExpr, 'emptyArray', aggregateOrderBy),\n ),\n ],\n );\n\n return {\n join: JoinAst.left(DerivedTableSource.as(lateralAlias, aggregateQuery), AndExpr.true(), true),\n projection: ProjectionItem.of(\n include.relationName,\n ColumnRef.of(lateralAlias, include.relationName),\n ),\n };\n}\n\nfunction buildCorrelatedIncludeProjection(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n): {\n readonly projection: ProjectionItem;\n} {\n const { childRows, childProjection, rowsAlias, aggregateOrderBy } = buildIncludeChildRowsSelect(\n contract,\n parentTableName,\n include,\n 'correlated',\n );\n const jsonObjectExpr = JsonObjectExpr.fromEntries(\n childProjection.map((item) =>\n JsonObjectExpr.entry(item.alias, ColumnRef.of(rowsAlias, item.alias)),\n ),\n );\n const aggregateQuery = SelectAst.from(DerivedTableSource.as(rowsAlias, childRows)).withProjection(\n [\n ProjectionItem.of(\n include.relationName,\n JsonArrayAggExpr.of(jsonObjectExpr, 'emptyArray', aggregateOrderBy),\n ),\n ],\n );\n\n return {\n projection: ProjectionItem.of(include.relationName, SubqueryExpr.of(aggregateQuery)),\n };\n}\n\nfunction buildSelectAst(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n options: {\n readonly joins?: ReadonlyArray<JoinAst>;\n readonly includeProjection?: ReadonlyArray<ProjectionItem>;\n readonly where?: AnyExpression;\n } = {},\n): SelectAst {\n const scalarProjection = buildProjection(contract, tableName, state.selectedFields);\n const projection = [...scalarProjection, ...(options.includeProjection ?? [])];\n const where = options.where ?? buildStateWhere(contract, tableName, state);\n\n let ast = SelectAst.from(TableSource.named(tableName)).withProjection(projection);\n if (where) {\n ast = ast.withWhere(where);\n }\n if (state.orderBy) {\n ast = ast.withOrderBy(state.orderBy);\n }\n if (state.selectedFields === undefined) {\n ast = ast.withSelectAllIntent({ table: tableName });\n }\n if (state.distinctOn && state.distinctOn.length > 0) {\n ast = ast.withDistinctOn(state.distinctOn.map((column) => ColumnRef.of(tableName, column)));\n } else if (state.distinct && state.distinct.length > 0) {\n ast = ast.withDistinct(true);\n }\n if (state.limit !== undefined) {\n ast = ast.withLimit(state.limit);\n }\n if (state.offset !== undefined) {\n ast = ast.withOffset(state.offset);\n }\n if (options.joins && options.joins.length > 0) {\n ast = ast.withJoins(options.joins);\n }\n\n return ast;\n}\n\nfunction buildMtiJoins(\n contract: Contract<SqlStorage>,\n polyInfo: PolymorphismInfo,\n variantName: string | undefined,\n): { joins: JoinAst[]; projection: ProjectionItem[] } {\n const joins: JoinAst[] = [];\n const projection: ProjectionItem[] = [];\n const pkColumn = resolvePrimaryKeyColumn(contract, polyInfo.baseTable);\n\n const variantsToJoin = variantName\n ? polyInfo.mtiVariants.filter((v) => v.modelName === variantName)\n : polyInfo.mtiVariants;\n\n for (const variant of variantsToJoin) {\n const joinType = variantName ? 'inner' : 'left';\n const joinOn = EqColJoinOn.of(\n ColumnRef.of(polyInfo.baseTable, pkColumn),\n ColumnRef.of(variant.table, pkColumn),\n );\n const join =\n joinType === 'inner'\n ? JoinAst.inner(TableSource.named(variant.table), joinOn)\n : JoinAst.left(TableSource.named(variant.table), joinOn);\n joins.push(join);\n\n const variantColumns = resolveTableColumns(contract, variant.table);\n for (const col of variantColumns) {\n if (col === pkColumn) continue;\n const alias = `${variant.table}__${col}`;\n projection.push(\n ProjectionItem.of(\n alias,\n ColumnRef.of(variant.table, col),\n codecRefForStorageColumn(contract.storage, variant.table, col),\n ),\n );\n }\n }\n\n return { joins, projection };\n}\n\nexport function compileSelect(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n modelName?: string,\n): SqlQueryPlan<Record<string, unknown>> {\n const polyInfo = modelName ? resolvePolymorphismInfo(contract, modelName) : undefined;\n const mtiArtifacts =\n polyInfo && polyInfo.mtiVariants.length > 0\n ? buildMtiJoins(contract, polyInfo, state.variantName)\n : undefined;\n\n const ast = buildSelectAst(\n contract,\n tableName,\n { ...state, includes: [] },\n mtiArtifacts\n ? {\n joins: mtiArtifacts.joins,\n includeProjection: mtiArtifacts.projection,\n }\n : undefined,\n );\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params, state.annotations);\n}\n\nexport function compileRelationSelect(\n contract: Contract<SqlStorage>,\n relatedTableName: string,\n targetColumn: string,\n parentPks: readonly unknown[],\n nestedState: CollectionState,\n): SqlQueryPlan<Record<string, unknown>> {\n const inFilter: AnyExpression = BinaryExpr.in(\n ColumnRef.of(relatedTableName, targetColumn),\n ListExpression.fromValues(parentPks),\n );\n\n return compileSelect(contract, relatedTableName, {\n ...nestedState,\n includes: [],\n limit: undefined,\n offset: undefined,\n filters: [bindWhereExpr(contract, inFilter), ...nestedState.filters],\n });\n}\n\nexport function compileSelectWithIncludeStrategy(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n strategy: 'lateral' | 'correlated',\n modelName?: string,\n): SqlQueryPlan<Record<string, unknown>> {\n if (hasScalarOrCombineIncludeDescriptors(state.includes)) {\n throw new Error(\n 'single-query include strategy does not support scalar include selectors or combine()',\n );\n }\n\n // Same recursive shape as the scalar/combine gate above. A non-leaf\n // `distinct()` cannot be lowered into the single-query strategies:\n // the child SELECT would emit `SELECT DISTINCT <scalars>, json_agg(...)`,\n // and Postgres rejects equality on `json`. The dispatch path routes\n // these to multi-query; direct planner callers (tests, rich-plan\n // consumers) fail fast here instead of building an invalid plan.\n if (hasNonLeafIncludeWithDistinct(state.includes)) {\n throw new Error(\n 'single-query include strategy does not support distinct() on a non-leaf include',\n );\n }\n\n const includeJoins: JoinAst[] = [];\n const includeProjection: ProjectionItem[] = [];\n const topLevelWhere = buildStateWhere(contract, tableName, state);\n\n const polyInfo = modelName ? resolvePolymorphismInfo(contract, modelName) : undefined;\n if (polyInfo && polyInfo.mtiVariants.length > 0) {\n const mtiArtifacts = buildMtiJoins(contract, polyInfo, state.variantName);\n includeJoins.push(...mtiArtifacts.joins);\n includeProjection.push(...mtiArtifacts.projection);\n }\n\n for (const include of state.includes) {\n if (strategy === 'lateral') {\n const artifact = buildLateralIncludeArtifacts(contract, tableName, include);\n includeJoins.push(artifact.join);\n includeProjection.push(artifact.projection);\n continue;\n }\n const artifact = buildCorrelatedIncludeProjection(contract, tableName, include);\n includeProjection.push(artifact.projection);\n }\n\n const ast = buildSelectAst(\n contract,\n tableName,\n {\n ...state,\n includes: [],\n },\n {\n joins: includeJoins,\n includeProjection,\n ...ifDefined('where', topLevelWhere),\n },\n );\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params, state.annotations);\n}\n","/**\n * Collection row dispatch.\n *\n * Per-row decoding is performed upstream in `sql-runtime`'s row-yielding async\n * generator (it `await`s `decodeRow` once per row before yielding). This file\n * never calls codec query-time methods directly; it consumes plain decoded\n * cells through `executeQueryPlan` → `scope.execute(plan)` →\n * `AsyncIterableResult<Row>`. Every `for await` / `.toArray()` consumer below\n * therefore sees plain `T` values, not `Promise<T>`.\n *\n * See `packages/2-sql/5-runtime/src/codecs/decoding.ts` for the decode-once-\n * per-row contract; this file is the consumer side of that contract. See also\n * ADR 030 (codecs registry & decode boundary) and the m3 coverage in\n * `test/integration/codec-async.test.ts` and `test/codec-async.types.test-d.ts`.\n */\n\nimport type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport { isToOneCardinality, resolvePolymorphismInfo } from './collection-contract';\nimport {\n acquireRuntimeScope,\n augmentSelectionForJoinColumns,\n createRowEnvelope,\n mapPolymorphicRow,\n mapResultRows,\n mapStorageRowToModelFields,\n type RowEnvelope,\n stripHiddenMappedFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { selectIncludeStrategy } from './include-strategy';\nimport {\n hasNonLeafIncludeWithDistinct,\n hasScalarOrCombineIncludeDescriptors,\n} from './include-tree-predicates';\nimport {\n compileRelationSelect,\n compileSelect,\n compileSelectWithIncludeStrategy,\n} from './query-plan';\nimport type {\n CollectionContext,\n CollectionState,\n IncludeExpr,\n IncludeScalar,\n RelationCardinalityTag,\n} from './types';\n\nexport function dispatchCollectionRows<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName } = options;\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n\n if (state.includes.length === 0) {\n const compiled = compileSelect(contract, tableName, state, modelName);\n const source = executeQueryPlan<Record<string, unknown>>(runtime, compiled);\n const mapper = polyInfo\n ? (rawRow: Record<string, unknown>) =>\n mapPolymorphicRow(contract, modelName, polyInfo, rawRow, state.variantName) as Row\n : (rawRow: Record<string, unknown>) =>\n mapStorageRowToModelFields(contract, modelName, rawRow) as Row;\n return mapResultRows(source, mapper);\n }\n\n return dispatchWithIncludeStrategy<Row>(options);\n}\n\nfunction dispatchWithIncludeStrategy<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const strategy = selectIncludeStrategy(options.contract);\n\n // Nested row includes (depth >= 2) are emitted recursively by the\n // lateral / correlated builders — they no longer force a fallback to\n // multi-query (TML-2594). Scalar (`count`/`sum`/...) and `combine()`\n // descriptors still do, until TML-2595 lands the matching lowering;\n // the recursive scan below catches them at any depth so a nested\n // `count()` inside a row include doesn't accidentally hit the\n // throw in `compileSelectWithIncludeStrategy`.\n //\n // `distinct()` on a non-leaf include is also forced through multi-query:\n // under the single-query strategies the child SELECT carries nested\n // JSON aggregate columns, and `SELECT DISTINCT` over those fails on\n // Postgres (`json` has no equality operator). The multi-query stitcher\n // applies distinct to scalar-only child rows before grandchildren are\n // joined, which is the semantically correct behavior we preserve.\n if (\n hasScalarOrCombineIncludeDescriptors(options.state.includes) ||\n hasNonLeafIncludeWithDistinct(options.state.includes)\n ) {\n return dispatchWithMultiQueryIncludes<Row>(options);\n }\n\n switch (strategy) {\n case 'lateral':\n return dispatchWithSingleQueryIncludes<Row>({\n ...options,\n strategy: 'lateral',\n });\n case 'correlated':\n return dispatchWithSingleQueryIncludes<Row>({\n ...options,\n strategy: 'correlated',\n });\n default:\n return dispatchWithMultiQueryIncludes<Row>(options);\n }\n}\n\nfunction dispatchWithSingleQueryIncludes<Row>(options: {\n strategy: 'lateral' | 'correlated';\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName, strategy } = options;\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const parentJoinColumns = state.includes.map((include) => include.localColumn);\n const { selectedForQuery: parentSelectedForQuery, hiddenColumns: hiddenParentColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, parentJoinColumns);\n const compiled = compileSelectWithIncludeStrategy(\n contract,\n tableName,\n {\n ...state,\n selectedFields: parentSelectedForQuery,\n },\n strategy,\n modelName,\n );\n\n const parentRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n compiled,\n ).toArray();\n if (parentRowsRaw.length === 0) {\n return;\n }\n\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n const parentRows = parentRowsRaw.map((row) => {\n const mapped = polyInfo\n ? mapPolymorphicRow(contract, modelName, polyInfo, row, state.variantName)\n : mapStorageRowToModelFields(contract, modelName, row);\n return { raw: row, mapped } as RowEnvelope;\n });\n\n for (const parent of parentRows) {\n for (const include of state.includes) {\n parent.mapped[include.relationName] = decodeIncludePayload(\n contract,\n include,\n parent.raw[include.relationName],\n );\n }\n\n if (hiddenParentColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, parent.mapped, hiddenParentColumns);\n }\n }\n\n for (const row of parentRows) {\n yield row.mapped as Row;\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\nfunction dispatchWithMultiQueryIncludes<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName } = options;\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const parentJoinColumns = state.includes.map((include) => include.localColumn);\n const { selectedForQuery: parentSelectedForQuery, hiddenColumns: hiddenParentColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, parentJoinColumns);\n const parentCompiled = compileSelect(\n contract,\n tableName,\n {\n ...state,\n includes: [],\n selectedFields: parentSelectedForQuery,\n },\n modelName,\n );\n const parentRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n parentCompiled,\n ).toArray();\n if (parentRowsRaw.length === 0) {\n return;\n }\n\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n const parentRows = parentRowsRaw.map((row) => {\n const mapped = polyInfo\n ? mapPolymorphicRow(contract, modelName, polyInfo, row, state.variantName)\n : mapStorageRowToModelFields(contract, modelName, row);\n return { raw: row, mapped } as RowEnvelope;\n });\n await stitchIncludes(scope, contract, parentRows, state.includes);\n\n if (hiddenParentColumns.length > 0) {\n for (const row of parentRows) {\n stripHiddenMappedFields(contract, modelName, row.mapped, hiddenParentColumns);\n }\n }\n\n for (const row of parentRows) {\n yield row.mapped as Row;\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\nexport async function stitchIncludes(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n includes: readonly IncludeExpr[],\n): Promise<void> {\n for (const include of includes) {\n const parentJoinValues = uniqueValues(\n parentRows.map((row) => row.raw[include.localColumn]).filter((value) => value !== undefined),\n );\n\n if (parentJoinValues.length === 0) {\n assignEmptyIncludeResult(parentRows, include);\n continue;\n }\n\n if (include.combine) {\n await stitchCombinedInclude(scope, contract, parentRows, include, parentJoinValues);\n continue;\n }\n\n if (include.scalar) {\n await stitchScalarInclude(\n scope,\n contract,\n parentRows,\n include,\n include.scalar,\n parentJoinValues,\n );\n continue;\n }\n\n await stitchRowInclude(scope, contract, parentRows, include, include.nested, parentJoinValues);\n }\n}\n\nasync function stitchCombinedInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const branches = include.combine ?? {};\n\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = {};\n }\n\n for (const [branchName, branch] of Object.entries(branches)) {\n if (branch.kind === 'rows') {\n const rowsByParent = await resolveRowsByParent(\n scope,\n contract,\n include,\n branch.state,\n parentJoinValues,\n );\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const relatedRows = rowsByParent.get(parentJoinValue) ?? [];\n const combined = parent.mapped[include.relationName] as Record<string, unknown>;\n combined[branchName] = coerceIncludeResult(relatedRows, branch.state, include.cardinality);\n }\n continue;\n }\n\n const scalarByParent = await resolveScalarByParent(\n scope,\n contract,\n include,\n branch.selector,\n parentJoinValues,\n );\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const combined = parent.mapped[include.relationName] as Record<string, unknown>;\n combined[branchName] =\n scalarByParent.get(parentJoinValue) ?? emptyScalarResult(branch.selector.fn);\n }\n }\n}\n\nasync function stitchScalarInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n selector: IncludeScalar<unknown>,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const scalarByParent = await resolveScalarByParent(\n scope,\n contract,\n include,\n selector,\n parentJoinValues,\n );\n\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n parent.mapped[include.relationName] =\n scalarByParent.get(parentJoinValue) ?? emptyScalarResult(selector.fn);\n }\n}\n\nasync function stitchRowInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n state: CollectionState,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const rowsByParent = await resolveRowsByParent(scope, contract, include, state, parentJoinValues);\n\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const relatedRows = rowsByParent.get(parentJoinValue) ?? [];\n parent.mapped[include.relationName] = coerceIncludeResult(\n relatedRows,\n state,\n include.cardinality,\n );\n }\n}\n\nasync function resolveRowsByParent(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n state: CollectionState,\n parentJoinValues: readonly unknown[],\n): Promise<Map<unknown, Record<string, unknown>[]>> {\n // Multi-query stitching reads `child.raw[grandchildInclude.localColumn]`\n // for every immediate include in `state.includes` to bucket children by\n // join value. A user-supplied `.select(...)` on the child that omits any\n // of those join columns would silently yield `undefined` for the join\n // value, producing empty nested arrays at depth >= 2. Force every\n // direct nested include's `localColumn` into the child's selected set\n // alongside `include.targetColumn` so the stitcher always sees a\n // defined join value. The next level of recursion (when grandchild\n // stitching itself dispatches through `resolveRowsByParent`) repeats\n // this same augmentation for its own children.\n const nestedJoinColumns = state.includes.map((nested) => nested.localColumn);\n const requiredChildColumns = Array.from(\n new Set<string>([include.targetColumn, ...nestedJoinColumns]),\n );\n const { selectedForQuery: childSelectedForQuery, hiddenColumns: hiddenChildColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, requiredChildColumns);\n\n const childCompiled = compileRelationSelect(\n contract,\n include.relatedTableName,\n include.targetColumn,\n parentJoinValues,\n {\n ...state,\n selectedFields: childSelectedForQuery,\n },\n );\n const childRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n childCompiled,\n ).toArray();\n const childRows = childRowsRaw.map((row) =>\n createRowEnvelope(contract, include.relatedModelName, row),\n );\n\n if (state.includes.length > 0) {\n await stitchIncludes(scope, contract, childRows, state.includes);\n }\n\n const childByParentJoin = new Map<unknown, Record<string, unknown>[]>();\n for (const child of childRows) {\n const joinValue = child.raw[include.targetColumn];\n\n if (hiddenChildColumns.length > 0) {\n stripHiddenMappedFields(contract, include.relatedModelName, child.mapped, hiddenChildColumns);\n }\n\n let bucket = childByParentJoin.get(joinValue);\n if (!bucket) {\n bucket = [];\n childByParentJoin.set(joinValue, bucket);\n }\n bucket.push(child.mapped);\n }\n\n return childByParentJoin;\n}\n\nasync function resolveScalarByParent(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n selector: IncludeScalar<unknown>,\n parentJoinValues: readonly unknown[],\n): Promise<Map<unknown, unknown>> {\n const requiredColumns = selector.column\n ? [include.targetColumn, selector.column]\n : [include.targetColumn];\n const { selectedForQuery } = augmentSelectionForJoinColumns(\n selector.state.selectedFields,\n requiredColumns,\n );\n\n const childCompiled = compileRelationSelect(\n contract,\n include.relatedTableName,\n include.targetColumn,\n parentJoinValues,\n {\n ...selector.state,\n selectedFields: selectedForQuery,\n includes: [],\n },\n );\n const childRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n childCompiled,\n ).toArray();\n\n const rowsByParent = new Map<unknown, Record<string, unknown>[]>();\n for (const row of childRowsRaw) {\n const joinValue = row[include.targetColumn];\n let bucket = rowsByParent.get(joinValue);\n if (!bucket) {\n bucket = [];\n rowsByParent.set(joinValue, bucket);\n }\n bucket.push(row);\n }\n\n const scalarByParent = new Map<unknown, unknown>();\n for (const [joinValue, rows] of rowsByParent) {\n const scopedRows = slicePerParent(rows, selector.state);\n scalarByParent.set(joinValue, computeScalarValue(selector, scopedRows));\n }\n\n return scalarByParent;\n}\n\nfunction uniqueValues(values: unknown[]): unknown[] {\n return [...new Set(values)];\n}\n\n/**\n * Decode a single-query include payload from a parent row's raw cell\n * into the model-shaped value that downstream consumers see. Recurses\n * through `include.nested.includes` so depth-2+ trees — emitted by the\n * recursive lateral / correlated builders — are decoded symmetrically.\n *\n * The shape produced by the SQL side is one JSON column per top-level\n * include; values nested inside that JSON are already-parsed JS values\n * after the outer `JSON.parse`, so `parseIncludedRows` recognises both\n * the string (top-level) and array (nested) forms.\n */\nfunction decodeIncludePayload(\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n raw: unknown,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n const rawChildren = parseIncludedRows(raw);\n const mappedChildren = rawChildren.map((childRow) => {\n const mapped = mapStorageRowToModelFields(contract, include.relatedModelName, childRow);\n for (const nestedInclude of include.nested.includes) {\n // Defence in depth: the dispatch gate filters scalar/combine at\n // any depth via `hasScalarOrCombineIncludeDescriptors`. This branch\n // is unreachable in production but documents the contract the\n // recursion relies on.\n if (nestedInclude.scalar || nestedInclude.combine) {\n throw new Error(\n 'single-query include strategy does not support nested scalar include selectors or combine()',\n );\n }\n mapped[nestedInclude.relationName] = decodeIncludePayload(\n contract,\n nestedInclude,\n mapped[nestedInclude.relationName],\n );\n }\n return mapped;\n });\n return coerceSingleQueryIncludeResult(mappedChildren, include.cardinality);\n}\n\nfunction assignEmptyIncludeResult(parentRows: RowEnvelope[], include: IncludeExpr): void {\n if (include.combine) {\n for (const parent of parentRows) {\n const combined: Record<string, unknown> = {};\n for (const [branchName, branch] of Object.entries(include.combine)) {\n combined[branchName] =\n branch.kind === 'rows'\n ? emptyIncludeResult(include.cardinality)\n : emptyScalarResult(branch.selector.fn);\n }\n parent.mapped[include.relationName] = combined;\n }\n return;\n }\n\n if (include.scalar) {\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = emptyScalarResult(include.scalar.fn);\n }\n return;\n }\n\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = emptyIncludeResult(include.cardinality);\n }\n}\n\nfunction parseIncludedRows(value: unknown): Record<string, unknown>[] {\n if (value === null || value === undefined) {\n return [];\n }\n\n const parsed = parseIncludePayload(value);\n if (!Array.isArray(parsed)) {\n return [];\n }\n\n const rows: Record<string, unknown>[] = [];\n for (const item of parsed) {\n if (typeof item !== 'object' || item === null) {\n continue;\n }\n rows.push({ ...(item as Record<string, unknown>) });\n }\n\n return rows;\n}\n\nfunction parseIncludePayload(value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return [];\n }\n}\n\nfunction coerceSingleQueryIncludeResult(\n rows: Record<string, unknown>[],\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n return isToOneCardinality(cardinality) ? (rows[0] ?? null) : rows;\n}\n\nfunction slicePerParent(\n rows: Record<string, unknown>[],\n state: CollectionState,\n): Record<string, unknown>[] {\n const offset = state.offset ?? 0;\n if (state.limit === undefined) {\n return rows.slice(offset);\n }\n return rows.slice(offset, offset + state.limit);\n}\n\nfunction emptyIncludeResult(\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n return isToOneCardinality(cardinality) ? null : [];\n}\n\nfunction coerceIncludeResult(\n rows: Record<string, unknown>[],\n state: CollectionState,\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n const sliced = slicePerParent(rows, state);\n return isToOneCardinality(cardinality) ? (sliced[0] ?? null) : sliced;\n}\n\nfunction emptyScalarResult(fn: IncludeScalar<unknown>['fn']): number | null {\n return fn === 'count' ? 0 : null;\n}\n\nfunction computeScalarValue(\n selector: IncludeScalar<unknown>,\n rows: readonly Record<string, unknown>[],\n): number | null {\n if (selector.fn === 'count') {\n return rows.length;\n }\n\n const column = selector.column;\n if (!column) {\n return null;\n }\n\n const numericValues = rows\n .map((row) => coerceNumericValue(row[column]))\n .filter((value): value is number => value !== null);\n\n if (numericValues.length === 0) {\n return null;\n }\n\n if (selector.fn === 'sum') {\n return numericValues.reduce((total, value) => total + value, 0);\n }\n\n if (selector.fn === 'avg') {\n const total = numericValues.reduce((sum, value) => sum + value, 0);\n return total / numericValues.length;\n }\n\n if (selector.fn === 'min') {\n return Math.min(...numericValues);\n }\n\n if (selector.fn === 'max') {\n return Math.max(...numericValues);\n }\n\n return null;\n}\n\nfunction coerceNumericValue(value: unknown): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return Number(value);\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isNaN(numeric) ? null : numeric;\n }\n\n return null;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { stitchIncludes } from './collection-dispatch';\nimport {\n acquireRuntimeScope,\n createRowEnvelope,\n mapResultRows,\n mapStorageRowToModelFields,\n stripHiddenMappedFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport type { CollectionContext, IncludeExpr } from './types';\n\ninterface DispatchMutationRowsOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly compiled: SqlQueryPlan<Record<string, unknown>>;\n readonly modelName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n}\n\nexport function dispatchMutationRows<Row>(\n options: DispatchMutationRowsOptions<Row>,\n): AsyncIterableResult<Row> {\n const { contract, runtime, compiled, modelName, includes, hiddenColumns, mapRow } = options;\n\n if (includes.length === 0) {\n const source = executeQueryPlan<Record<string, unknown>>(runtime, compiled);\n\n return mapResultRows(source, (rawRow) => {\n const mapped = mapStorageRowToModelFields(contract, modelName, rawRow);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, mapped, hiddenColumns);\n }\n return mapRow(mapped);\n });\n }\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const rawRows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n if (rawRows.length === 0) {\n return;\n }\n\n const wrappedRows = rawRows.map((row) => createRowEnvelope(contract, modelName, row));\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n for (const row of wrappedRows) {\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, row.mapped, hiddenColumns);\n }\n yield mapRow(row.mapped);\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\ninterface DispatchSplitMutationRowsOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly plans: ReadonlyArray<SqlQueryPlan<Record<string, unknown>>>;\n readonly tableName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n}\n\nexport function dispatchSplitMutationRows<Row>(\n options: DispatchSplitMutationRowsOptions<Row>,\n): AsyncIterableResult<Row> {\n const { contract, runtime, plans, tableName, includes, hiddenColumns, mapRow } = options;\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n if (includes.length > 0) {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const allRawRows: Record<string, unknown>[] = [];\n for (const plan of plans) {\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, plan).toArray();\n allRawRows.push(...rows);\n }\n if (allRawRows.length === 0) return;\n\n const wrappedRows = allRawRows.map((row) => createRowEnvelope(contract, tableName, row));\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n for (const row of wrappedRows) {\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, tableName, row.mapped, hiddenColumns);\n }\n yield mapRow(row.mapped);\n }\n } finally {\n if (release) await release();\n }\n } else {\n for (const plan of plans) {\n const rows = await executeQueryPlan<Record<string, unknown>>(runtime, plan).toArray();\n for (const rawRow of rows) {\n const mapped = mapStorageRowToModelFields(contract, tableName, rawRow);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, tableName, mapped, hiddenColumns);\n }\n yield mapRow(mapped);\n }\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\ninterface ExecuteSingleMutationOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly compiled: SqlQueryPlan<Record<string, unknown>>;\n readonly modelName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n readonly onMissingRowMessage: string;\n}\n\nexport async function executeMutationReturningSingleRow<Row>(\n options: ExecuteSingleMutationOptions<Row>,\n): Promise<Row | null> {\n const {\n contract,\n runtime,\n compiled,\n modelName,\n includes,\n hiddenColumns,\n mapRow,\n onMissingRowMessage,\n } = options;\n\n if (includes.length === 0) {\n const rows = await executeQueryPlan<Record<string, unknown>>(runtime, compiled).toArray();\n const first = rows[0];\n if (!first) {\n return null;\n }\n\n const mapped = mapStorageRowToModelFields(contract, modelName, first);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, mapped, hiddenColumns);\n }\n return mapRow(mapped);\n }\n\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n const first = rows[0];\n if (!first) {\n return null;\n }\n\n const wrappedRows = [createRowEnvelope(contract, modelName, first)];\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n const result = wrappedRows[0];\n if (!result) {\n throw new Error(onMissingRowMessage);\n }\n\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, result.mapped, hiddenColumns);\n }\n\n return mapRow(result.mapped);\n } finally {\n if (release) {\n await release();\n }\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n LiteralExpr,\n NullCheckExpr,\n OrExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { getFieldToColumnMap, modelOf, resolveModelTableName } from './collection-contract';\nimport type { ShorthandWhereFilter } from './types';\n\nexport function and(...exprs: AnyExpression[]): AndExpr {\n return AndExpr.of(exprs);\n}\n\nexport function or(...exprs: AnyExpression[]): OrExpr {\n return OrExpr.of(exprs);\n}\n\nexport function not(expr: AnyExpression): AnyExpression {\n return expr.not();\n}\n\nexport function all(): AnyExpression {\n return AndExpr.true();\n}\n\nexport function shorthandToWhereExpr<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(\n context: ExecutionContext<TContract>,\n modelName: ModelName,\n filters: ShorthandWhereFilter<TContract, ModelName>,\n): AnyExpression | undefined {\n const contract = context.contract;\n const tableName = resolveModelTableName(contract, modelName);\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n\n const exprs: AnyExpression[] = [];\n for (const [fieldName, value] of Object.entries(filters)) {\n if (value === undefined) {\n continue;\n }\n\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n const left = ColumnRef.of(tableName, columnName);\n\n if (value === null) {\n exprs.push(NullCheckExpr.isNull(left));\n continue;\n }\n\n assertFieldHasEqualityTrait(context, modelName, fieldName);\n exprs.push(BinaryExpr.eq(left, LiteralExpr.of(value)));\n }\n\n if (exprs.length === 0) {\n return undefined;\n }\n\n return exprs.length === 1 ? exprs[0] : and(...exprs);\n}\n\nfunction assertFieldHasEqualityTrait(\n context: ExecutionContext,\n modelName: string,\n fieldName: string,\n): void {\n const fieldType = modelOf(context.contract, modelName)?.fields?.[fieldName]?.type;\n const codecId = fieldType?.kind === 'scalar' ? fieldType.codecId : undefined;\n const traits = codecId ? (context.codecDescriptors.descriptorFor(codecId)?.traits ?? []) : [];\n if (!traits.includes('equality')) {\n throw new Error(\n `Shorthand filter on \"${modelName}.${fieldName}\": field does not support equality comparisons`,\n );\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type {\n AnnotationValue,\n MetaBuilder,\n OperationKind,\n} from '@prisma-next/framework-components/runtime';\nimport { createMetaBuilder } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AggregateExpr,\n type AnyExpression,\n BinaryExpr,\n type BinaryOp,\n ColumnRef,\n LiteralExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SimplifyDeep } from '@prisma-next/utils/simplify-deep';\nimport { createAggregateBuilder, isAggregateSelector } from './aggregate-builder';\nimport { getFieldToColumnMap } from './collection-contract';\nimport { mapStorageRowToModelFields } from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { compileGroupedAggregate, mergeAnnotations } from './query-plan';\nimport type {\n AggregateBuilder,\n AggregateResult,\n AggregateSpec,\n CollectionContext,\n DefaultModelRow,\n HavingBuilder,\n HavingComparisonMethods,\n} from './types';\nimport { combineWhereExprs } from './where-utils';\n\ninterface GroupedCollectionInit {\n readonly tableName: string;\n readonly baseFilters: readonly AnyExpression[];\n readonly groupByFields: readonly string[];\n readonly groupByColumns: readonly string[];\n readonly havingFilters: readonly AnyExpression[];\n}\n\ntype GroupByFieldName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = keyof DefaultModelRow<TContract, ModelName> & string;\n\nexport class GroupedCollection<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n GroupFields extends readonly GroupByFieldName<TContract, ModelName>[],\n> {\n readonly ctx: CollectionContext<TContract>;\n private readonly contract: TContract;\n readonly modelName: ModelName;\n readonly tableName: string;\n readonly baseFilters: readonly AnyExpression[];\n readonly groupByFields: readonly string[];\n readonly groupByColumns: readonly string[];\n readonly havingFilters: readonly AnyExpression[];\n\n constructor(\n ctx: CollectionContext<TContract>,\n modelName: ModelName,\n options: GroupedCollectionInit,\n ) {\n this.ctx = ctx;\n this.contract = ctx.context.contract;\n this.modelName = modelName;\n this.tableName = options.tableName;\n this.baseFilters = options.baseFilters;\n this.groupByFields = options.groupByFields;\n this.groupByColumns = options.groupByColumns;\n this.havingFilters = options.havingFilters;\n }\n\n having(\n predicate: (having: HavingBuilder<TContract, ModelName>) => AnyExpression,\n ): GroupedCollection<TContract, ModelName, GroupFields> {\n const havingExpr = predicate(\n createHavingBuilder(this.contract, this.modelName, this.tableName),\n );\n return new GroupedCollection(this.ctx, this.modelName, {\n tableName: this.tableName,\n baseFilters: this.baseFilters,\n groupByFields: this.groupByFields,\n groupByColumns: this.groupByColumns,\n havingFilters: [...this.havingFilters, havingExpr],\n }) as GroupedCollection<TContract, ModelName, GroupFields>;\n }\n\n /**\n * Read terminal: run a grouped aggregate query.\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` for attaching typed annotations.\n * Annotations are merged into the compiled plan's `meta.annotations`.\n */\n async aggregate<Spec extends AggregateSpec>(\n fn: (aggregate: AggregateBuilder<TContract, ModelName>) => Spec,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<\n Array<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, GroupFields[number]> & AggregateResult<Spec>\n >\n >\n > {\n const aggregateSpec = fn(createAggregateBuilder(this.contract, this.modelName));\n const aggregateEntries = Object.entries(aggregateSpec);\n if (aggregateEntries.length === 0) {\n throw new Error('groupBy().aggregate() requires at least one aggregation selector');\n }\n\n for (const [alias, selector] of aggregateEntries) {\n if (!isAggregateSelector(selector)) {\n throw new Error(`groupBy().aggregate() selector \"${alias}\" is invalid`);\n }\n }\n\n let annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined;\n if (configure !== undefined) {\n const meta = createMetaBuilder('read', 'groupBy.aggregate');\n configure(meta);\n if (meta.annotations.size > 0) {\n annotationsMap = meta.annotations;\n }\n }\n\n const compiled = mergeAnnotations(\n compileGroupedAggregate(\n this.contract,\n this.tableName,\n this.baseFilters,\n this.groupByColumns,\n aggregateSpec,\n combineWhereExprs(this.havingFilters),\n ),\n annotationsMap,\n );\n const rows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n compiled,\n ).toArray();\n\n return rows.map((row) => {\n const mapped = mapStorageRowToModelFields(this.contract, this.modelName, row);\n for (const [alias, selector] of aggregateEntries) {\n mapped[alias] = coerceAggregateValue(selector.fn, row[alias]);\n }\n return mapped;\n }) as Array<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, GroupFields[number]> & AggregateResult<Spec>\n >\n >;\n }\n}\n\nfunction createHavingBuilder<TContract extends Contract<SqlStorage>, ModelName extends string>(\n contract: TContract,\n modelName: ModelName,\n tableName: string,\n): HavingBuilder<TContract, ModelName> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const createMetricExpr = (\n fn: Exclude<AggregateExpr['fn'], 'count'>,\n fieldName: string,\n ): AggregateExpr =>\n new AggregateExpr(fn, ColumnRef.of(tableName, fieldToColumn[fieldName] ?? fieldName));\n\n return {\n count() {\n return createHavingComparisonMethods<number>(AggregateExpr.count());\n },\n sum(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('sum', field as string));\n },\n avg(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('avg', field as string));\n },\n min(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('min', field as string));\n },\n max(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('max', field as string));\n },\n };\n}\n\nfunction createHavingComparisonMethods<T extends number | null>(\n metric: AggregateExpr,\n): HavingComparisonMethods<T> {\n const buildBinaryExpr = (op: BinaryOp, value: unknown): AnyExpression =>\n new BinaryExpr(op, metric, LiteralExpr.of(value));\n\n return {\n eq(value) {\n return buildBinaryExpr('eq', value);\n },\n neq(value) {\n return buildBinaryExpr('neq', value);\n },\n gt(value) {\n return buildBinaryExpr('gt', value);\n },\n lt(value) {\n return buildBinaryExpr('lt', value);\n },\n gte(value) {\n return buildBinaryExpr('gte', value);\n },\n lte(value) {\n return buildBinaryExpr('lte', value);\n },\n };\n}\n\nfunction coerceAggregateValue(fn: string, value: unknown): unknown {\n if (value === null) {\n return null;\n }\n\n if (value === undefined) {\n return fn === 'count' ? 0 : null;\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return Number(value);\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isNaN(numeric) ? value : numeric;\n }\n\n return value;\n}\n","import type { StripRowType } from './collection-internal-types';\nimport type { CollectionState, IncludeCombine, IncludeCombineBranch, IncludeScalar } from './types';\n\ninterface CollectionStateCarrier {\n readonly state: CollectionState;\n}\n\nconst aggregateFns = new Set(['count', 'sum', 'avg', 'min', 'max']);\n\nexport function createIncludeScalar<Result>(\n fn: IncludeScalar<Result>['fn'],\n state: CollectionState,\n column?: string,\n): IncludeScalar<Result> {\n return {\n kind: 'includeScalar',\n fn,\n state,\n ...(column !== undefined ? { column } : {}),\n } satisfies StripRowType<IncludeScalar<Result>> as IncludeScalar<Result>;\n}\n\nexport function createIncludeCombine<ResultShape extends Record<string, unknown>>(\n branches: Record<string, IncludeCombineBranch>,\n): IncludeCombine<ResultShape> {\n return {\n kind: 'includeCombine',\n branches,\n } satisfies StripRowType<IncludeCombine<ResultShape>> as IncludeCombine<ResultShape>;\n}\n\nexport function isIncludeScalar(value: unknown): value is IncludeScalar<unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n kind?: unknown;\n fn?: unknown;\n state?: unknown;\n };\n\n return (\n candidate.kind === 'includeScalar' &&\n typeof candidate.fn === 'string' &&\n aggregateFns.has(candidate.fn) &&\n isCollectionState(candidate.state)\n );\n}\n\nexport function isIncludeCombine(value: unknown): value is IncludeCombine<Record<string, unknown>> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n kind?: unknown;\n branches?: unknown;\n };\n\n if (candidate.kind !== 'includeCombine') {\n return false;\n }\n\n if (typeof candidate.branches !== 'object' || candidate.branches === null) {\n return false;\n }\n\n return true;\n}\n\nexport function isCollectionStateCarrier(value: unknown): value is CollectionStateCarrier {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as { state?: unknown };\n return isCollectionState(candidate.state);\n}\n\nfunction isCollectionState(value: unknown): value is CollectionState {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n filters?: unknown;\n includes?: unknown;\n };\n\n return Array.isArray(candidate.filters) && Array.isArray(candidate.includes);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type {\n ExtractCodecTypes,\n ExtractQueryOperationTypes,\n SqlStorage,\n StorageColumn,\n StorageTable,\n} from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n type BinaryOp,\n type CodecRef,\n type CodecTrait,\n ListExpression,\n NullCheckExpr,\n OrderByItem,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { ComputeColumnJsType, RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport type { RowSelection } from './collection-internal-types';\n\nexport type AggregateFn = 'count' | 'sum' | 'avg' | 'min' | 'max';\n\nexport interface IncludeScalar<Result> extends RowSelection<Result> {\n readonly kind: 'includeScalar';\n readonly fn: AggregateFn;\n readonly column?: string;\n readonly state: CollectionState;\n}\n\nexport interface IncludeRowsBranch {\n readonly kind: 'rows';\n readonly state: CollectionState;\n}\n\nexport interface IncludeScalarBranch {\n readonly kind: 'scalar';\n readonly selector: IncludeScalar<unknown>;\n}\n\nexport type IncludeCombineBranch = IncludeRowsBranch | IncludeScalarBranch;\n\nexport interface IncludeCombine<ResultShape extends Record<string, unknown>>\n extends RowSelection<ResultShape> {\n readonly kind: 'includeCombine';\n readonly branches: Readonly<Record<string, IncludeCombineBranch>>;\n}\n\nexport interface IncludeExpr {\n readonly relationName: string;\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly targetColumn: string;\n readonly localColumn: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly nested: CollectionState;\n readonly scalar: IncludeScalar<unknown> | undefined;\n readonly combine: Readonly<Record<string, IncludeCombineBranch>> | undefined;\n}\n\nexport interface CollectionState {\n readonly filters: readonly AnyExpression[];\n readonly includes: readonly IncludeExpr[];\n readonly orderBy: readonly OrderByItem[] | undefined;\n readonly cursor: Readonly<Record<string, unknown>> | undefined;\n readonly distinct: readonly string[] | undefined;\n readonly distinctOn: readonly string[] | undefined;\n readonly selectedFields: readonly string[] | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n readonly variantName: string | undefined;\n /**\n * Annotations attached to this query at terminal-call time.\n * Populated transiently by terminal methods (`first`, `all`, `create`,\n * etc.) just before dispatch — `Collection` itself has no chainable\n * `.annotate()`. Stored as a `Map<namespace, AnnotationValue>` so\n * duplicate namespaces last-write-win. Empty on a fresh state.\n */\n readonly annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n}\n\nexport function emptyState(): CollectionState {\n return {\n filters: [],\n includes: [],\n orderBy: undefined,\n cursor: undefined,\n distinct: undefined,\n distinctOn: undefined,\n selectedFields: undefined,\n limit: undefined,\n offset: undefined,\n variantName: undefined,\n annotations: new Map(),\n };\n}\n\nexport interface CollectionTypeState {\n readonly hasOrderBy: boolean;\n readonly hasWhere: boolean;\n readonly hasUniqueFilter: boolean;\n readonly variantName: string | undefined;\n}\n\nexport type RelationCardinalityTag = '1:1' | 'N:1' | '1:N' | 'M:N';\n\nexport type DefaultCollectionTypeState = {\n readonly hasOrderBy: false;\n readonly hasWhere: false;\n readonly hasUniqueFilter: false;\n readonly variantName: undefined;\n};\n\nexport interface RuntimeConnection extends RuntimeScope {\n release?(): Promise<void>;\n transaction?(): Promise<RuntimeTransaction>;\n}\n\nexport interface RuntimeTransaction extends RuntimeScope {\n commit?(): Promise<void>;\n rollback?(): Promise<void>;\n}\n\nexport interface RuntimeQueryable extends RuntimeScope {\n connection?(): Promise<RuntimeConnection>;\n transaction?(): Promise<RuntimeTransaction>;\n}\n\nexport interface CollectionContext<TContract extends Contract<SqlStorage>> {\n readonly runtime: RuntimeQueryable;\n readonly context: ExecutionContext<TContract>;\n}\n\nexport type ComparisonMethodFns<T> = {\n eq(value: T): AnyExpression;\n neq(value: T): AnyExpression;\n gt(value: T): AnyExpression;\n lt(value: T): AnyExpression;\n gte(value: T): AnyExpression;\n lte(value: T): AnyExpression;\n like(pattern: string): AnyExpression;\n in(values: readonly T[]): AnyExpression;\n notIn(values: readonly T[]): AnyExpression;\n isNull(): AnyExpression;\n isNotNull(): AnyExpression;\n asc(): OrderByItem;\n desc(): OrderByItem;\n};\n\n/**\n * Trait-gated comparison methods. Only methods whose required traits are all present in `Traits` are included.\n *\n * - `traits: []` → always available (isNull, isNotNull)\n */\nexport type ComparisonMethods<T, Traits> = {\n [K in keyof ComparisonMethodsMeta as [ComparisonMethodsMeta[K]['traits'][number]] extends [Traits]\n ? K\n : never]: ComparisonMethodFns<T>[K];\n};\n\ntype QueryOperationReturnTraits<\n Returns,\n TCodecTypes extends Record<string, unknown>,\n> = Returns extends { readonly codecId: infer Id extends string }\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly traits: infer Traits }\n ? Traits\n : never\n : never\n : never;\n\ntype QueryOperationReturnJsType<\n Returns,\n TCodecTypes extends Record<string, unknown>,\n> = Returns extends { readonly codecId: infer Id extends string; readonly nullable: infer N }\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly output: infer O }\n ? N extends true\n ? O | null\n : O\n : unknown\n : unknown\n : unknown;\n\ntype IsBooleanReturn<Returns, TCodecTypes extends Record<string, unknown>> = Returns extends {\n readonly codecId: infer Id extends string;\n}\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly traits: infer T }\n ? 'boolean' extends T\n ? true\n : false\n : false\n : false\n : false;\n\n/**\n * Extract the `{codecId, nullable}` spec carried inside an `Expression<T>`. Used to recover the op's return spec from its impl signature so the pre-existing `QueryOperationReturn*` helpers can consume it unchanged.\n */\ntype SpecOf<E> = E extends Expression<infer T> ? T : never;\n\ntype ImplReturnSpec<Impl> = Impl extends (...args: never[]) => infer Ret ? SpecOf<Ret> : never;\n\n/**\n * Builds the ORM column-method signature for an operation.\n *\n * - User args: drops the impl's first parameter (the column is bound at access time) and forwards the rest unchanged. Each remaining arg keeps its authored `CodecExpression` / `TraitExpression` shape — so callers can pass a raw JS value, another column handle (which itself implements `Expression`), or `null` when nullable.\n * - Return: predicate ops (boolean-traited return) yield `AnyExpression`; non-predicate ops yield `ComparisonMethods<JsType, Traits>` of the return codec.\n */\ntype QueryOperationMethod<Op, TCodecTypes extends Record<string, unknown>> = Op extends {\n readonly impl: (...args: never[]) => unknown;\n}\n ? Op['impl'] extends (first: never, ...rest: infer UserArgs extends readonly unknown[]) => unknown\n ? ImplReturnSpec<Op['impl']> extends infer Returns\n ? IsBooleanReturn<Returns, TCodecTypes> extends true\n ? (...args: UserArgs) => AnyExpression\n : (\n ...args: UserArgs\n ) => ComparisonMethods<\n QueryOperationReturnJsType<Returns, TCodecTypes>,\n QueryOperationReturnTraits<Returns, TCodecTypes>\n >\n : never\n : never\n : never;\n\n/**\n * Tests whether an operation's `self` dispatch hint reaches a field with the given codec identity. Codec hints match by identity; trait hints match when every required trait is present in the field codec's trait set.\n */\ntype OpMatchesField<Op, CodecId extends string, CT extends Record<string, unknown>> = Op extends {\n readonly self: infer Self;\n}\n ? Self extends { readonly codecId: CodecId }\n ? true\n : Self extends { readonly traits: infer RequiredTraits extends readonly string[] }\n ? CodecId extends keyof CT\n ? CT[CodecId] extends { readonly traits: infer FieldTraits }\n ? [RequiredTraits[number]] extends [FieldTraits]\n ? true\n : false\n : false\n : false\n : false\n : false;\n\ntype FieldOperations<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldCodecId<TContract, ModelName, FieldName> extends infer CodecId extends string\n ? ExtractQueryOperationTypes<TContract> extends infer AllOps\n ? {\n [OpName in keyof AllOps & string as OpMatchesField<\n AllOps[OpName],\n CodecId,\n ExtractCodecTypes<TContract>\n > extends true\n ? OpName\n : never]: QueryOperationMethod<AllOps[OpName], ExtractCodecTypes<TContract>>;\n }\n : unknown\n : unknown;\n\nfunction param(codec: CodecRef | undefined, value: unknown): ParamRef {\n if (codec === undefined) return ParamRef.of(value);\n return ParamRef.of(value, { codec });\n}\n\nfunction paramList(codec: CodecRef | undefined, values: readonly unknown[]): ListExpression {\n return ListExpression.of(values.map((value) => param(codec, value)));\n}\n\n// never[] is intentional: factories have heterogeneous signatures (value: unknown, values: readonly unknown[], pattern: string, etc.) but are only called through the typed ComparisonMethodFns interface, never through this type directly.\ntype MethodFactory = (\n left: AnyExpression,\n codec: CodecRef | undefined,\n) => (...args: never[]) => unknown;\n\ntype ComparisonMethodMeta = {\n readonly traits: readonly CodecTrait[];\n readonly create: MethodFactory;\n};\n\nfunction scalarComparisonMethod(op: BinaryOp) {\n return ((left, codec) => (value: unknown) => {\n if (value === null && (op === 'eq' || op === 'neq')) {\n return op === 'eq' ? NullCheckExpr.isNull(left) : NullCheckExpr.isNotNull(left);\n }\n return new BinaryExpr(op, left, param(codec, value));\n }) satisfies MethodFactory;\n}\n\nfunction listComparisonMethod(op: BinaryOp) {\n return ((left, codec) => (values: readonly unknown[]) =>\n new BinaryExpr(op, left, paramList(codec, values))) satisfies MethodFactory;\n}\n\n/**\n * Declares trait requirements and runtime factory for each comparison method.\n *\n * - `traits: []` means \"no trait required\" — always available\n * - Multi-trait: `traits: ['equality', 'order']` means BOTH traits are required\n */\nexport const COMPARISON_METHODS_META = {\n eq: {\n traits: ['equality'],\n create: scalarComparisonMethod('eq'),\n },\n neq: {\n traits: ['equality'],\n create: scalarComparisonMethod('neq'),\n },\n in: {\n traits: ['equality'],\n create: listComparisonMethod('in'),\n },\n notIn: {\n traits: ['equality'],\n create: listComparisonMethod('notIn'),\n },\n gt: {\n traits: ['order'],\n create: scalarComparisonMethod('gt'),\n },\n lt: {\n traits: ['order'],\n create: scalarComparisonMethod('lt'),\n },\n gte: {\n traits: ['order'],\n create: scalarComparisonMethod('gte'),\n },\n lte: {\n traits: ['order'],\n create: scalarComparisonMethod('lte'),\n },\n like: {\n traits: ['textual'],\n create: scalarComparisonMethod('like'),\n },\n asc: {\n traits: ['order'],\n create: (left) => () => OrderByItem.asc(left),\n },\n desc: {\n traits: ['order'],\n create: (left) => () => OrderByItem.desc(left),\n },\n isNull: {\n traits: [],\n create: (left) => () => NullCheckExpr.isNull(left),\n },\n isNotNull: {\n traits: [],\n create: (left) => () => NullCheckExpr.isNotNull(left),\n },\n} as const satisfies Record<keyof ComparisonMethodFns<unknown>, ComparisonMethodMeta>;\n\ntype ComparisonMethodsMeta = typeof COMPARISON_METHODS_META;\n\nexport type RelationPredicate<TContract extends Contract<SqlStorage>, ModelName extends string> = (\n model: ModelAccessor<TContract, ModelName>,\n) => AnyExpression;\n\nexport type RelationPredicateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = RelationPredicate<TContract, ModelName> | Record<string, unknown>;\n\nexport type RelationFilterAccessor<\n TContract extends Contract<SqlStorage>,\n RelatedModelName extends string,\n> = {\n some(predicate?: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n every(predicate: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n none(predicate?: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n};\n\ntype ScalarModelAccessor<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof FieldsOf<TContract, ModelName> & string]: Expression<{\n codecId: FieldCodecId<TContract, ModelName, K>;\n nullable: FieldNullable<TContract, ModelName, K>;\n }> &\n ComparisonMethods<FieldJsType<TContract, ModelName, K>, FieldTraits<TContract, ModelName, K>> &\n FieldOperations<TContract, ModelName, K>;\n};\n\ntype RelationModelAccessor<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in RelationNames<TContract, ModelName>]: RelationFilterAccessor<\n TContract,\n RelatedModelName<TContract, ModelName, K> & string\n >;\n};\n\nexport type ModelAccessor<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ScalarModelAccessor<TContract, ModelName> & RelationModelAccessor<TContract, ModelName>;\n\nexport type DefaultModelRow<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof FieldsOf<TContract, ModelName> & string]: FieldJsType<TContract, ModelName, K>;\n};\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\n\ntype VariantRow<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer DiscField extends string };\n readonly variants: infer V;\n }\n ? V extends Record<string, { readonly value: string }>\n ? {\n [VK in keyof V]: VK extends string & keyof ModelsOf<TContract>\n ? Simplify<\n Omit<DefaultModelRow<TContract, ModelName>, DiscField> &\n DefaultModelRow<TContract, VK> &\n Record<DiscField, V[VK]['value']>\n >\n : never;\n }[keyof V]\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>;\n\nexport type InferRootRow<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = VariantRow<TContract, ModelName>;\n\nexport type VariantNames<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly variants: infer V extends Record<string, unknown>;\n }\n ? keyof V & string\n : never;\n\nexport type VariantModelRow<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n VariantName extends string,\n> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer DiscField extends string };\n readonly variants: infer V;\n }\n ? V extends Record<string, { readonly value: string }>\n ? VariantName extends keyof V & string & keyof ModelsOf<TContract>\n ? Simplify<\n Omit<DefaultModelRow<TContract, ModelName>, DiscField> &\n DefaultModelRow<TContract, VariantName> &\n Record<DiscField, V[VariantName]['value']>\n >\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>;\n\ndeclare const aggregateResultBrand: unique symbol;\n\nexport interface AggregateSelector<Result> {\n readonly kind: 'aggregate';\n readonly fn: AggregateFn;\n readonly column?: string;\n readonly [aggregateResultBrand]?: Result;\n}\n\nexport type AggregateSpec = Record<string, AggregateSelector<unknown>>;\n\nexport type AggregateResult<Spec extends AggregateSpec> = {\n [K in keyof Spec]: Spec[K] extends AggregateSelector<infer Result> ? Result : never;\n};\n\nexport interface AggregateBuilder<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n count(): AggregateSelector<number>;\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n}\n\nexport type HavingComparisonMethods<T> = Pick<\n ComparisonMethods<T, 'equality' | 'order'>,\n 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte'\n>;\n\nexport interface HavingBuilder<TContract extends Contract<SqlStorage>, ModelName extends string> {\n count(): HavingComparisonMethods<number>;\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n}\n\nexport type ShorthandWhereFilter<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<{\n [K in keyof DefaultModelRow<TContract, ModelName> & string]:\n | DefaultModelRow<TContract, ModelName>[K]\n | null\n | undefined;\n}>;\n\ntype ModelsOf<TContract extends Contract<SqlStorage>> =\n TContract['models'] extends Record<string, unknown> ? TContract['models'] : Record<string, never>;\n\ntype ModelDef<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ModelName extends keyof ModelsOf<TContract> ? ModelsOf<TContract>[ModelName] : never;\n\ntype FieldsOf<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends { readonly fields: infer F }\n ? F extends Record<string, unknown>\n ? F\n : Record<string, never>\n : Record<string, never>;\n\ntype ModelStorageFields<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly storage: { readonly fields: infer Fields };\n }\n ? Fields extends Record<string, { readonly column: string }>\n ? Fields\n : never\n : never;\n\ntype ModelFieldToColumnMap<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageFields<TContract, ModelName> extends infer Fields\n ? Fields extends Record<string, { readonly column: string }>\n ? { readonly [F in keyof Fields]: Fields[F]['column'] }\n : never\n : never;\n\ntype FieldToColumnMapSafe<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string>\n ? ModelFieldToColumnMap<TContract, ModelName>\n : never;\n\ntype ModelTableName<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly storage: { readonly table: infer T extends string };\n }\n ? T\n : never;\n\ntype FieldColumnName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = (FieldToColumnMapSafe<TContract, ModelName> extends never\n ? FieldName\n : FieldName extends keyof FieldToColumnMapSafe<TContract, ModelName>\n ? FieldToColumnMapSafe<TContract, ModelName>[FieldName]\n : FieldName) &\n string;\n\ntype NamespaceTableDef<TContract extends Contract<SqlStorage>, TableName extends string> = {\n [K in keyof TContract['storage']['namespaces']]: TContract['storage']['namespaces'][K] extends {\n readonly tables: infer Tables;\n }\n ? TableName extends keyof Tables\n ? Tables[TableName]\n : never\n : never;\n}[keyof TContract['storage']['namespaces']];\n\ntype ResolvedStorageColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? FieldColumnName<TContract, ModelName, FieldName> extends infer ColName extends string\n ? NamespaceTableDef<TContract, TableName> extends { readonly columns: infer Columns }\n ? ColName extends keyof Columns\n ? Columns[ColName] extends StorageColumn\n ? Columns[ColName]\n : never\n : never\n : never\n : never\n : never;\n\ntype FieldStorageJsType<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n ResolvedStorageColumn<TContract, ModelName, FieldName> extends infer Col extends StorageColumn\n ? ComputeColumnJsType<\n TContract,\n ModelTableName<TContract, ModelName> & string,\n FieldColumnName<TContract, ModelName, FieldName> & string,\n Col,\n ExtractCodecTypes<TContract>\n >\n : never;\n\ntype FieldJsType<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = [FieldStorageJsType<TContract, ModelName, FieldName>] extends [never]\n ? unknown\n : FieldStorageJsType<TContract, ModelName, FieldName>;\n\ntype FieldStorageColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = ResolvedStorageColumn<TContract, ModelName, FieldName>;\n\ntype FieldCodecId<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends {\n readonly codecId: infer Id extends string;\n }\n ? Id\n : never;\n\ntype FieldNullable<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends {\n readonly nullable: infer N extends boolean;\n }\n ? N\n : false;\n\ntype FieldTraits<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldCodecId<TContract, ModelName, FieldName> extends infer Id extends string\n ? Id extends keyof ExtractCodecTypes<TContract>\n ? ExtractCodecTypes<TContract>[Id] extends { readonly traits: infer T }\n ? T\n : never\n : never\n : never;\n\nexport type NumericFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof DefaultModelRow<TContract, ModelName> & string]: 'numeric' extends FieldTraits<\n TContract,\n ModelName,\n K\n >\n ? K\n : never;\n}[keyof DefaultModelRow<TContract, ModelName> & string];\n\ntype ExecutionDefaultEntry<TContract extends Contract<SqlStorage>> =\n TContract['execution'] extends {\n readonly mutations: {\n readonly defaults: infer Defaults;\n };\n }\n ? Defaults extends ReadonlyArray<unknown>\n ? Defaults[number]\n : never\n : never;\n\ntype HasExecutionCreateDefault<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = [\n Extract<\n ExecutionDefaultEntry<TContract>,\n {\n readonly ref: {\n readonly table: ModelTableName<TContract, ModelName>;\n readonly column: FieldColumnName<TContract, ModelName, FieldName>;\n };\n readonly onCreate?: unknown;\n }\n >,\n] extends [never]\n ? false\n : true;\n\ntype IsOptionalCreateField<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends infer Column\n ? Column extends StorageColumn\n ? Column['nullable'] extends true\n ? true\n : Column extends { readonly default: unknown }\n ? true\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>;\n\ntype CreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = keyof DefaultModelRow<TContract, ModelName> & string;\n\ntype RequiredCreateFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in CreateFieldNames<TContract, ModelName>]-?: IsOptionalCreateField<\n TContract,\n ModelName,\n K\n > extends true\n ? never\n : K;\n}[CreateFieldNames<TContract, ModelName>];\n\ntype OptionalCreateFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in CreateFieldNames<TContract, ModelName>]-?: IsOptionalCreateField<\n TContract,\n ModelName,\n K\n > extends true\n ? K\n : never;\n}[CreateFieldNames<TContract, ModelName>];\n\nexport type CreateInput<TContract extends Contract<SqlStorage>, ModelName extends string> = Pick<\n DefaultModelRow<TContract, ModelName>,\n RequiredCreateFieldNames<TContract, ModelName>\n> &\n Partial<\n Pick<DefaultModelRow<TContract, ModelName>, OptionalCreateFieldNames<TContract, ModelName>>\n > &\n RelationMutationFields<TContract, ModelName>;\n\ntype IsPolymorphicBase<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: unknown;\n readonly variants: Record<string, unknown>;\n }\n ? true\n : false;\n\ntype DiscriminatorFieldName<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer F extends string };\n }\n ? F\n : never;\n\nexport type VariantCreateInput<\n TContract extends Contract<SqlStorage>,\n BaseModelName extends string,\n VariantName extends string,\n> = Omit<CreateInput<TContract, BaseModelName>, DiscriminatorFieldName<TContract, BaseModelName>> &\n CreateInput<TContract, VariantName>;\n\nexport type ResolvedCreateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n VName extends string | undefined,\n> =\n IsPolymorphicBase<TContract, ModelName> extends true\n ? VName extends string\n ? VariantCreateInput<TContract, ModelName, VName>\n : never\n : CreateInput<TContract, ModelName>;\n\ntype ModelStorageTableDef<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? NamespaceTableDef<TContract, TableName>\n : never;\n\ntype PrimaryKeyConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageTableDef<TContract, ModelName> extends {\n readonly primaryKey: { readonly columns: infer Columns extends readonly string[] };\n }\n ? Columns\n : never;\n\ntype UniqueConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageTableDef<TContract, ModelName> extends {\n readonly uniques: infer Uniques;\n }\n ? Uniques extends ReadonlyArray<infer Unique>\n ? Unique extends { readonly columns: infer Columns extends readonly string[] }\n ? Columns\n : never\n : never\n : never;\n\ntype FieldNameForColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n ColumnName extends string,\n> = {\n [K in keyof DefaultModelRow<TContract, ModelName> & string]: FieldColumnName<\n TContract,\n ModelName,\n K\n > extends ColumnName\n ? K\n : never;\n}[keyof DefaultModelRow<TContract, ModelName> & string] extends infer Matched\n ? Matched extends string\n ? Matched\n : ColumnName\n : ColumnName;\n\ntype RowValueForField<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = FieldName extends keyof DefaultModelRow<TContract, ModelName>\n ? DefaultModelRow<TContract, ModelName>[FieldName]\n : unknown;\n\ntype CriterionFromConstraintColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Columns extends readonly string[],\n> = string extends Columns[number]\n ? Record<string, unknown>\n : {\n [C in Columns[number] as FieldNameForColumn<TContract, ModelName, C>]: RowValueForField<\n TContract,\n ModelName,\n FieldNameForColumn<TContract, ModelName, C>\n >;\n };\n\ntype ConstraintColumnsUnion<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | PrimaryKeyConstraintColumns<TContract, ModelName>\n | UniqueConstraintColumns<TContract, ModelName>;\n\nexport type UniqueConstraintCriterion<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> =\n ConstraintColumnsUnion<TContract, ModelName> extends infer Columns\n ? Columns extends readonly string[]\n ? CriterionFromConstraintColumns<TContract, ModelName, Columns>\n : never\n : never;\n\ntype RelationConnectCriterion<TContract extends Contract<SqlStorage>, ModelName extends string> = [\n UniqueConstraintCriterion<TContract, ModelName>,\n] extends [never]\n ? Record<string, unknown>\n : UniqueConstraintCriterion<TContract, ModelName>;\n\nexport interface RelationMutationCreate<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'create';\n readonly data: readonly MutationCreateInput<TContract, ModelName>[];\n}\n\nexport interface RelationMutationConnect<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'connect';\n readonly criteria: readonly RelationConnectCriterion<TContract, ModelName>[];\n}\n\nexport interface RelationMutationDisconnect<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'disconnect';\n readonly criteria?: readonly RelationConnectCriterion<TContract, ModelName>[];\n}\n\nexport type RelationMutation<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | RelationMutationCreate<TContract, ModelName>\n | RelationMutationConnect<TContract, ModelName>\n | RelationMutationDisconnect<TContract, ModelName>;\n\nexport interface RelationMutator<TContract extends Contract<SqlStorage>, ModelName extends string> {\n create(\n data: MutationCreateInput<TContract, ModelName>,\n ): RelationMutationCreate<TContract, ModelName>;\n create(\n data: readonly MutationCreateInput<TContract, ModelName>[],\n ): RelationMutationCreate<TContract, ModelName>;\n connect(\n criterion: RelationConnectCriterion<TContract, ModelName>,\n ): RelationMutationConnect<TContract, ModelName>;\n connect(\n criteria: readonly RelationConnectCriterion<TContract, ModelName>[],\n ): RelationMutationConnect<TContract, ModelName>;\n disconnect(): RelationMutationDisconnect<TContract, ModelName>;\n disconnect(\n criteria: readonly RelationConnectCriterion<TContract, ModelName>[],\n ): RelationMutationDisconnect<TContract, ModelName>;\n}\n\ntype RelationMutationCallback<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends RelationNames<TContract, ModelName>,\n> = (\n mutator: RelationMutator<TContract, RelatedModelName<TContract, ModelName, RelName> & string>,\n) => RelationMutation<TContract, RelatedModelName<TContract, ModelName, RelName> & string>;\n\ntype RelationMutationFields<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<{\n [K in RelationNames<TContract, ModelName>]: RelationMutationCallback<TContract, ModelName, K>;\n}>;\n\ntype AllModelRelationEntries<TContract extends Contract<SqlStorage>> = {\n [M in keyof ModelsOf<TContract>]: ModelsOf<TContract>[M] extends {\n readonly relations: infer R extends Record<string, unknown>;\n }\n ? R[keyof R]\n : never;\n}[keyof ModelsOf<TContract>];\n\ntype RelationDefWithTargetFields = {\n readonly to: string;\n readonly on: {\n readonly targetFields: readonly string[];\n };\n};\n\ntype ChildForeignKeyFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> =\n Extract<AllModelRelationEntries<TContract>, RelationDefWithTargetFields> extends infer Relation\n ? Relation extends {\n readonly to: ModelName;\n readonly on: {\n readonly targetFields: infer Fields extends readonly string[];\n };\n }\n ? Fields[number]\n : never\n : never;\n\ntype NestedOptionalCreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> =\n | OptionalCreateFieldNames<TContract, ModelName>\n | Extract<\n ChildForeignKeyFieldNames<TContract, ModelName>,\n CreateFieldNames<TContract, ModelName>\n >;\n\ntype NestedRequiredCreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Exclude<\n CreateFieldNames<TContract, ModelName>,\n NestedOptionalCreateFieldNames<TContract, ModelName>\n>;\n\ntype NestedCreateInput<TContract extends Contract<SqlStorage>, ModelName extends string> = Pick<\n DefaultModelRow<TContract, ModelName>,\n NestedRequiredCreateFieldNames<TContract, ModelName>\n> &\n Partial<\n Pick<\n DefaultModelRow<TContract, ModelName>,\n NestedOptionalCreateFieldNames<TContract, ModelName>\n >\n >;\n\ntype AtLeastOne<T> = keyof T extends never\n ? never\n : {\n [K in keyof T]-?: Pick<T, K> & Partial<Omit<T, K>>;\n }[keyof T];\n\nexport type MutationCreateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = NestedCreateInput<TContract, ModelName> & RelationMutationFields<TContract, ModelName>;\n\nexport type MutationCreateInputWithRelations<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = NestedCreateInput<TContract, ModelName> &\n AtLeastOne<RelationMutationFields<TContract, ModelName>>;\n\nexport type MutationUpdateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<DefaultModelRow<TContract, ModelName>> & RelationMutationFields<TContract, ModelName>;\n\ntype ModelRelations<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends { readonly relations: infer R }\n ? R extends Record<string, unknown>\n ? R\n : Record<string, never>\n : Record<string, never>;\n\ntype ExactRecord<T> =\n T extends Record<string, unknown>\n ? string extends keyof T\n ? Record<string, never>\n : T\n : Record<string, never>;\n\nexport type RelationsOf<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ExactRecord<ModelRelations<TContract, ModelName>>;\n\nexport type RelationNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = (string extends keyof RelationsOf<TContract, ModelName>\n ? never\n : keyof RelationsOf<TContract, ModelName>) &\n string;\n\ntype RelationModelName<Relation> = Relation extends { readonly to: infer To extends string }\n ? To\n : never;\n\nexport type RelatedModelName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n RelationsOf<TContract, ModelName> extends infer Rels\n ? Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationModelName<Rels[RelName]>\n : never\n : never\n : never;\n\ntype RelationCardinalityFromRelation<Relation> = Relation extends {\n readonly cardinality: infer Cardinality extends RelationCardinalityTag;\n}\n ? Cardinality\n : '1:N';\n\nexport type RelationCardinality<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n RelationsOf<TContract, ModelName> extends infer Rels\n ? Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationCardinalityFromRelation<Rels[RelName]>\n : '1:N'\n : '1:N'\n : '1:N';\n\ntype RelationLocalFieldColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Relation,\n> = Relation extends {\n readonly on: { readonly localFields: infer Fields extends readonly string[] };\n}\n ? MapFieldsToColumns<TContract, ModelName, Fields>\n : readonly [];\n\ntype MapFieldsToColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Fields extends readonly string[],\n> = Fields extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? readonly [\n FieldColumnName<TContract, ModelName, Head>,\n ...MapFieldsToColumns<TContract, ModelName, Tail>,\n ]\n : readonly [];\n\ntype AnyColumnNullable<\n Columns extends Record<string, StorageColumn>,\n ColNames extends readonly string[],\n> = ColNames extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? Head extends keyof Columns\n ? Columns[Head]['nullable'] extends true\n ? true\n : AnyColumnNullable<Columns, Tail>\n : true\n : false;\n\ntype HasForeignKeyForCols<\n FKs extends readonly unknown[],\n Cols extends readonly string[],\n> = FKs extends readonly [infer Head, ...infer Tail extends unknown[]]\n ? Head extends { readonly source: { readonly columns: Cols } }\n ? true\n : HasForeignKeyForCols<Tail, Cols>\n : false;\n\ntype IsFkSideOfRelation<\n Table extends StorageTable,\n ParentCols extends readonly string[],\n> = Table extends { readonly foreignKeys: infer FKs extends readonly unknown[] }\n ? HasForeignKeyForCols<FKs, ParentCols>\n : false;\n\ntype IsToOneRelationNullable<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? NamespaceTableDef<TContract, TableName> extends infer Table extends StorageTable\n ? RelationsOf<TContract, ModelName> extends infer Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationLocalFieldColumns<\n TContract,\n ModelName,\n Rels[RelName]\n > extends infer Cols extends readonly string[]\n ? IsFkSideOfRelation<Table, Cols> extends true\n ? AnyColumnNullable<Table['columns'], Cols>\n : true\n : true\n : true\n : true\n : true\n : true;\n\nexport type IncludeRelationValue<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n IncludedRow,\n> =\n RelationCardinality<TContract, ModelName, RelName> extends '1:1' | 'N:1'\n ? IsToOneRelationNullable<TContract, ModelName, RelName> extends true\n ? IncludedRow | null\n : IncludedRow\n : IncludedRow[];\n\nexport type CollectionModelName<TContract extends Contract<SqlStorage>> =\n keyof ModelsOf<TContract> & string;\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n type CodecRef,\n ColumnRef,\n ExistsExpr,\n ProjectionItem,\n SelectAst,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { Expression, ScopeField } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport {\n getFieldToColumnMap,\n modelOf,\n resolveFieldToColumn,\n resolveModelTableName,\n} from './collection-contract';\nimport { and, not } from './filters';\nimport {\n COMPARISON_METHODS_META,\n type ComparisonMethodFns,\n type ModelAccessor,\n type RelationFilterAccessor,\n} from './types';\n\ninterface RelationMeta {\n readonly to: string;\n readonly cardinality?: string;\n readonly on?: {\n readonly localFields?: readonly string[];\n readonly targetFields?: readonly string[];\n };\n}\n\ntype RelationPredicateInput<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | ((model: ModelAccessor<TContract, ModelName>) => AnyExpression)\n | Record<string, unknown>;\n\ntype NamedOp = readonly [name: string, entry: SqlOperationEntry];\n\nexport function createModelAccessor<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(context: ExecutionContext<TContract>, modelName: ModelName): ModelAccessor<TContract, ModelName> {\n const contract = context.contract;\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const tableName = resolveModelTableName(contract, modelName);\n const modelRelations = (modelOf(contract, modelName)?.relations ?? {}) as Record<\n string,\n RelationMeta\n >;\n\n const opsByCodecId = new Map<string, NamedOp[]>();\n\n function registerOp(codecId: string, op: NamedOp) {\n let existing = opsByCodecId.get(codecId);\n if (!existing) {\n existing = [];\n opsByCodecId.set(codecId, existing);\n }\n existing.push(op);\n }\n\n for (const [name, entry] of Object.entries(context.queryOperations.entries())) {\n const op: NamedOp = [name, entry];\n const self = entry.self;\n if (!self) continue;\n if (self.codecId !== undefined) {\n registerOp(self.codecId, op);\n } else if (self.traits !== undefined) {\n for (const descriptor of context.codecDescriptors.values()) {\n const descriptorTraits: readonly string[] = descriptor.traits;\n if (self.traits.every((t) => descriptorTraits.includes(t))) {\n registerOp(descriptor.codecId, op);\n }\n }\n }\n }\n\n return new Proxy({} as ModelAccessor<TContract, ModelName>, {\n get(_target, prop: string | symbol): unknown {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = modelRelations[prop];\n if (relation) {\n return createRelationFilterAccessor(context, modelName, tableName, relation);\n }\n\n const columnName = fieldToColumn[prop] ?? prop;\n const column = resolveColumn(contract, tableName, columnName);\n // Unknown fields return `undefined`, matching plain JS object semantics.\n // The `ModelAccessor<TContract, ModelName>` type already rejects typos\n // at compile time for TS consumers, and contexts that iterate accessor\n // keys (e.g. relation-shorthand predicates) can detect missing fields\n // with an `undefined` check and raise their own, domain-specific error.\n if (!column) {\n return undefined;\n }\n const traits = context.codecDescriptors.descriptorFor(column.codecId)?.traits ?? [];\n const operations = opsByCodecId.get(column.codecId) ?? [];\n const codec = codecRefForStorageColumn(contract.storage, tableName, columnName);\n return createScalarFieldAccessor(\n tableName,\n columnName,\n column.codecId,\n column.nullable,\n codec,\n traits,\n operations,\n context,\n );\n },\n });\n}\n\nfunction resolveColumn(\n contract: Contract<SqlStorage>,\n tableName: string,\n columnName: string,\n): { readonly codecId: string; readonly nullable: boolean } | undefined {\n const table = contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n const column = table?.columns?.[columnName];\n if (!column) return undefined;\n return { codecId: column.codecId, nullable: column.nullable };\n}\n\nfunction createScalarFieldAccessor(\n tableName: string,\n columnName: string,\n codecId: string,\n nullable: boolean,\n codec: CodecRef | undefined,\n traits: readonly string[],\n operations: readonly NamedOp[],\n context: ExecutionContext,\n): Partial<ComparisonMethodFns<unknown>> {\n const column = ColumnRef.of(tableName, columnName);\n const comparisonEntries: Array<[string, unknown]> = [];\n for (const [name, meta] of Object.entries(COMPARISON_METHODS_META)) {\n if (meta.traits.some((t) => !traits.includes(t))) continue;\n comparisonEntries.push([name, meta.create(column, codec)]);\n }\n\n const accessor = {\n returnType: { codecId, nullable, codec },\n codec,\n buildAst: () => column,\n ...Object.fromEntries(comparisonEntries),\n } as Expression<ScopeField> & Record<string, unknown>;\n\n for (const [name, entry] of operations) {\n accessor[name] = createExtensionMethodFactory(accessor, entry, context);\n }\n\n return accessor as Partial<ComparisonMethodFns<unknown>>;\n}\n\nfunction createExtensionMethodFactory(\n selfExpr: Expression<ScopeField>,\n entry: SqlOperationEntry,\n context: ExecutionContext,\n): (...args: unknown[]) => unknown {\n return (...args: unknown[]) => {\n // `entry.impl` is typed `(...args: never[]) => QueryOperationReturn` —\n // `never[]` args block direct invocation with unknown values, and the\n // declared return omits `buildAst` (sql-contract intentionally doesn't\n // depend on relational-core). Cast here to the practical shape: authors\n // always return Expression<ScopeField> via `buildOperation`.\n const impl = entry.impl as (self: unknown, ...args: unknown[]) => Expression<ScopeField>;\n const result = impl(selfExpr, ...args);\n const returnCodecId = result.returnType.codecId;\n const returnTraits = context.codecDescriptors.descriptorFor(returnCodecId)?.traits ?? [];\n const isPredicate = returnTraits.includes('boolean');\n\n if (isPredicate) {\n return result.buildAst();\n }\n\n const resultAst = result.buildAst();\n const returnCodec: CodecRef = { codecId: returnCodecId };\n const methods: Record<string, unknown> = {};\n for (const [resultMethodName, meta] of Object.entries(COMPARISON_METHODS_META)) {\n if (meta.traits.some((t) => !returnTraits.includes(t))) continue;\n methods[resultMethodName] = meta.create(resultAst, returnCodec);\n }\n return methods;\n };\n}\n\nfunction createRelationFilterAccessor<\n TContract extends Contract<SqlStorage>,\n ParentModelName extends string,\n>(\n context: ExecutionContext<TContract>,\n parentModelName: ParentModelName,\n parentTableName: string,\n relation: RelationMeta,\n): RelationFilterAccessor<TContract, string> {\n const relatedTableName = resolveModelTableName(context.contract, relation.to);\n\n const relationAccessor: RelationFilterAccessor<TContract, string> = {\n some: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'some',\n predicate,\n }),\n every: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'every',\n predicate,\n }),\n none: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'none',\n predicate,\n }),\n };\n\n return relationAccessor;\n}\n\nfunction buildExistsExpr<TContract extends Contract<SqlStorage>>(\n context: ExecutionContext<TContract>,\n parentModelName: string,\n parentTableName: string,\n relatedTableName: string,\n relation: RelationMeta,\n options: {\n readonly mode: 'some' | 'every' | 'none';\n readonly predicate: RelationPredicateInput<TContract, string> | undefined;\n },\n): AnyExpression {\n const joinWhere = buildJoinWhere(\n context.contract,\n parentModelName,\n parentTableName,\n relatedTableName,\n relation,\n );\n const childWhere = toRelationWhereExpr(context, relation.to, options.predicate);\n\n let subqueryWhere = joinWhere;\n let existsNot = false;\n\n if (options.mode === 'every') {\n if (!childWhere) {\n return AndExpr.true();\n }\n existsNot = true;\n subqueryWhere = and(joinWhere, not(childWhere));\n } else if (options.mode === 'none') {\n existsNot = true;\n if (childWhere) {\n subqueryWhere = and(joinWhere, childWhere);\n }\n } else if (childWhere) {\n subqueryWhere = and(joinWhere, childWhere);\n }\n\n const selectProjectionColumn = firstTargetColumn(context.contract, relation) ?? 'id';\n const subquery = SelectAst.from(TableSource.named(relatedTableName))\n .withProjection([\n ProjectionItem.of('_exists', ColumnRef.of(relatedTableName, selectProjectionColumn)),\n ])\n .withWhere(subqueryWhere);\n\n return existsNot ? ExistsExpr.notExists(subquery) : ExistsExpr.exists(subquery);\n}\n\nfunction toRelationWhereExpr<TContract extends Contract<SqlStorage>>(\n context: ExecutionContext<TContract>,\n relatedModelName: string,\n predicate: RelationPredicateInput<TContract, string> | undefined,\n): AnyExpression | undefined {\n if (!predicate) {\n return undefined;\n }\n\n // Both callback and shorthand paths use the trait-gated accessor\n const accessor = createModelAccessor(context, relatedModelName);\n\n if (typeof predicate === 'function') {\n return predicate(accessor);\n }\n\n // Shorthand object — skip fields without eq\n const exprs: AnyExpression[] = [];\n for (const [fieldName, value] of Object.entries(predicate)) {\n if (value === undefined) {\n continue;\n }\n\n const fieldAccessor = (accessor as Record<string, Partial<ComparisonMethodFns<unknown>>>)[\n fieldName\n ];\n // Unknown field in the shorthand predicate — the Proxy returns undefined\n // for fields the contract doesn't declare. Surface it explicitly: silent\n // skip would drop user intent (e.g. a typo'd `nmae: 'Alice'` filter would\n // match every row).\n if (!fieldAccessor) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": field is not defined on the model`,\n );\n }\n\n if (value === null) {\n if (!fieldAccessor.isNull) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": isNull is unexpectedly missing — this is a bug in trait gating`,\n );\n }\n exprs.push(fieldAccessor.isNull());\n continue;\n }\n\n if (!fieldAccessor.eq) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": field does not support equality comparisons`,\n );\n }\n exprs.push(fieldAccessor.eq(value));\n }\n\n if (exprs.length === 0) {\n return undefined;\n }\n\n return exprs.length === 1 ? exprs[0] : and(...exprs);\n}\n\nfunction buildJoinWhere<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n parentModelName: string,\n parentTableName: string,\n relatedTableName: string,\n relation: RelationMeta,\n): AnyExpression {\n const localFields = relation.on?.localFields ?? [];\n const targetFields = relation.on?.targetFields ?? [];\n\n const joinExprs: AnyExpression[] = [];\n const count = Math.min(localFields.length, targetFields.length);\n\n for (let i = 0; i < count; i++) {\n const localField = localFields[i];\n const targetField = targetFields[i];\n if (!localField || !targetField) {\n continue;\n }\n\n const localColumn = resolveFieldToColumn(contract, parentModelName, localField);\n const targetColumn = resolveFieldToColumn(contract, relation.to, targetField);\n\n joinExprs.push(\n BinaryExpr.eq(\n ColumnRef.of(relatedTableName, targetColumn),\n ColumnRef.of(parentTableName, localColumn),\n ),\n );\n }\n\n if (joinExprs.length === 0) {\n throw new Error('Relation metadata is missing join columns');\n }\n\n const firstExpr = joinExprs[0];\n if (joinExprs.length === 1 && firstExpr !== undefined) {\n return firstExpr;\n }\n\n return and(...joinExprs);\n}\n\nfunction firstTargetColumn<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n relation: RelationMeta,\n): string | undefined {\n const targetFields = relation.on?.targetFields;\n const firstField = targetFields?.[0];\n if (!firstField) {\n return undefined;\n }\n return resolveFieldToColumn(contract, relation.to, firstField);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n MutationCreateInput,\n RelationMutation,\n RelationMutationConnect,\n RelationMutationCreate,\n RelationMutationDisconnect,\n RelationMutator,\n} from './types';\n\nexport function createRelationMutator<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(): RelationMutator<TContract, ModelName> {\n return {\n create(\n data:\n | MutationCreateInput<TContract, ModelName>\n | readonly MutationCreateInput<TContract, ModelName>[],\n ) {\n const rows = Array.isArray(data) ? [...data] : [data];\n return {\n kind: 'create',\n data: rows,\n } as RelationMutationCreate<TContract, ModelName>;\n },\n connect(criteria: Record<string, unknown> | readonly Record<string, unknown>[]) {\n const values = Array.isArray(criteria) ? [...criteria] : [criteria];\n return {\n kind: 'connect',\n criteria: values,\n } as RelationMutationConnect<TContract, ModelName>;\n },\n disconnect(criteria?: readonly Record<string, unknown>[]) {\n if (!criteria) {\n return {\n kind: 'disconnect',\n } as RelationMutationDisconnect<TContract, ModelName>;\n }\n\n return {\n kind: 'disconnect',\n criteria: [...criteria],\n } as RelationMutationDisconnect<TContract, ModelName>;\n },\n } as RelationMutator<TContract, ModelName>;\n}\n\nexport function isRelationMutationDescriptor(\n value: unknown,\n): value is RelationMutation<Contract<SqlStorage>, string> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const candidate = value as { kind?: unknown };\n if (\n candidate.kind !== 'create' &&\n candidate.kind !== 'connect' &&\n candidate.kind !== 'disconnect'\n ) {\n return false;\n }\n\n return true;\n}\n\nexport function isRelationMutationCallback(\n value: unknown,\n): value is (\n mutator: RelationMutator<Contract<SqlStorage>, string>,\n) => RelationMutation<Contract<SqlStorage>, string> {\n return typeof value === 'function';\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n LiteralExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnToFieldMap,\n resolveFieldToColumn,\n resolveModelRelations,\n resolveModelTableName,\n resolvePrimaryKeyColumn,\n} from './collection-contract';\nimport {\n acquireRuntimeScope,\n mapModelDataToStorageRow,\n mapStorageRowToModelFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { and, shorthandToWhereExpr } from './filters';\nimport {\n compileInsertReturning,\n compileSelect,\n compileUpdateCount,\n compileUpdateReturning,\n} from './query-plan';\nimport {\n createRelationMutator,\n isRelationMutationCallback,\n isRelationMutationDescriptor,\n} from './relation-mutator';\nimport type {\n CollectionState,\n MutationCreateInput,\n MutationUpdateInput,\n RelationCardinalityTag,\n RelationMutation,\n RelationMutator,\n RuntimeQueryable,\n} from './types';\nimport { emptyState } from './types';\n\ninterface RelationDefinition {\n readonly relationName: string;\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly localColumns: readonly string[];\n readonly targetColumns: readonly string[];\n}\n\ninterface ParsedRelationMutation {\n readonly relation: RelationDefinition;\n readonly mutation: RelationMutation<Contract<SqlStorage>, string>;\n}\n\ninterface ParsedMutationInput {\n readonly scalarData: Record<string, unknown>;\n readonly relationMutations: readonly ParsedRelationMutation[];\n}\n\nexport function hasNestedMutationCallbacks(\n contract: Contract<SqlStorage>,\n modelName: string,\n data: Record<string, unknown>,\n): boolean {\n const relationNames = new Set(\n getRelationDefinitions(contract, modelName).map((relation) => relation.relationName),\n );\n for (const [fieldName, value] of Object.entries(data)) {\n if (!relationNames.has(fieldName)) {\n continue;\n }\n if (isRelationMutationCallback(value)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function executeNestedCreateMutation(options: {\n context: ExecutionContext;\n runtime: RuntimeQueryable;\n modelName: string;\n data: MutationCreateInput<Contract<SqlStorage>, string>;\n}): Promise<Record<string, unknown>> {\n return withMutationScope(options.runtime, async (scope) =>\n createGraph(scope, options.context, options.modelName, options.data),\n );\n}\n\nexport async function executeNestedUpdateMutation(options: {\n context: ExecutionContext;\n runtime: RuntimeQueryable;\n modelName: string;\n filters: readonly AnyExpression[];\n data: MutationUpdateInput<Contract<SqlStorage>, string>;\n}): Promise<Record<string, unknown> | null> {\n return withMutationScope(options.runtime, async (scope) =>\n updateFirstGraph(scope, options.context, options.modelName, options.filters, options.data),\n );\n}\n\nexport function buildPrimaryKeyFilterFromRow(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const tableName = resolveModelTableName(contract, modelName);\n const primaryKeyColumn = resolvePrimaryKeyColumn(contract, tableName);\n const fieldName = toFieldName(contract, modelName, primaryKeyColumn);\n const value = row[fieldName];\n if (value === undefined) {\n throw new Error(\n `Missing primary key field \"${fieldName}\" while reloading model \"${modelName}\"`,\n );\n }\n\n return {\n [fieldName]: value,\n };\n}\n\nexport async function withMutationScope<T>(\n runtime: RuntimeQueryable,\n run: (scope: RuntimeScope) => Promise<T>,\n): Promise<T> {\n if (typeof runtime.transaction === 'function') {\n const transaction = await runtime.transaction();\n try {\n const result = await run(transaction);\n if (typeof transaction.commit === 'function') {\n await transaction.commit();\n }\n return result;\n } catch (error) {\n if (typeof transaction.rollback === 'function') {\n await transaction.rollback();\n }\n throw error;\n }\n }\n\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n return await run(scope);\n } finally {\n if (release) {\n await release();\n }\n }\n}\n\nasync function createGraph(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n input: MutationCreateInput<Contract<SqlStorage>, string>,\n): Promise<Record<string, unknown>> {\n const contract = context.contract;\n const parsed = parseMutationInput(contract, modelName, input);\n const { parentOwned, childOwned } = partitionByOwnership(parsed.relationMutations);\n\n const scalarData = { ...parsed.scalarData };\n\n for (const relationMutation of parentOwned) {\n if (relationMutation.mutation.kind === 'disconnect') {\n throw new Error('disconnect() is only supported in update() nested mutations');\n }\n\n await applyParentOwnedMutation(\n scope,\n context,\n modelName,\n scalarData,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n const parentRow = await insertSingleRow(scope, context, modelName, scalarData);\n\n for (const relationMutation of childOwned) {\n if (relationMutation.mutation.kind === 'disconnect') {\n throw new Error('disconnect() is only supported in update() nested mutations');\n }\n\n await applyChildOwnedMutation(\n scope,\n context,\n modelName,\n parentRow,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n return parentRow;\n}\n\nasync function updateFirstGraph(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n filters: readonly AnyExpression[],\n input: MutationUpdateInput<Contract<SqlStorage>, string>,\n): Promise<Record<string, unknown> | null> {\n const contract = context.contract;\n const existingRow = await findFirstByFilters(scope, contract, modelName, filters);\n if (!existingRow) {\n return null;\n }\n\n const parsed = parseMutationInput(contract, modelName, input as Record<string, unknown>);\n const { parentOwned, childOwned } = partitionByOwnership(parsed.relationMutations);\n\n const scalarData = { ...parsed.scalarData };\n\n for (const relationMutation of parentOwned) {\n await applyParentOwnedMutation(\n scope,\n context,\n modelName,\n scalarData,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n let parentRow = existingRow;\n\n const mappedUpdateData = mapModelDataToStorageRow(contract, modelName, scalarData);\n if (Object.keys(mappedUpdateData).length > 0) {\n const tableName = resolveModelTableName(contract, modelName);\n const appliedUpdateDefaults = context.applyMutationDefaults({\n op: 'update',\n table: tableName,\n values: mappedUpdateData,\n });\n for (const def of appliedUpdateDefaults) {\n mappedUpdateData[def.column] = def.value;\n }\n const pkFilter = buildPrimaryKeyFilterFromRow(contract, modelName, existingRow);\n const pkWhere = shorthandToWhereExpr(\n context,\n modelName,\n pkFilter as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!pkWhere) {\n throw new Error(`Failed to build primary key filter for model \"${modelName}\"`);\n }\n\n const compiled = compileUpdateReturning(\n contract,\n tableName,\n mappedUpdateData,\n [pkWhere],\n undefined,\n );\n const updatedRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n compiled,\n ).toArray();\n\n const updatedRaw = updatedRowsRaw[0];\n if (updatedRaw) {\n parentRow = mapStorageRowToModelFields(contract, modelName, updatedRaw);\n }\n }\n\n for (const relationMutation of childOwned) {\n await applyChildOwnedMutation(\n scope,\n context,\n modelName,\n parentRow,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n return parentRow;\n}\n\nfunction parseMutationInput(\n contract: Contract<SqlStorage>,\n modelName: string,\n input: Record<string, unknown>,\n): ParsedMutationInput {\n const scalarData: Record<string, unknown> = {};\n const relationDefinitions = new Map(\n getRelationDefinitions(contract, modelName).map((relation) => [\n relation.relationName,\n relation,\n ]),\n );\n\n const relationMutations: ParsedRelationMutation[] = [];\n\n for (const [fieldName, value] of Object.entries(input)) {\n const relation = relationDefinitions.get(fieldName);\n if (!relation) {\n scalarData[fieldName] = value;\n continue;\n }\n\n if (!isRelationMutationCallback(value)) {\n throw new Error(\n `Relation field \"${fieldName}\" on model \"${modelName}\" expects a mutator callback`,\n );\n }\n\n const mutator = createRelationMutator<Contract<SqlStorage>, string>();\n const mutation = value(mutator as RelationMutator<Contract<SqlStorage>, string>);\n if (!isRelationMutationDescriptor(mutation)) {\n throw new Error(\n `Relation field \"${fieldName}\" on model \"${modelName}\" returned an invalid mutation descriptor`,\n );\n }\n\n relationMutations.push({\n relation,\n mutation,\n });\n }\n\n return {\n scalarData,\n relationMutations,\n };\n}\n\nfunction partitionByOwnership(relationMutations: readonly ParsedRelationMutation[]): {\n parentOwned: ParsedRelationMutation[];\n childOwned: ParsedRelationMutation[];\n} {\n const parentOwned: ParsedRelationMutation[] = [];\n const childOwned: ParsedRelationMutation[] = [];\n\n for (const relationMutation of relationMutations) {\n if (relationMutation.relation.cardinality === 'N:1') {\n parentOwned.push(relationMutation);\n continue;\n }\n\n if (relationMutation.relation.cardinality === 'M:N') {\n throw new Error('M:N nested mutations are not supported yet');\n }\n\n childOwned.push(relationMutation);\n }\n\n return {\n parentOwned,\n childOwned,\n };\n}\n\nasync function applyParentOwnedMutation(\n scope: RuntimeScope,\n context: ExecutionContext,\n parentModelName: string,\n scalarData: Record<string, unknown>,\n relation: RelationDefinition,\n mutation: RelationMutation<Contract<SqlStorage>, string>,\n): Promise<void> {\n const contract = context.contract;\n if (mutation.kind === 'disconnect') {\n for (const localColumn of relation.localColumns) {\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n scalarData[parentFieldName] = null;\n }\n return;\n }\n\n if (mutation.kind === 'create') {\n const row = mutation.data[0];\n if (!row) {\n throw new Error(\n `create() nested mutation for relation \"${relation.relationName}\" requires data`,\n );\n }\n\n const relatedRow = await createGraph(\n scope,\n context,\n relation.relatedModelName,\n row as MutationCreateInput<Contract<SqlStorage>, string>,\n );\n copyRelatedValuesToParent(contract, parentModelName, relation, scalarData, relatedRow);\n return;\n }\n\n const criterion = mutation.criteria[0];\n if (!criterion) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" requires criterion`,\n );\n }\n\n const relatedRow = await findRowByCriterion(\n scope,\n context,\n relation.relatedModelName,\n criterion as Record<string, unknown>,\n );\n if (!relatedRow) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" did not find a matching row`,\n );\n }\n\n copyRelatedValuesToParent(contract, parentModelName, relation, scalarData, relatedRow);\n}\n\nfunction copyRelatedValuesToParent(\n contract: Contract<SqlStorage>,\n parentModelName: string,\n relation: RelationDefinition,\n scalarData: Record<string, unknown>,\n relatedRow: Record<string, unknown>,\n): void {\n for (let i = 0; i < relation.localColumns.length; i++) {\n const localColumn = relation.localColumns[i];\n const targetColumn = relation.targetColumns[i];\n if (!localColumn || !targetColumn) {\n continue;\n }\n\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n const childFieldName = toFieldName(contract, relation.relatedModelName, targetColumn);\n scalarData[parentFieldName] = relatedRow[childFieldName];\n }\n}\n\nasync function applyChildOwnedMutation(\n scope: RuntimeScope,\n context: ExecutionContext,\n parentModelName: string,\n parentRow: Record<string, unknown>,\n relation: RelationDefinition,\n mutation: RelationMutation<Contract<SqlStorage>, string>,\n): Promise<void> {\n const contract = context.contract;\n const parentValues = readParentColumnValues(contract, parentModelName, relation, parentRow);\n\n if (mutation.kind === 'create') {\n for (const childInput of mutation.data) {\n const payload = {\n ...(childInput as Record<string, unknown>),\n };\n\n for (const [childColumn, parentValue] of parentValues.entries()) {\n const childFieldName = toFieldName(contract, relation.relatedModelName, childColumn);\n payload[childFieldName] = parentValue;\n }\n\n await createGraph(\n scope,\n context,\n relation.relatedModelName,\n payload as MutationCreateInput<Contract<SqlStorage>, string>,\n );\n }\n return;\n }\n\n if (mutation.kind === 'connect') {\n for (const criterion of mutation.criteria) {\n const criterionWhere = shorthandToWhereExpr(\n context,\n relation.relatedModelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!criterionWhere) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" requires non-empty criterion`,\n );\n }\n\n const setValues: Record<string, unknown> = {};\n for (const [childColumn, parentValue] of parentValues.entries()) {\n setValues[childColumn] = parentValue;\n }\n\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n criterionWhere,\n ]);\n }\n return;\n }\n\n const setValues: Record<string, unknown> = {};\n for (const childColumn of parentValues.keys()) {\n setValues[childColumn] = null;\n }\n\n if (!mutation.criteria || mutation.criteria.length === 0) {\n const parentJoinWhere = buildChildJoinWhere(relation, parentValues);\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n parentJoinWhere,\n ]);\n return;\n }\n\n for (const criterion of mutation.criteria) {\n const criterionWhere = shorthandToWhereExpr(\n context,\n relation.relatedModelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!criterionWhere) {\n throw new Error(\n `disconnect() nested mutation for relation \"${relation.relationName}\" requires non-empty criterion`,\n );\n }\n\n const parentJoinWhere = buildChildJoinWhere(relation, parentValues);\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n and(parentJoinWhere, criterionWhere),\n ]);\n }\n}\n\nfunction readParentColumnValues(\n contract: Contract<SqlStorage>,\n parentModelName: string,\n relation: RelationDefinition,\n parentRow: Record<string, unknown>,\n): Map<string, unknown> {\n const values = new Map<string, unknown>();\n\n for (let i = 0; i < relation.localColumns.length; i++) {\n const localColumn = relation.localColumns[i];\n const targetColumn = relation.targetColumns[i];\n if (!localColumn || !targetColumn) {\n continue;\n }\n\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n const parentValue = parentRow[parentFieldName];\n if (parentValue === undefined) {\n throw new Error(\n `Nested mutation requires parent field \"${parentFieldName}\" to be present in returned row`,\n );\n }\n\n values.set(targetColumn, parentValue);\n }\n\n return values;\n}\n\nfunction buildChildJoinWhere(\n relation: RelationDefinition,\n childValues: Map<string, unknown>,\n): AnyExpression {\n const exprs: AnyExpression[] = [];\n\n for (const [childColumn, parentValue] of childValues.entries()) {\n exprs.push(\n BinaryExpr.eq(\n ColumnRef.of(relation.relatedTableName, childColumn),\n LiteralExpr.of(parentValue),\n ),\n );\n }\n\n const first = exprs[0];\n if (exprs.length === 1 && first !== undefined) {\n return first;\n }\n\n return and(...exprs);\n}\n\nasync function insertSingleRow(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n data: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const contract = context.contract;\n const tableName = resolveModelTableName(contract, modelName);\n\n const mappedData = mapModelDataToStorageRow(contract, modelName, data);\n const applied = context.applyMutationDefaults({\n op: 'create',\n table: tableName,\n values: mappedData,\n });\n\n for (const def of applied) {\n mappedData[def.column] = def.value;\n }\n\n const compiled = compileInsertReturning(contract, tableName, [mappedData], undefined);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n throw new Error(`Nested create for model \"${modelName}\" did not return a row`);\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function findRowByCriterion(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n criterion: Record<string, unknown>,\n): Promise<Record<string, unknown> | null> {\n const contract = context.contract;\n const whereExpr = shorthandToWhereExpr(\n context,\n modelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!whereExpr) {\n throw new Error(`Nested connect for model \"${modelName}\" requires non-empty criterion`);\n }\n\n const tableName = resolveModelTableName(contract, modelName);\n const state: CollectionState = {\n ...emptyState(),\n filters: [whereExpr],\n limit: 1,\n };\n const compiled = compileSelect(contract, tableName, state);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n return null;\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function findFirstByFilters(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n modelName: string,\n filters: readonly AnyExpression[],\n): Promise<Record<string, unknown> | null> {\n const tableName = resolveModelTableName(contract, modelName);\n const state: CollectionState = {\n ...emptyState(),\n filters,\n limit: 1,\n };\n const compiled = compileSelect(contract, tableName, state);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n return null;\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function executeUpdateCount(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n): Promise<void> {\n const compiled = compileUpdateCount(contract, tableName, setValues, filters);\n await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n}\n\nconst relationDefsCache = new WeakMap<object, Map<string, RelationDefinition[]>>();\n\nfunction getRelationDefinitions(\n contract: Contract<SqlStorage>,\n modelName: string,\n): RelationDefinition[] {\n let perContract = relationDefsCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n relationDefsCache.set(contract, perContract);\n }\n const cached = perContract.get(modelName);\n if (cached) return cached;\n\n const relations = resolveModelRelations(contract, modelName);\n const definitions = Object.entries(relations).map(([relationName, relation]) => ({\n relationName,\n relatedModelName: relation.to,\n relatedTableName: resolveModelTableName(contract, relation.to),\n cardinality: relation.cardinality,\n localColumns: relation.on.localFields.map((f) => resolveFieldToColumn(contract, modelName, f)),\n targetColumns: relation.on.targetFields.map((f) =>\n resolveFieldToColumn(contract, relation.to, f),\n ),\n }));\n\n perContract.set(modelName, definitions);\n return definitions;\n}\n\nfunction toFieldName(\n contract: Contract<SqlStorage>,\n modelName: string,\n columnName: string,\n): string {\n const columnToField = getColumnToFieldMap(contract, modelName);\n return columnToField[columnName] ?? columnName;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { AnyExpression, ToWhereExpr, WhereArg } from '@prisma-next/sql-relational-core/ast';\nimport { isWhereExpr } from '@prisma-next/sql-relational-core/ast';\nimport { bindWhereExpr } from './where-binding';\n\ninterface NormalizeWhereArgOptions {\n readonly contract?: Contract<SqlStorage>;\n}\n\nexport function normalizeWhereArg(arg: undefined): undefined;\nexport function normalizeWhereArg(arg: undefined, options: NormalizeWhereArgOptions): undefined;\nexport function normalizeWhereArg(arg: WhereArg, options?: NormalizeWhereArgOptions): AnyExpression;\nexport function normalizeWhereArg(\n arg: WhereArg | undefined,\n options?: NormalizeWhereArgOptions,\n): AnyExpression | undefined;\nexport function normalizeWhereArg(\n arg: WhereArg | undefined,\n options?: NormalizeWhereArgOptions,\n): AnyExpression | undefined {\n if (arg === undefined) {\n return undefined;\n }\n if (arg === null) {\n throw new Error(\n 'WhereArg cannot be null. Pass undefined or a valid WhereExpr/ToWhereExpr payload.',\n );\n }\n\n if (isToWhereExpr(arg)) {\n return arg.toWhereExpr();\n }\n\n if (options?.contract) {\n return bindWhereExpr(options.contract, arg);\n }\n return arg;\n}\n\nfunction isToWhereExpr(arg: WhereArg): arg is ToWhereExpr {\n return typeof arg === 'object' && arg !== null && 'toWhereExpr' in arg && !isWhereExpr(arg);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type {\n AnnotationValue,\n MetaBuilder,\n OperationKind,\n} from '@prisma-next/framework-components/runtime';\nimport { AsyncIterableResult, createMetaBuilder } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n isWhereExpr,\n LiteralExpr,\n type OrderByItem,\n type ToWhereExpr,\n type WhereArg,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SimplifyDeep } from '@prisma-next/utils/simplify-deep';\nimport { createAggregateBuilder, isAggregateSelector } from './aggregate-builder';\nimport { normalizeAggregateResult } from './collection-aggregate-result';\nimport { mapCursorValuesToColumns, mapFieldsToColumns } from './collection-column-mapping';\nimport {\n assertReturningCapability,\n getColumnToFieldMap,\n getFieldToColumnMap,\n isToOneCardinality,\n type PolymorphismInfo,\n resolveFieldToColumn,\n resolveIncludeRelation,\n resolveModelTableName,\n resolvePolymorphismInfo,\n resolvePrimaryKeyColumn,\n resolveRowIdentityColumns,\n resolveUpsertConflictColumns,\n} from './collection-contract';\nimport { dispatchCollectionRows } from './collection-dispatch';\nimport type {\n CollectionConstructor,\n CollectionInit,\n IncludedRelationsForRow,\n IncludeRefinementCollection,\n IncludeRefinementResult,\n IncludeRefinementValue,\n IsToManyRelation,\n RowSelection,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n RowType,\n WithOrderByState,\n WithVariantState,\n WithWhereState,\n} from './collection-internal-types';\nimport {\n dispatchMutationRows,\n dispatchSplitMutationRows,\n executeMutationReturningSingleRow,\n} from './collection-mutation-dispatch';\nimport {\n augmentSelectionForJoinColumns,\n mapModelDataToStorageRow,\n mapPolymorphicRow,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { shorthandToWhereExpr } from './filters';\nimport { GroupedCollection } from './grouped-collection';\nimport {\n createIncludeCombine,\n createIncludeScalar,\n isCollectionStateCarrier,\n isIncludeCombine,\n isIncludeScalar,\n} from './include-descriptors';\nimport { createModelAccessor } from './model-accessor';\nimport {\n buildPrimaryKeyFilterFromRow,\n executeNestedCreateMutation,\n executeNestedUpdateMutation,\n hasNestedMutationCallbacks,\n withMutationScope,\n} from './mutation-executor';\nimport {\n compileAggregate,\n compileDeleteCount,\n compileDeleteReturning,\n compileInsertCount,\n compileInsertCountSplit,\n compileInsertReturning,\n compileInsertReturningSplit,\n compileSelect,\n compileUpdateCount,\n compileUpdateReturning,\n compileUpsertReturning,\n mergeAnnotations,\n} from './query-plan';\nimport {\n type AggregateBuilder,\n type AggregateResult,\n type AggregateSpec,\n type CollectionContext,\n type CollectionState,\n type CollectionTypeState,\n type DefaultCollectionTypeState,\n type DefaultModelRow,\n emptyState,\n type IncludeCombine,\n type IncludeCombineBranch,\n type IncludeExpr,\n type IncludeScalar,\n type InferRootRow,\n type ModelAccessor,\n type MutationCreateInput,\n type MutationCreateInputWithRelations,\n type MutationUpdateInput,\n type NumericFieldNames,\n type RelatedModelName,\n type RelationNames,\n type ResolvedCreateInput,\n type RuntimeQueryable,\n type ShorthandWhereFilter,\n type UniqueConstraintCriterion,\n type VariantModelRow,\n type VariantNames,\n} from './types';\nimport { normalizeWhereArg } from './where-interop';\n\nfunction applyCreateDefaults(\n ctx: CollectionContext<Contract<SqlStorage>>,\n tableName: string,\n rows: Record<string, unknown>[],\n): void {\n // Per-operation cache for generators with `stability: 'query'` (e.g.\n // `timestampNow` for `temporal.updatedAt()`): one generated value\n // shared across every row in this insert. Per-field generators\n // (e.g. `cuid`) ignore the cache and vary per row.\n const defaultValueCache = rows.length > 1 ? new Map<string, unknown>() : undefined;\n for (const row of rows) {\n const applied = ctx.context.applyMutationDefaults({\n op: 'create',\n table: tableName,\n values: row,\n ...(defaultValueCache ? { defaultValueCache } : {}),\n });\n for (const def of applied) {\n row[def.column] = def.value;\n }\n }\n}\n\nfunction applyUpdateDefaults(\n ctx: CollectionContext<Contract<SqlStorage>>,\n tableName: string,\n values: Record<string, unknown>,\n): void {\n const applied = ctx.context.applyMutationDefaults({\n op: 'update',\n table: tableName,\n values,\n });\n for (const def of applied) {\n values[def.column] = def.value;\n }\n}\n\ntype WhereDirectInput = WhereArg;\n\nfunction isToWhereExprInput(value: unknown): value is ToWhereExpr {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'toWhereExpr' in value &&\n typeof (value as { toWhereExpr?: unknown }).toWhereExpr === 'function'\n );\n}\n\nfunction isWhereDirectInput(value: unknown): value is WhereDirectInput {\n return (\n (isWhereExpr(value) && typeof (value as { accept?: unknown }).accept === 'function') ||\n isToWhereExprInput(value)\n );\n}\n\ninterface MtiCreateContext {\n polyInfo: PolymorphismInfo;\n variant: { modelName: string; value: string; table: string; strategy: 'mti' };\n baseFieldToColumn: Record<string, string>;\n variantFieldToColumn: Record<string, string>;\n pkColumn: string;\n}\n\nexport class Collection<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Row = SimplifyDeep<InferRootRow<TContract, ModelName>>,\n State extends CollectionTypeState = DefaultCollectionTypeState,\n> implements RowSelection<Row>\n{\n declare readonly [RowType]: Row;\n /** @internal */\n readonly ctx: CollectionContext<TContract>;\n /** @internal */\n private readonly contract: TContract;\n /** @internal */\n readonly modelName: ModelName;\n /** @internal */\n readonly tableName: string;\n /** @internal */\n readonly state: CollectionState;\n /** @internal */\n readonly registry: ReadonlyMap<string, CollectionConstructor<TContract>>;\n /** @internal */\n readonly includeRefinementMode: boolean;\n\n constructor(\n ctx: CollectionContext<TContract>,\n modelName: ModelName,\n options: CollectionInit<TContract> = {},\n ) {\n this.ctx = ctx;\n this.contract = ctx.context.contract;\n this.modelName = modelName;\n this.tableName = options.tableName ?? resolveModelTableName(this.contract, modelName);\n this.state = options.state ?? emptyState();\n this.registry = options.registry ?? new Map<string, CollectionConstructor<TContract>>();\n this.includeRefinementMode = options.includeRefinementMode ?? false;\n }\n\n /**\n * Narrow the collection with a `WHERE` predicate. Returns a new\n * collection — chain further builders or run a terminal on it.\n *\n * Accepts a callback receiving a typed model accessor, a raw\n * `WhereArg` expression, or a shorthand field/value object. Multiple\n * calls are AND-combined.\n *\n * ```typescript\n * // Callback form with column-level operators:\n * const matches = await db.orm.User.where((u) => u.email.eq('alice@example.com')).all();\n *\n * // Shorthand object form:\n * const user = await db.orm.User.where({ id: 1, active: true }).first();\n *\n * // Chained AND — still a builder, run a terminal to execute:\n * const adults = await db.orm.User.where({ active: true }).where((u) => u.age.gt(18)).all();\n * ```\n */\n where(\n fn: (model: ModelAccessor<TContract, ModelName>) => WhereDirectInput,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(input: WhereDirectInput): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n fn: (model: ModelAccessor<TContract, ModelName>) => WhereArg,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n filters: ShorthandWhereFilter<TContract, ModelName>,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n input:\n | WhereDirectInput\n | ((model: ModelAccessor<TContract, ModelName>) => WhereDirectInput)\n | ((model: ModelAccessor<TContract, ModelName>) => WhereArg)\n | ShorthandWhereFilter<TContract, ModelName>,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>> {\n const whereArg =\n typeof input === 'function'\n ? input(createModelAccessor(this.ctx.context, this.modelName))\n : isWhereDirectInput(input)\n ? input\n : shorthandToWhereExpr(this.ctx.context, this.modelName, input);\n const filter = normalizeWhereArg(whereArg, { contract: this.contract });\n\n if (!filter) {\n return this as Collection<TContract, ModelName, Row, WithWhereState<State>>;\n }\n\n return this.#clone<WithWhereState<State>>({\n filters: [...this.state.filters, filter],\n });\n }\n\n /**\n * Narrow a polymorphic model to a specific variant. The returned\n * collection has the variant's row shape and a discriminator filter\n * is automatically applied. Chaining `.variant(...)` again replaces\n * the previous variant filter.\n *\n * ```typescript\n * // Read only admin users (STI):\n * const admins = await db.orm.User.variant('Admin').all();\n *\n * // Iterate the rows:\n * for await (const admin of db.orm.User.variant('Admin').all()) {\n * console.log(admin.role);\n * }\n *\n * // Insert under a variant — discriminator is injected automatically:\n * await db.orm.User.variant('Admin').create({ name: 'Ada', role: 'super' });\n * ```\n */\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n WithVariantState<WithWhereState<State>, V>\n > {\n type ReturnState = WithVariantState<WithWhereState<State>, V>;\n const model = this.contract.models[this.modelName] as Record<string, unknown> | undefined;\n const discriminator = model?.['discriminator'] as { field: string } | undefined;\n const variants = model?.['variants'] as Record<string, { value: string }> | undefined;\n\n if (!discriminator || !variants) {\n return this as unknown as Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n ReturnState\n >;\n }\n\n const variantEntry = variants[variantName];\n if (!variantEntry) {\n return this as unknown as Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n ReturnState\n >;\n }\n\n const columnName = resolveFieldToColumn(this.contract, this.modelName, discriminator.field);\n const filter = BinaryExpr.eq(\n ColumnRef.of(this.tableName, columnName),\n LiteralExpr.of(variantEntry.value),\n );\n\n const filtersWithoutPreviousVariant = this.state.variantName\n ? this.state.filters.filter(\n (f) =>\n !(\n f instanceof BinaryExpr &&\n f.left instanceof ColumnRef &&\n f.left.column === columnName &&\n f.left.table === this.tableName\n ),\n )\n : this.state.filters;\n\n return this.#cloneWithRow<VariantModelRow<TContract, ModelName, V>, ReturnState>({\n filters: [...filtersWithoutPreviousVariant, filter],\n variantName: variantName as string,\n });\n }\n\n /**\n * Eagerly load a related model. The relation appears on every\n * returned row under its declared name; to-one relations are mapped\n * to a single object (or `null`), to-many relations to an array.\n *\n * An optional refinement callback receives a child collection that\n * can be further constrained, projected, ordered, paginated, or\n * reduced to scalars via `count()`/`sum()`/etc. or to multiple\n * sub-aggregates via `combine()`.\n *\n * ```typescript\n * // Simple include — every user comes back with its posts array:\n * const users = await db.orm.User.include('posts').all();\n *\n * // Refine the related collection:\n * const withRecent = await db.orm.User.include('posts', (posts) =>\n * posts.where({ published: true }).orderBy((p) => p.createdAt.desc()).take(5),\n * ).all();\n *\n * // Reduce a to-many relation to a scalar value:\n * const withCounts = await db.orm.User.include('posts', (posts) => posts.count()).all();\n *\n * // Multiple sub-views via combine():\n * const overview = await db.orm.User.include('posts', (posts) =>\n * posts.combine({ recent: posts.take(3), total: posts.count() }),\n * ).all();\n * ```\n */\n include<\n RelName extends RelationNames<TContract, ModelName>,\n RelatedName extends RelatedModelName<TContract, ModelName, RelName> & string = RelatedModelName<\n TContract,\n ModelName,\n RelName\n > &\n string,\n IsToMany extends boolean = IsToManyRelation<TContract, ModelName, RelName>,\n RefinedResult extends IncludeRefinementResult<\n TContract,\n RelatedName,\n IsToMany\n > = IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n CollectionTypeState,\n IsToMany\n >,\n >(\n relationName: RelName,\n refineFn?: (\n collection: IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState,\n IsToMany\n >,\n ) => RefinedResult,\n ): Collection<\n TContract,\n ModelName,\n SimplifyDeep<\n Row & {\n [K in RelName]: IncludeRefinementValue<\n TContract,\n ModelName,\n K,\n DefaultModelRow<TContract, RelatedName>,\n RefinedResult\n >;\n }\n >,\n State\n > {\n const relation = resolveIncludeRelation(this.contract, this.modelName, relationName as string);\n\n let nestedState = emptyState();\n let scalarSelector: IncludeScalar<unknown> | undefined;\n let combineBranches: Readonly<Record<string, IncludeCombineBranch>> | undefined;\n\n if (refineFn) {\n const nestedCollection = this.#createCollection<\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState\n >(relation.relatedModelName as RelatedName, {\n tableName: relation.relatedTableName,\n state: emptyState(),\n includeRefinementMode: true,\n });\n const refined = refineFn(\n nestedCollection as unknown as IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState,\n IsToMany\n >,\n );\n\n if (isIncludeScalar(refined)) {\n if (isToOneCardinality(relation.cardinality)) {\n throw new Error(\n `include('${relationName as string}') scalar aggregations are only supported for to-many relations`,\n );\n }\n scalarSelector = refined;\n nestedState = refined.state;\n } else if (isIncludeCombine(refined)) {\n if (isToOneCardinality(relation.cardinality)) {\n throw new Error(\n `include('${relationName as string}') combine() is only supported for to-many relations`,\n );\n }\n combineBranches = refined.branches;\n } else if (isCollectionStateCarrier(refined)) {\n nestedState = refined.state;\n } else {\n throw new Error(\n `include('${relationName as string}') refinement must return a collection, include scalar selector, or combine() descriptor`,\n );\n }\n }\n\n const includeExpr: IncludeExpr = {\n relationName: relationName as string,\n relatedModelName: relation.relatedModelName,\n relatedTableName: relation.relatedTableName,\n targetColumn: relation.targetColumn,\n localColumn: relation.localColumn,\n cardinality: relation.cardinality,\n nested: nestedState,\n scalar: scalarSelector,\n combine: combineBranches,\n };\n\n return this.#cloneWithRow<\n SimplifyDeep<\n Row & {\n [K in RelName]: IncludeRefinementValue<\n TContract,\n ModelName,\n K,\n DefaultModelRow<TContract, RelatedName>,\n RefinedResult\n >;\n }\n >,\n State\n >({\n includes: [...this.state.includes, includeExpr],\n });\n }\n\n /**\n * Project the row down to a subset of scalar fields. Previously\n * included relations are preserved on the resulting row shape; only\n * scalar columns are narrowed.\n *\n * ```typescript\n * const summaries = await db.orm.User.select('id', 'email').all();\n * // typeof summaries[number] === { id: ...; email: ... }\n *\n * for await (const row of db.orm.User.select('id', 'email').all()) {\n * console.log(row.id, row.email);\n * }\n * ```\n */\n select<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(\n ...fields: Fields\n ): Collection<\n TContract,\n ModelName,\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, Fields[number]> &\n IncludedRelationsForRow<TContract, ModelName, Row>\n >,\n State\n > {\n const selectedFields = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return this.#cloneWithRow<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, Fields[number]> &\n IncludedRelationsForRow<TContract, ModelName, Row>\n >,\n State\n >({\n selectedFields,\n });\n }\n\n /**\n * Append an `ORDER BY` clause. Pass a single selector callback or an\n * array of callbacks; each receives a typed model accessor whose\n * columns expose `.asc()` and `.desc()`. Multiple calls append to the\n * existing list (left-to-right ordering preserved).\n *\n * Calling `orderBy(...)` unlocks `cursor(...)` and `distinctOn(...)`,\n * which both require a defined sort order.\n *\n * ```typescript\n * const newest = await db.orm.User.orderBy((u) => u.createdAt.desc()).all();\n *\n * const byName = await db.orm.User\n * .orderBy([(u) => u.lastName.asc(), (u) => u.firstName.asc()])\n * .all();\n * ```\n */\n orderBy(\n selection:\n | ((model: ModelAccessor<TContract, ModelName>) => OrderByItem)\n | ReadonlyArray<(model: ModelAccessor<TContract, ModelName>) => OrderByItem>,\n ): Collection<TContract, ModelName, Row, WithOrderByState<State>> {\n const accessor = createModelAccessor(this.ctx.context, this.modelName);\n const selectors = Array.isArray(selection) ? selection : [selection];\n const nextOrders = selectors.map((selector) =>\n selector(accessor as ModelAccessor<TContract, ModelName>),\n );\n const existing = this.state.orderBy ?? [];\n return this.#clone<WithOrderByState<State>>({\n orderBy: [...existing, ...nextOrders],\n });\n }\n\n /**\n * Switch to grouped-aggregate mode. Returns a `GroupedCollection`\n * whose `.aggregate(...)` terminal produces one row per group with\n * the chosen key columns plus the requested aggregates.\n *\n * ```typescript\n * const stats = await db.orm.Post\n * .where({ published: true })\n * .groupBy('userId')\n * .aggregate((agg) => ({ count: agg.count(), totalViews: agg.sum('views') }));\n * // [{ userId: 1, count: 3, totalViews: 120 }, ...]\n * ```\n */\n groupBy<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(...fields: Fields): GroupedCollection<TContract, ModelName, Fields> {\n const groupByColumns = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return new GroupedCollection(this.ctx, this.modelName, {\n tableName: this.tableName,\n baseFilters: this.state.filters,\n groupByFields: [...fields],\n groupByColumns,\n havingFilters: [],\n });\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the number of\n * related rows. Use inside an `include(...)` refinement callback as\n * `include(..., (rel) => rel.count())`; throws if called elsewhere.\n * The parent row's relation field becomes that count instead of an\n * array.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.count()).all();\n * // each user row: { ...user, posts: number }\n * ```\n */\n count(): IncludeScalar<number> {\n this.#assertIncludeRefinementMode('count()');\n return createIncludeScalar<number>('count', this.state);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the sum of `field`\n * across related rows. Returns `null` when there are no related\n * rows. Use inside an `include(...)` refinement callback; throws if\n * called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.sum('views')).all();\n * // each user row: { ...user, posts: number | null }\n * ```\n */\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('sum()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('sum', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the average of\n * `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.avg('views')).all();\n * // each user row: { ...user, posts: number | null }\n * ```\n */\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('avg()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('avg', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the minimum value\n * of `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.min('views')).all();\n * ```\n */\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('min()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('min', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the maximum value\n * of `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.max('views')).all();\n * ```\n */\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('max()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('max', this.state, columnName);\n }\n\n /**\n * Produce multiple named sub-views of a to-many relation in a\n * single `include(...)`. Each branch is either another refined\n * collection (mapped to a row array on the parent) or a scalar\n * reducer such as `count()`/`sum(...)`. Only valid inside an\n * `include(...)` refinement callback for to-many relations.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) =>\n * posts.combine({\n * recent: posts.where({ published: true }).take(3),\n * total: posts.count(),\n * averageViews: posts.avg('views'),\n * }),\n * ).all();\n * // each user row: {\n * // ...user,\n * // posts: { recent: Post[]; total: number; averageViews: number | null };\n * // }\n * ```\n */\n combine<\n Spec extends Record<\n string,\n Collection<TContract, ModelName, unknown, CollectionTypeState> | IncludeScalar<unknown>\n >,\n >(\n spec: Spec,\n ): IncludeCombine<{\n [K in keyof Spec]: Spec[K] extends IncludeScalar<infer ScalarResult>\n ? ScalarResult\n : Spec[K] extends Collection<TContract, ModelName, infer BranchRow, CollectionTypeState>\n ? BranchRow[]\n : never;\n }> {\n this.#assertIncludeRefinementMode('combine()');\n\n const branches: Record<string, IncludeCombineBranch> = {};\n for (const [name, value] of Object.entries(spec)) {\n if (isIncludeScalar(value)) {\n branches[name] = {\n kind: 'scalar',\n selector: value,\n };\n continue;\n }\n\n if (isCollectionStateCarrier(value)) {\n branches[name] = {\n kind: 'rows',\n state: value.state,\n };\n continue;\n }\n\n throw new Error(`include().combine() branch \"${name}\" is invalid`);\n }\n\n return createIncludeCombine(branches) as IncludeCombine<{\n [K in keyof Spec]: Spec[K] extends IncludeScalar<infer ScalarResult>\n ? ScalarResult\n : Spec[K] extends Collection<TContract, ModelName, infer BranchRow, CollectionTypeState>\n ? BranchRow[]\n : never;\n }>;\n }\n\n /**\n * Resume pagination from a known cursor position. Requires a prior\n * `orderBy(...)` so the cursor has a stable basis; provide a value\n * for every column referenced by the active `orderBy(...)` so each\n * ordered axis has a defined boundary.\n *\n * ```typescript\n * const page1 = await db.orm.Post\n * .orderBy((p) => p.createdAt.desc())\n * .take(20)\n * .all();\n *\n * const last = page1[page1.length - 1]!;\n * const page2 = await db.orm.Post\n * .orderBy((p) => p.createdAt.desc())\n * .cursor({ createdAt: last.createdAt })\n * .take(20)\n * .all();\n * ```\n */\n cursor(\n cursorValues: State['hasOrderBy'] extends true\n ? Partial<Record<keyof DefaultModelRow<TContract, ModelName> & string, unknown>>\n : never,\n ): Collection<TContract, ModelName, Row, State> {\n const mappedCursor = mapCursorValuesToColumns(\n this.contract,\n this.modelName,\n cursorValues as Readonly<Record<string, unknown>>,\n );\n\n if (Object.keys(mappedCursor).length === 0) {\n return this;\n }\n\n return this.#clone({\n cursor: mappedCursor,\n });\n }\n\n /**\n * Emit `SELECT DISTINCT` keyed on the given fields. Replaces any\n * previous `distinct(...)` / `distinctOn(...)` selection.\n *\n * ```typescript\n * const groups = await db.orm.User.distinct('country', 'role').all();\n * ```\n */\n distinct<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(...fields: Fields): Collection<TContract, ModelName, Row, State> {\n const distinctFields = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return this.#clone({\n distinct: distinctFields,\n distinctOn: undefined,\n });\n }\n\n /**\n * Emit `SELECT DISTINCT ON (fields)` — keep the first row per\n * distinct key according to the current `orderBy(...)`. Requires a\n * prior `orderBy(...)`; replaces any previous `distinct(...)` /\n * `distinctOn(...)` selection.\n *\n * ```typescript\n * // Latest post per user:\n * const latestPerUser = await db.orm.Post\n * .orderBy([(p) => p.userId.asc(), (p) => p.createdAt.desc()])\n * .distinctOn('userId')\n * .all();\n * ```\n */\n distinctOn<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(\n ...fields: State['hasOrderBy'] extends true ? Fields : never\n ): Collection<TContract, ModelName, Row, State> {\n const distinctOnFields = mapFieldsToColumns(\n this.contract,\n this.modelName,\n fields as readonly string[],\n );\n\n return this.#clone({\n distinct: undefined,\n distinctOn: distinctOnFields,\n });\n }\n\n /**\n * Apply `LIMIT n`. Replaces any previous limit set on this collection.\n *\n * ```typescript\n * const firstTen = await db.orm.User.orderBy((u) => u.id.asc()).take(10).all();\n * ```\n */\n take(n: number): Collection<TContract, ModelName, Row, State> {\n return this.#clone({ limit: n });\n }\n\n /**\n * Apply `OFFSET n`. Replaces any previous offset set on this collection.\n *\n * ```typescript\n * const page2 = await db.orm.User\n * .orderBy((u) => u.id.asc())\n * .skip(10)\n * .take(10)\n * .all();\n * ```\n */\n skip(n: number): Collection<TContract, ModelName, Row, State> {\n return this.#clone({ offset: n });\n }\n\n /**\n * Read terminal: execute the query and stream every matching row.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` (so `await` collects all rows into an array)\n * AND an async iterable (so `for await` streams rows as they\n * arrive, without buffering the whole result set in memory). Pick\n * whichever fits the caller. A single result can only be consumed\n * once.\n *\n * Streaming is the default and the expected execution model. The\n * only scenarios that fall back to buffering internally before\n * yielding are drivers that cannot expose a cursor to the\n * underlying database, and — for queries with `include(...)` —\n * targets whose SQL dialect supports neither lateral joins nor\n * correlated subqueries (so child rows cannot be stitched in a\n * single streaming query). These are implementation details below\n * the public API; the iteration shape itself is genuinely\n * streaming whenever the driver and plan allow it.\n *\n * ```typescript\n * // Thenable — collect to an array:\n * const users = await db.orm.User.all();\n * for (const user of users) console.log(user.id);\n *\n * // Async iterable — stream rows as they arrive:\n * for await (const user of db.orm.User.all()) {\n * console.log(user.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` so the caller can attach typed user\n * annotations to the executed plan. `meta.annotate(...)` enforces\n * applicability at the type level and at runtime; annotations are\n * merged into `plan.meta.annotations` at compile time.\n *\n * ```typescript\n * await db.orm.User.all((meta) => meta.annotate(cacheAnnotation({ ttl: 60 })));\n * ```\n */\n all(configure?: (meta: MetaBuilder<'read'>) => void): AsyncIterableResult<Row> {\n return this.#withAnnotationsFromMeta(configure, 'all').#dispatch();\n }\n\n /**\n * Read terminal: return the first matching row, or `null` if none\n * match. Optionally accepts a filter (callback or shorthand object)\n * followed by a `configure` callback for typed read annotations.\n *\n * To attach annotations without further narrowing, pass `undefined`\n * as the filter (or chain `.where(...)` first):\n *\n * ```typescript\n * // No filter — first row in the collection:\n * const someone = await db.orm.User.first();\n *\n * // Shorthand filter:\n * const alice = await db.orm.User.first({ email: 'alice@example.com' });\n *\n * // Callback filter:\n * const old = await db.orm.User.first((u) => u.age.gt(60));\n *\n * // Annotate without filtering further:\n * await db.orm.User.first(undefined, (meta) =>\n * meta.annotate(cacheAnnotation({ ttl: 60 })),\n * );\n * ```\n */\n async first(): Promise<Row | null>;\n async first(\n filter: undefined,\n configure: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter: (model: ModelAccessor<TContract, ModelName>) => WhereArg,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter: ShorthandWhereFilter<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter?:\n | ((model: ModelAccessor<TContract, ModelName>) => WhereArg)\n | ShorthandWhereFilter<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null> {\n const scoped =\n filter === undefined\n ? this\n : typeof filter === 'function'\n ? this.where(filter)\n : this.where(filter);\n const limited = scoped.take(1).#withAnnotationsFromMeta(configure, 'first');\n const rows = await limited.#dispatch().toArray();\n return rows[0] ?? null;\n }\n\n /**\n * Read terminal: run an aggregate query (count, sum, avg, min, max)\n * built via the `AggregateBuilder` callback. Returns one object\n * with the requested aggregate values keyed by the aliases supplied\n * in the spec.\n *\n * ```typescript\n * const stats = await db.orm.Post\n * .where({ published: true })\n * .aggregate((agg) => ({\n * total: agg.count(),\n * averageViews: agg.avg('views'),\n * maxViews: agg.max('views'),\n * }));\n * // { total: 42, averageViews: 17.3, maxViews: 9001 }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` for attaching typed annotations.\n * Annotations are merged into the compiled plan's `meta.annotations`.\n */\n async aggregate<Spec extends AggregateSpec>(\n fn: (aggregate: AggregateBuilder<TContract, ModelName>) => Spec,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<AggregateResult<Spec>> {\n const aggregateSpec = fn(createAggregateBuilder(this.contract, this.modelName));\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('aggregate() requires at least one aggregation selector');\n }\n\n for (const [alias, selector] of entries) {\n if (!isAggregateSelector(selector)) {\n throw new Error(`aggregate() selector \"${alias}\" is invalid`);\n }\n }\n\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'read', 'aggregate');\n\n const compiled = mergeAnnotations(\n compileAggregate(this.contract, this.tableName, this.state.filters, aggregateSpec),\n annotationsMap,\n );\n const rows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n compiled,\n ).toArray();\n return normalizeAggregateResult(aggregateSpec, rows[0] ?? {});\n }\n\n /**\n * Write terminal: insert one row and return it (with any configured\n * `select(...)` / `include(...)` projections applied to the returned\n * shape).\n *\n * Related rows can be created or linked through relation callbacks\n * on parent/child-owned relations (one-to-one or one-to-many).\n * The callback receives a mutator exposing `create(...)` and\n * `connect(...)`; `disconnect(...)` is only supported in nested\n * `update(...)` mutations. Many-to-many relations are not yet\n * supported as nested-mutation targets.\n *\n * ```typescript\n * // Simple insert:\n * const user = await db.orm.User.create({\n * email: 'alice@example.com',\n * name: 'Alice',\n * });\n *\n * // Nested create on a child-owned to-many relation:\n * const author = await db.orm.User.create({\n * email: 'bob@example.com',\n * posts: (posts) => posts.create([\n * { title: 'Hello' },\n * { title: 'World' },\n * ]),\n * });\n *\n * // Connect a child-owned post to an existing parent author:\n * const reply = await db.orm.Post.create({\n * title: 'Re: Hello',\n * author: (author) => author.connect({ id: 1 }),\n * });\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n * Annotations are merged into the compiled mutation plan's\n * `meta.annotations`.\n *\n * Note: when the input contains nested-mutation callbacks, the\n * operation is executed as a graph of internal queries via\n * `withMutationScope`. In that path, annotations apply to the\n * logical `create()` call but do not currently flow into each\n * constituent SQL statement issued for the related rows.\n */\n async create(\n data: ResolvedCreateInput<TContract, ModelName, State['variantName']>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row>;\n async create(\n data: MutationCreateInputWithRelations<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row>;\n async create(\n data:\n | ResolvedCreateInput<TContract, ModelName, State['variantName']>\n | MutationCreateInputWithRelations<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row> {\n assertReturningCapability(this.contract, 'create()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'create');\n\n if (\n hasNestedMutationCallbacks(this.contract, this.modelName, data as Record<string, unknown>)\n ) {\n const createdRow = await executeNestedCreateMutation({\n context: this.ctx.context,\n runtime: this.ctx.runtime,\n modelName: this.modelName,\n data: data as MutationCreateInput<Contract<SqlStorage>, string>,\n });\n\n const pkCriterion = buildPrimaryKeyFilterFromRow(this.contract, this.modelName, createdRow);\n const reloaded = await this.#reloadMutationRowByPrimaryKey(pkCriterion);\n if (!reloaded) {\n throw new Error(`create() for model \"${this.modelName}\" did not return a row`);\n }\n return reloaded;\n }\n\n const rows = await this.#createAllWithAnnotations(\n [data as ResolvedCreateInput<TContract, ModelName, State['variantName']>],\n annotationsMap,\n );\n const created = rows[0];\n if (created) {\n return created;\n }\n\n throw new Error(`create() for model \"${this.modelName}\" did not return a row`);\n }\n\n /**\n * Write terminal: insert many rows and stream the inserted rows.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams inserted\n * rows as they arrive. Use whichever shape fits the caller — but\n * only consume it once. Streaming is the default; some\n * driver/plan combinations may still buffer internally before\n * yielding.\n *\n * ```typescript\n * // Thenable — collect all inserted rows into an array:\n * const created = await db.orm.User.createAll([\n * { email: 'a@example.com' },\n * { email: 'b@example.com' },\n * ]);\n *\n * // Async iterable — stream inserted rows as they arrive:\n * for await (const row of db.orm.User.createAll(seedUsers)) {\n * console.log('inserted', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations to the\n * compiled insert plan.\n */\n createAll(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return this.#createAllWithAnnotations(\n data,\n this.#collectAnnotationsFromMeta(configure, 'write', 'createAll'),\n );\n }\n\n #createAllWithAnnotations(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n if (data.length === 0) {\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {};\n return new AsyncIterableResult(generator());\n }\n\n assertReturningCapability(this.contract, 'createAll()');\n\n const rows = data as readonly Record<string, unknown>[];\n const mtiContext = this.#resolveMtiCreateContext();\n if (mtiContext) {\n return this.#executeMtiCreate(rows, mtiContext);\n }\n\n const mappedRows = this.#mapCreateRows(rows);\n applyCreateDefaults(this.ctx, this.tableName, mappedRows);\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForInsert, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n if (this.contract.capabilities?.['sql']?.['defaultInInsert'] !== true) {\n const plans = compileInsertReturningSplit(\n this.contract,\n this.tableName,\n mappedRows,\n selectedForInsert,\n ).map((plan) => mergeAnnotations(plan, annotationsMap));\n return dispatchSplitMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n plans,\n tableName: this.tableName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n const compiled = mergeAnnotations(\n compileInsertReturning(this.contract, this.tableName, mappedRows, selectedForInsert),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n #assertNotMtiVariant(method: string): void {\n const mtiCtx = this.#resolveMtiCreateContext();\n if (mtiCtx) {\n throw new Error(\n `${method} is not supported for MTI variant \"${this.state.variantName}\" on model \"${this.modelName}\". Use createAll() instead.`,\n );\n }\n }\n\n #resolveMtiCreateContext(): MtiCreateContext | null {\n const variantName = this.state.variantName;\n if (!variantName) return null;\n\n const polyInfo = resolvePolymorphismInfo(this.contract, this.modelName);\n if (!polyInfo) return null;\n\n const variant = polyInfo.variants.get(variantName);\n if (!variant || variant.strategy !== 'mti') return null;\n\n const baseFieldToColumn = getFieldToColumnMap(this.contract, this.modelName);\n const variantFieldToColumn = getFieldToColumnMap(this.contract, variant.modelName);\n const pkColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n\n return {\n polyInfo,\n variant: variant as typeof variant & { strategy: 'mti' },\n baseFieldToColumn,\n variantFieldToColumn,\n pkColumn,\n };\n }\n\n #executeMtiCreate(\n data: readonly Record<string, unknown>[],\n mtiCtx: MtiCreateContext,\n ): AsyncIterableResult<Row> {\n const { polyInfo, variant, baseFieldToColumn, variantFieldToColumn, pkColumn } = mtiCtx;\n const contract = this.contract;\n const collectionCtx = this.ctx;\n const runtime = collectionCtx.runtime;\n const tableName = this.tableName;\n const modelName = this.modelName;\n\n const baseFieldColumns = new Set(Object.values(baseFieldToColumn));\n const variantFieldColumns = new Set(Object.values(variantFieldToColumn));\n const mergedFieldToColumn = { ...baseFieldToColumn, ...variantFieldToColumn };\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n for (const row of data) {\n const allMapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row as Record<string, unknown>)) {\n if (value === undefined) continue;\n const columnName = mergedFieldToColumn[fieldName] ?? fieldName;\n allMapped[columnName] = value;\n }\n allMapped[polyInfo.discriminatorColumn] = variant.value;\n\n const baseRow: Record<string, unknown> = {};\n const variantRow: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(allMapped)) {\n if (baseFieldColumns.has(col) || col === polyInfo.discriminatorColumn) {\n baseRow[col] = val;\n }\n if (variantFieldColumns.has(col)) {\n variantRow[col] = val;\n }\n }\n\n const merged = await withMutationScope(runtime, async (scope) => {\n applyCreateDefaults(collectionCtx, tableName, [baseRow]);\n const baseCompiled = compileInsertReturning(contract, tableName, [baseRow], undefined);\n const baseResult = await executeQueryPlan<Record<string, unknown>>(\n scope,\n baseCompiled,\n ).toArray();\n const baseCreated = baseResult[0];\n if (!baseCreated) {\n throw new Error(`MTI base INSERT for model \"${modelName}\" did not return a row`);\n }\n\n const pkValue = baseCreated[pkColumn];\n variantRow[pkColumn] = pkValue;\n applyCreateDefaults(collectionCtx, variant.table, [variantRow]);\n const variantCompiled = compileInsertReturning(\n contract,\n variant.table,\n [variantRow],\n undefined,\n );\n const variantResult = await executeQueryPlan<Record<string, unknown>>(\n scope,\n variantCompiled,\n ).toArray();\n const variantCreated = variantResult[0];\n if (!variantCreated) {\n throw new Error(\n `MTI variant INSERT for model \"${modelName}\" into \"${variant.table}\" did not return a row`,\n );\n }\n\n const prefixedVariant: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(variantCreated)) {\n if (col === pkColumn) continue;\n prefixedVariant[`${variant.table}__${col}`] = val;\n }\n\n return mapPolymorphicRow(\n contract,\n modelName,\n polyInfo,\n { ...baseCreated, ...prefixedVariant },\n variant.modelName,\n );\n });\n\n yield merged as Row;\n }\n };\n\n return new AsyncIterableResult(generator());\n }\n\n #mapCreateRows(data: readonly Record<string, unknown>[]): Record<string, unknown>[] {\n const variantName = this.state.variantName;\n if (!variantName) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const polyInfo = resolvePolymorphismInfo(this.contract, this.modelName);\n if (!polyInfo) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const variant = polyInfo.variants.get(variantName);\n if (!variant) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const baseFieldToColumn = getFieldToColumnMap(this.contract, this.modelName);\n const variantFieldToColumn = getFieldToColumnMap(this.contract, variant.modelName);\n const mergedFieldToColumn = { ...baseFieldToColumn, ...variantFieldToColumn };\n\n return data.map((row) => {\n const mapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row as Record<string, unknown>)) {\n if (value === undefined) continue;\n const columnName = mergedFieldToColumn[fieldName] ?? fieldName;\n mapped[columnName] = value;\n }\n mapped[polyInfo.discriminatorColumn] = variant.value;\n return mapped;\n });\n }\n\n /**\n * Write terminal: insert many rows without materializing the\n * inserted rows, returning the number of inserted records.\n *\n * Prefer `createAll(...)` when you need the returned rows; prefer\n * this when you only need to know how many rows were inserted (the\n * compiled plan skips `RETURNING`).\n *\n * ```typescript\n * const inserted = await db.orm.User.createCount([\n * { email: 'a@example.com' },\n * { email: 'b@example.com' },\n * ]);\n * // inserted === 2\n * ```\n *\n * Not supported on MTI variants — use `createAll(...)` instead.\n */\n async createCount(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n if (data.length === 0) {\n return 0;\n }\n\n this.#assertNotMtiVariant('createCount()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'createCount');\n\n const rows = data as readonly Record<string, unknown>[];\n const mappedRows = this.#mapCreateRows(rows);\n applyCreateDefaults(this.ctx, this.tableName, mappedRows);\n\n if (this.contract.capabilities?.['sql']?.['defaultInInsert'] !== true) {\n const plans = compileInsertCountSplit(this.contract, this.tableName, mappedRows).map((plan) =>\n mergeAnnotations(plan, annotationsMap),\n );\n for (const plan of plans) {\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, plan).toArray();\n }\n return data.length;\n }\n\n const compiled = mergeAnnotations(\n compileInsertCount(this.contract, this.tableName, mappedRows),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n return data.length;\n }\n\n /**\n * Write terminal: insert a row, or update the existing row on\n * conflict. Returns the resulting row (the inserted one or the\n * updated/existing one).\n *\n * `conflictOn` selects which unique constraint drives the conflict\n * resolution — omit to use the model's primary key.\n *\n * ```typescript\n * // Insert-or-update on email uniqueness:\n * await db.orm.User.upsert({\n * create: { email: 'alice@example.com', name: 'Alice' },\n * update: { name: 'Alice (updated)' },\n * conflictOn: { email: 'alice@example.com' },\n * });\n *\n * // Conditional create — `update: {}` keeps the existing row\n * // unchanged. `conflictOn` must reference the constraint that\n * // makes the row \"already exist\"; omit only when the conflict is\n * // on the primary key. On conflict,\n * // `ON CONFLICT DO NOTHING RETURNING ...` may return zero rows,\n * // so a follow-up reload is issued to fetch and return the\n * // existing row.\n * await db.orm.User.upsert({\n * create: { email: 'alice@example.com', name: 'Alice' },\n * update: {},\n * conflictOn: { email: 'alice@example.com' },\n * });\n * ```\n *\n * Not supported on MTI variants.\n */\n async upsert(\n input: {\n create: ResolvedCreateInput<TContract, ModelName, State['variantName']>;\n update: Partial<DefaultModelRow<TContract, ModelName>>;\n conflictOn?: UniqueConstraintCriterion<TContract, ModelName>;\n },\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row> {\n assertReturningCapability(this.contract, 'upsert()');\n this.#assertNotMtiVariant('upsert()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'upsert');\n\n const mappedCreateRows = this.#mapCreateRows([input.create as Record<string, unknown>]);\n const createValues = mappedCreateRows[0] ?? {};\n applyCreateDefaults(this.ctx, this.tableName, [createValues]);\n const updateValues = mapModelDataToStorageRow(this.contract, this.modelName, input.update);\n const hasUpdateValues = Object.keys(updateValues).length > 0;\n if (hasUpdateValues) {\n applyUpdateDefaults(this.ctx, this.tableName, updateValues);\n }\n const conflictColumns = resolveUpsertConflictColumns(\n this.contract,\n this.modelName,\n input.conflictOn as Record<string, unknown> | undefined,\n );\n if (conflictColumns.length === 0) {\n throw new Error(`upsert() for model \"${this.modelName}\" requires conflict columns`);\n }\n\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForUpsert, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileUpsertReturning(\n this.contract,\n this.tableName,\n createValues,\n updateValues,\n conflictColumns,\n selectedForUpsert,\n ),\n annotationsMap,\n );\n const row = await executeMutationReturningSingleRow<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n onMissingRowMessage: `upsert() for model \"${this.modelName}\" did not return a row`,\n });\n if (row) {\n return row;\n }\n\n if (!hasUpdateValues) {\n const conflictCriterion = this.#buildUpsertConflictCriterion(createValues, conflictColumns);\n const existing = await this.#reloadMutationRowByCriterion(\n conflictCriterion,\n 'upsert conflict',\n );\n if (existing) {\n return existing;\n }\n }\n\n throw new Error(`upsert() for model \"${this.modelName}\" did not return a row`);\n }\n\n /**\n * Write terminal: update matching rows and return the first one (or\n * `null` when no row matched). Requires a prior `.where(...)` —\n * calling `update(...)` on an unfiltered collection is a type error.\n *\n * Related rows can be created or relinked through relation\n * callbacks on parent/child-owned relations (one-to-one or\n * one-to-many). The callback receives a mutator exposing\n * `create(...)`, `connect(...)`, and `disconnect(...)`. Nested\n * updates against existing related rows, and many-to-many relations\n * as nested-mutation targets, are not supported through this API.\n *\n * ```typescript\n * // Update one row by id:\n * const updated = await db.orm.User\n * .where({ id: 1 })\n * .update({ name: 'Alice Renamed' });\n *\n * // Update + relink — runs as a graph of internal mutations:\n * await db.orm.User\n * .where({ id: 1 })\n * .update({\n * name: 'Alice',\n * posts: (posts) => posts.connect([{ id: 5 }]),\n * });\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n *\n * Note: when the input contains nested-mutation callbacks, the\n * operation is executed as a graph of internal queries via\n * `withMutationScope`. In that path, annotations apply to the logical\n * `update()` call but do not currently flow into each constituent SQL\n * statement issued for the related rows.\n */\n async update(\n data: State['hasWhere'] extends true ? MutationUpdateInput<TContract, ModelName> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row | null> {\n assertReturningCapability(this.contract, 'update()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'update');\n\n if (\n hasNestedMutationCallbacks(this.contract, this.modelName, data as Record<string, unknown>)\n ) {\n const updatedRow = await executeNestedUpdateMutation({\n context: this.ctx.context,\n runtime: this.ctx.runtime,\n modelName: this.modelName,\n filters: this.state.filters,\n data: data as MutationUpdateInput<Contract<SqlStorage>, string>,\n });\n if (!updatedRow) {\n return null;\n }\n\n const pkCriterion = buildPrimaryKeyFilterFromRow(this.contract, this.modelName, updatedRow);\n return this.#reloadMutationRowByPrimaryKey(pkCriterion);\n }\n\n return withMutationScope(this.ctx.runtime, async (scope) => {\n const scoped = this.#withRuntime(scope);\n const identityWhere = await scoped.#findFirstMatchingRowIdentityWhere();\n if (!identityWhere) {\n return null;\n }\n const narrowed = scoped.#clone({ filters: [identityWhere] });\n const rows = await narrowed.#updateAllWithAnnotations(\n data as State['hasWhere'] extends true\n ? Partial<DefaultModelRow<TContract, ModelName>>\n : never,\n annotationsMap,\n );\n return rows[0] ?? null;\n });\n }\n\n /**\n * Write terminal: update every matching row and stream the updated\n * rows. Requires a prior `.where(...)` filter.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams updated\n * rows as they arrive. Use whichever fits; a result can only be\n * consumed once. Streaming is the default; some driver/plan\n * combinations may still buffer internally before yielding.\n *\n * ```typescript\n * // Thenable — collect updated rows into an array:\n * const updated = await db.orm.Post\n * .where({ published: false })\n * .updateAll({ published: true });\n *\n * // Async iterable — stream updated rows as they arrive:\n * for await (const row of db.orm.Post.where({ draft: true }).updateAll({ draft: false })) {\n * console.log('published', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n updateAll(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return this.#updateAllWithAnnotations(\n data,\n this.#collectAnnotationsFromMeta(configure, 'write', 'updateAll'),\n );\n }\n\n #updateAllWithAnnotations(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n assertReturningCapability(this.contract, 'updateAll()');\n\n const mappedData = mapModelDataToStorageRow(this.contract, this.modelName, data);\n if (Object.keys(mappedData).length === 0) {\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {};\n return new AsyncIterableResult(generator());\n }\n\n applyUpdateDefaults(this.ctx, this.tableName, mappedData);\n\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForUpdate, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileUpdateReturning(\n this.contract,\n this.tableName,\n mappedData,\n this.state.filters,\n selectedForUpdate,\n ),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n /**\n * Write terminal: update every matching row without returning them,\n * resolving to the count of rows that were updated. Requires a prior\n * `.where(...)` filter.\n *\n * Prefer `updateAll(...)` when you need the updated rows; prefer\n * this when you only need the affected-row count.\n *\n * ```typescript\n * const count = await db.orm.Post\n * .where({ published: false })\n * .updateCount({ published: true });\n * ```\n */\n async updateCount(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n const mappedData = mapModelDataToStorageRow(this.contract, this.modelName, data);\n if (Object.keys(mappedData).length === 0) {\n return 0;\n }\n\n applyUpdateDefaults(this.ctx, this.tableName, mappedData);\n\n // Annotations attach to the write, not the matching read.\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'updateCount');\n\n const primaryKeyColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n const countState: CollectionState = {\n ...emptyState(),\n filters: this.state.filters,\n selectedFields: [primaryKeyColumn],\n };\n const countCompiled = compileSelect(this.contract, this.tableName, countState);\n const matchingRows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n countCompiled,\n ).toArray();\n\n const compiled = mergeAnnotations(\n compileUpdateCount(this.contract, this.tableName, mappedData, this.state.filters),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n\n return matchingRows.length;\n }\n\n /**\n * Write terminal: delete matching rows and return the first deleted\n * row (or `null` when no row matched). Requires a prior `.where(...)`\n * — calling `delete()` on an unfiltered collection is a type error.\n *\n * ```typescript\n * const deleted = await db.orm.User.where({ id: 1 }).delete();\n * if (deleted) console.log('deleted', deleted.email);\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n async delete(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row | null> {\n assertReturningCapability(this.contract, 'delete()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'delete');\n return withMutationScope(this.ctx.runtime, async (scope) => {\n const scoped = this.#withRuntime(scope);\n const identityWhere = await scoped.#findFirstMatchingRowIdentityWhere();\n if (!identityWhere) {\n return null;\n }\n const narrowed = scoped.#clone({ filters: [identityWhere] });\n const rows = await narrowed.#executeDeleteReturning(annotationsMap).toArray();\n return rows[0] ?? null;\n });\n }\n\n /**\n * Write terminal: delete every matching row and stream the deleted\n * rows. Requires a prior `.where(...)` filter.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams deleted\n * rows as they arrive. Use whichever fits; a result can only be\n * consumed once. Streaming is the default; some driver/plan\n * combinations may still buffer internally before yielding.\n *\n * ```typescript\n * // Thenable — collect the deleted rows into an array:\n * const deleted = await db.orm.Post.where({ archived: true }).deleteAll();\n *\n * // Async iterable — stream deleted rows as they arrive:\n * for await (const row of db.orm.Post.where({ archived: true }).deleteAll()) {\n * console.log('removed', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n deleteAll(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return (this as Collection<TContract, ModelName, Row, State>).#deleteAllWithAnnotations(\n this.#collectAnnotationsFromMeta(configure, 'write', 'deleteAll'),\n );\n }\n\n #deleteAllWithAnnotations(\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n assertReturningCapability(this.contract, 'deleteAll()');\n return this.#executeDeleteReturning(annotationsMap);\n }\n\n #executeDeleteReturning(\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForDelete, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileDeleteReturning(this.contract, this.tableName, this.state.filters, selectedForDelete),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n /**\n * Write terminal: delete every matching row without returning them,\n * resolving to the count of rows that were deleted. Requires a prior\n * `.where(...)` filter.\n *\n * Prefer `deleteAll(...)` when you need the deleted rows; prefer\n * this when you only need the affected-row count.\n *\n * ```typescript\n * const removed = await db.orm.Post.where({ archived: true }).deleteCount();\n * ```\n */\n async deleteCount(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n // Annotations attach to the write, not the matching read.\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'deleteCount');\n\n const primaryKeyColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n const countState: CollectionState = {\n ...emptyState(),\n filters: this.state.filters,\n selectedFields: [primaryKeyColumn],\n };\n const countCompiled = compileSelect(this.contract, this.tableName, countState);\n const matchingRows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n countCompiled,\n ).toArray();\n\n const compiled = mergeAnnotations(\n compileDeleteCount(this.contract, this.tableName, this.state.filters),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n\n return matchingRows.length;\n }\n\n #buildUpsertConflictCriterion(\n createValues: Record<string, unknown>,\n conflictColumns: readonly string[],\n ): Record<string, unknown> {\n const columnToField = getColumnToFieldMap(this.contract, this.modelName);\n const criterion: Record<string, unknown> = {};\n\n for (const columnName of conflictColumns) {\n if (!(columnName in createValues)) {\n throw new Error(\n `upsert() for model \"${this.modelName}\" requires create value for conflict column \"${columnName}\"`,\n );\n }\n\n const fieldName = columnToField[columnName] ?? columnName;\n criterion[fieldName] = createValues[columnName];\n }\n\n return criterion;\n }\n\n async #findFirstMatchingRowIdentityWhere(): Promise<AnyExpression | null> {\n const identityColumns = resolveRowIdentityColumns(this.contract, this.tableName);\n if (identityColumns.length === 0) {\n throw new Error(\n `update()/delete() on model \"${this.modelName}\" requires the table to have a primary key or unique constraint`,\n );\n }\n const firstRow = await this.#clone({\n selectedFields: [...identityColumns],\n includes: [],\n }).first();\n if (!firstRow) {\n return null;\n }\n const columnToField = getColumnToFieldMap(this.contract, this.modelName);\n const criterion: Record<string, unknown> = {};\n for (const column of identityColumns) {\n const fieldName = columnToField[column] ?? column;\n const value = (firstRow as Record<string, unknown>)[fieldName];\n if (value === undefined) {\n throw new Error(\n `Missing identity field \"${fieldName}\" while resolving single-row scope for model \"${this.modelName}\"`,\n );\n }\n criterion[fieldName] = value;\n }\n return (\n shorthandToWhereExpr(\n this.ctx.context,\n this.modelName,\n criterion as ShorthandWhereFilter<TContract, ModelName>,\n ) ?? null\n );\n }\n\n async #reloadMutationRowByPrimaryKey(criterion: Record<string, unknown>): Promise<Row | null> {\n return this.#reloadMutationRowByCriterion(criterion, 'primary key');\n }\n\n async #reloadMutationRowByCriterion(\n criterion: Record<string, unknown>,\n criterionLabel: string,\n ): Promise<Row | null> {\n const whereExpr = shorthandToWhereExpr(\n this.ctx.context,\n this.modelName,\n criterion as ShorthandWhereFilter<TContract, ModelName>,\n );\n if (!whereExpr) {\n throw new Error(\n `Failed to build ${criterionLabel} filter for mutation result on model \"${this.modelName}\"`,\n );\n }\n\n const resultState: CollectionState = {\n ...emptyState(),\n filters: [whereExpr],\n includes: this.state.includes,\n selectedFields: this.state.selectedFields,\n limit: 1,\n };\n\n const rows = await dispatchCollectionRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n state: resultState,\n tableName: this.tableName,\n modelName: this.modelName,\n });\n return rows[0] ?? null;\n }\n\n #assertIncludeRefinementMode(action: string): void {\n if (this.includeRefinementMode) {\n return;\n }\n\n throw new Error(`${action} is only available inside include() refinement callbacks`);\n }\n\n #clone<NextState extends CollectionTypeState = State>(\n overrides: Partial<CollectionState>,\n ): Collection<TContract, ModelName, Row, NextState> {\n return this.#createSelf<Row, NextState>({\n ...this.state,\n ...overrides,\n });\n }\n\n #withRuntime(runtime: RuntimeQueryable): Collection<TContract, ModelName, Row, State> {\n const Ctor = this.constructor as CollectionConstructor<TContract>;\n return new Ctor({ ...this.ctx, runtime }, this.modelName, {\n tableName: this.tableName,\n state: this.state,\n registry: this.registry,\n includeRefinementMode: this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelName, Row, State>;\n }\n\n #cloneWithRow<NextRow, NextState extends CollectionTypeState = State>(\n overrides: Partial<CollectionState>,\n ): Collection<TContract, ModelName, NextRow, NextState> {\n return this.#createSelf<NextRow, NextState>({\n ...this.state,\n ...overrides,\n });\n }\n\n #createSelf<NextRow, NextState extends CollectionTypeState>(\n state: CollectionState,\n ): Collection<TContract, ModelName, NextRow, NextState> {\n const Ctor = this.constructor as CollectionConstructor<TContract>;\n return new Ctor(this.ctx, this.modelName, {\n tableName: this.tableName,\n state,\n registry: this.registry,\n includeRefinementMode: this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelName, NextRow, NextState>;\n }\n\n #createCollection<\n ModelNameInner extends string,\n RowInner,\n StateInner extends CollectionTypeState,\n >(\n modelName: ModelNameInner,\n options: CollectionInit<TContract>,\n ): Collection<TContract, ModelNameInner, RowInner, StateInner> {\n const Ctor =\n (this.registry.get(modelName) as CollectionConstructor<TContract> | undefined) ??\n (Collection as unknown as CollectionConstructor<TContract>);\n return new Ctor(this.ctx, modelName, {\n tableName: options.tableName,\n state: options.state,\n registry:\n options.registry ??\n (this.registry as ReadonlyMap<string, CollectionConstructor<TContract>>),\n includeRefinementMode: options.includeRefinementMode ?? this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelNameInner, RowInner, StateInner>;\n }\n\n #dispatch(): AsyncIterableResult<Row> {\n return dispatchCollectionRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n state: this.state,\n tableName: this.tableName,\n modelName: this.modelName,\n });\n }\n\n /**\n * Invokes the user-supplied configurator (if any) against a freshly\n * constructed read meta builder, and returns a clone whose\n * `state.annotations` carries the recorded map. Used by read\n * terminals that flow annotations through state (`all`, `first`).\n *\n * Returns the receiver unchanged when no configurator was supplied\n * or when the configurator did not call `meta.annotate(...)`. The\n * meta builder's `annotate` method enforces applicability at the\n * type level and at runtime, so terminal code does not need to\n * re-validate.\n */\n #withAnnotationsFromMeta(\n configure: ((meta: MetaBuilder<'read'>) => void) | undefined,\n terminalName: string,\n ): this {\n if (configure === undefined) {\n return this;\n }\n const meta = createMetaBuilder('read', terminalName);\n configure(meta);\n if (meta.annotations.size === 0) {\n return this;\n }\n const next = new Map(this.state.annotations);\n for (const [namespace, value] of meta.annotations) {\n next.set(namespace, value);\n }\n return this.#clone({ annotations: next }) as this;\n }\n\n /**\n * Invokes the user-supplied configurator (if any) against a freshly\n * constructed meta builder of the given operation kind, and returns\n * the recorded annotation map (or `undefined` when empty). Used by\n * terminals where annotations don't flow through `state` — the\n * compiled plan is post-wrapped via `mergeAnnotations` instead.\n * Read terminals `all` and `first` populate `state.annotations`\n * via `#withAnnotationsFromMeta` instead; `aggregate` uses this\n * post-wrap path because its compile function doesn't take `state`.\n * The meta builder's `annotate` method enforces applicability at the\n * type level and at runtime.\n */\n #collectAnnotationsFromMeta<K extends OperationKind>(\n configure: ((meta: MetaBuilder<K>) => void) | undefined,\n kind: K,\n terminalName: string,\n ): ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined {\n if (configure === undefined) {\n return undefined;\n }\n const meta = createMetaBuilder(kind, terminalName);\n configure(meta);\n return meta.annotations.size === 0 ? undefined : meta.annotations;\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { Collection } from './collection';\nimport type {\n CollectionContext,\n CollectionModelName,\n CollectionTypeState,\n InferRootRow,\n RuntimeQueryable,\n} from './types';\n\nexport interface OrmOptions<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> {\n readonly runtime: RuntimeQueryable;\n readonly collections?: Collections;\n readonly context: ExecutionContext<TContract>;\n}\n\ntype ModelNames<TContract extends Contract<SqlStorage>> = CollectionModelName<TContract>;\n\ntype AnyCollectionClass = new (...args: never[]) => object;\n\ntype CustomCollectionForKey<\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n Key extends string,\n> = Key extends keyof Collections\n ? Collections[Key] extends AnyCollectionClass\n ? InstanceType<Collections[Key]>\n : never\n : never;\n\ntype ModelCollection<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n ModelName extends ModelNames<TContract>,\n> = [CustomCollectionForKey<Collections, ModelName>] extends [never]\n ? Collection<TContract, ModelName, InferRootRow<TContract, ModelName>>\n : CustomCollectionForKey<Collections, ModelName>;\n\ntype ModelCollectionMap<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> = {\n [K in ModelNames<TContract>]: ModelCollection<TContract, Collections, K>;\n};\n\ntype OrmClient<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> = ModelCollectionMap<TContract, Collections>;\n\nexport function orm<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>> = Record<never, never>,\n>(options: OrmOptions<TContract, Collections>): OrmClient<TContract, Collections> {\n const { runtime, collections, context } = options;\n const contract = context.contract;\n const ctx: CollectionContext<TContract> = { runtime, context };\n const modelNames = new Set(Object.keys(contract.models));\n const collectionRegistry = createCollectionRegistry(contract, collections);\n const cache = new Map<\n ModelNames<TContract>,\n Collection<TContract, string, unknown, CollectionTypeState>\n >();\n\n return new Proxy({} as OrmClient<TContract, Collections>, {\n get(_target, prop: string | symbol): unknown {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n if (!modelNames.has(prop)) {\n throw new Error(\n `No model found for '${prop}'. Available models: ${[...modelNames].join(', ')}`,\n );\n }\n\n const modelName = prop as ModelNames<TContract>;\n\n const cached = cache.get(modelName);\n if (cached) {\n return cached;\n }\n\n const CollectionClass =\n collectionRegistry.get(modelName) ?? (Collection as unknown as AnyCollectionClass);\n const CollectionCtor = CollectionClass as unknown as new (\n ctx: CollectionContext<TContract>,\n modelName: string,\n options?: Record<string, unknown>,\n ) => Collection<TContract, string, unknown, CollectionTypeState>;\n const collection = new CollectionCtor(ctx, modelName, {\n registry: collectionRegistry,\n }) as ModelCollection<TContract, Collections, ModelNames<TContract>>;\n cache.set(\n modelName,\n collection as unknown as Collection<TContract, string, unknown, CollectionTypeState>,\n );\n return collection;\n },\n });\n}\n\nfunction createCollectionRegistry<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n>(\n contract: TContract,\n collections: Collections | undefined,\n): Map<ModelNames<TContract>, AnyCollectionClass> {\n const registry = new Map<ModelNames<TContract>, AnyCollectionClass>();\n if (!collections) {\n return registry;\n }\n\n const models = contract.models;\n for (const [key, collectionClass] of Object.entries(collections)) {\n if (!collectionClass) {\n continue;\n }\n if (!isCollectionClass(collectionClass)) {\n throw new Error(\n `Custom collection '${key}' must be a Collection class (constructor), not an instance`,\n );\n }\n if (!Object.hasOwn(models, key)) {\n throw new Error(\n `No model found for custom collection '${key}'. Available models: ${Object.keys(models).join(', ')}`,\n );\n }\n registry.set(key as ModelNames<TContract>, collectionClass as AnyCollectionClass);\n }\n\n return registry;\n}\n\nfunction isCollectionClass(value: unknown): value is AnyCollectionClass {\n if (typeof value !== 'function') {\n return false;\n }\n const candidate = value as { prototype?: unknown };\n if (!candidate.prototype || typeof candidate.prototype !== 'object') {\n return false;\n }\n return candidate.prototype instanceof Collection;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["unboundTable","candidate","#clone","#cloneWithRow","#createCollection","#assertIncludeRefinementMode","#withAnnotationsFromMeta","#dispatch","#collectAnnotationsFromMeta","#reloadMutationRowByPrimaryKey","#createAllWithAnnotations","#resolveMtiCreateContext","#executeMtiCreate","#mapCreateRows","#assertNotMtiVariant","#buildUpsertConflictCriterion","#reloadMutationRowByCriterion","#withRuntime","#findFirstMatchingRowIdentityWhere","#updateAllWithAnnotations","#executeDeleteReturning","#deleteAllWithAnnotations","#createSelf"],"sources":["../src/collection-contract.ts","../src/aggregate-builder.ts","../src/collection-aggregate-result.ts","../src/collection-column-mapping.ts","../src/collection-runtime.ts","../src/execute-query-plan.ts","../src/include-strategy.ts","../src/include-tree-predicates.ts","../src/query-plan-meta.ts","../src/where-utils.ts","../src/query-plan-aggregate.ts","../src/query-plan-mutations.ts","../src/where-binding.ts","../src/query-plan-select.ts","../src/collection-dispatch.ts","../src/collection-mutation-dispatch.ts","../src/filters.ts","../src/grouped-collection.ts","../src/include-descriptors.ts","../src/types.ts","../src/model-accessor.ts","../src/relation-mutator.ts","../src/mutation-executor.ts","../src/where-interop.ts","../src/collection.ts","../src/orm.ts"],"sourcesContent":["import type { Contract, ContractFieldType } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { RelationCardinalityTag } from './types';\n\ntype ModelStorageFields = Record<string, { column?: string }>;\ntype ModelEntry = {\n storage?: { table?: string; fields?: ModelStorageFields };\n relations?: Record<string, unknown>;\n fields?: Record<string, { type?: ContractFieldType }>;\n discriminator?: { field: string };\n variants?: Record<string, { value: string }>;\n base?: string;\n};\ntype ModelsMap = Record<string, ModelEntry>;\n\nexport interface PolymorphismVariantInfo {\n readonly modelName: string;\n readonly value: string;\n readonly table: string;\n readonly strategy: 'sti' | 'mti';\n}\n\nexport interface PolymorphismInfo {\n readonly discriminatorField: string;\n readonly discriminatorColumn: string;\n readonly baseTable: string;\n readonly variants: ReadonlyMap<string, PolymorphismVariantInfo>;\n readonly variantsByValue: ReadonlyMap<string, PolymorphismVariantInfo>;\n readonly mtiVariants: readonly PolymorphismVariantInfo[];\n}\n\nfunction unboundTable(contract: Contract<SqlStorage>, tableName: string): StorageTable | undefined {\n return contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n}\n\nfunction modelsOf(contract: Contract<SqlStorage>): ModelsMap {\n return contract.models as ModelsMap;\n}\n\nexport function modelOf(contract: Contract<SqlStorage>, name: string): ModelEntry | undefined {\n return modelsOf(contract)[name];\n}\n\nconst fieldToColumnCache = new WeakMap<object, Map<string, Record<string, string>>>();\nconst columnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\nconst polymorphismCache = new WeakMap<object, Map<string, PolymorphismInfo | undefined>>();\n\nexport function resolvePolymorphismInfo(\n contract: Contract<SqlStorage>,\n modelName: string,\n): PolymorphismInfo | undefined {\n let perContract = polymorphismCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n polymorphismCache.set(contract, perContract);\n }\n if (perContract.has(modelName)) return perContract.get(modelName);\n\n const models = modelsOf(contract);\n const model = models[modelName];\n if (!model?.discriminator || !model.variants) {\n perContract.set(modelName, undefined);\n return undefined;\n }\n\n const baseTable = model.storage?.table;\n if (!baseTable) {\n perContract.set(modelName, undefined);\n return undefined;\n }\n\n const discriminatorField = model.discriminator.field;\n const discriminatorColumn = resolveFieldToColumn(contract, modelName, discriminatorField);\n\n const variants = new Map<string, PolymorphismVariantInfo>();\n const variantsByValue = new Map<string, PolymorphismVariantInfo>();\n const mtiVariants: PolymorphismVariantInfo[] = [];\n\n for (const [variantModelName, variantEntry] of Object.entries(model.variants)) {\n const variantModel = models[variantModelName];\n if (!variantModel) {\n throw new Error(\n `Model \"${modelName}\" declares variant \"${variantModelName}\", but that model is missing from the contract`,\n );\n }\n const variantTable = variantModel.storage?.table ?? baseTable;\n const strategy = variantTable === baseTable ? 'sti' : 'mti';\n\n const info: PolymorphismVariantInfo = {\n modelName: variantModelName,\n value: variantEntry.value,\n table: variantTable,\n strategy,\n };\n\n variants.set(variantModelName, info);\n variantsByValue.set(variantEntry.value, info);\n if (strategy === 'mti') {\n mtiVariants.push(info);\n }\n }\n\n const result: PolymorphismInfo = {\n discriminatorField,\n discriminatorColumn,\n baseTable,\n variants,\n variantsByValue,\n mtiVariants,\n };\n\n perContract.set(modelName, result);\n return result;\n}\n\nexport function resolveFieldToColumn(\n contract: Contract<SqlStorage>,\n modelName: string,\n fieldName: string,\n): string {\n return getFieldToColumnMap(contract, modelName)[fieldName] ?? fieldName;\n}\n\nexport function getFieldToColumnMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = fieldToColumnCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n fieldToColumnCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n if (s?.column) cached[f] = s.column;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\nexport function getColumnToFieldMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = columnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n columnToFieldCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n if (s?.column) cached[s.column] = f;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\nconst completeColumnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\n\n/**\n * Like getColumnToFieldMap but includes identity-mapped fields (where field name equals column\n * name). getColumnToFieldMap only returns explicit remaps; this returns ALL column→field entries.\n */\nexport function getCompleteColumnToFieldMap(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, string> {\n let perContract = completeColumnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n completeColumnToFieldCache.set(contract, perContract);\n }\n let cached = perContract.get(modelName);\n if (cached) return cached;\n\n const storageFields = modelsOf(contract)[modelName]?.storage?.fields ?? {};\n cached = {};\n for (const [f, s] of Object.entries(storageFields)) {\n cached[s?.column ?? f] = f;\n }\n perContract.set(modelName, cached);\n return cached;\n}\n\ninterface ResolvedRelation {\n readonly to: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly on: {\n readonly localFields: readonly string[];\n readonly targetFields: readonly string[];\n };\n}\n\nexport interface ResolvedIncludeRelation {\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly targetColumn: string;\n readonly localColumn: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n}\n\nexport function resolveIncludeRelation(\n contract: Contract<SqlStorage>,\n modelName: string,\n relationName: string,\n): ResolvedIncludeRelation {\n const relations = resolveModelRelations(contract, modelName);\n const relation = relations[relationName];\n if (!relation) {\n throw new Error(`Relation '${relationName}' not found on model '${modelName}'`);\n }\n const localField = relation.on.localFields[0];\n const targetField = relation.on.targetFields[0];\n if (!localField || !targetField) {\n throw new Error(\n `Relation '${relationName}' on model '${modelName}' has incomplete join metadata (missing localFields or targetFields)`,\n );\n }\n\n const relatedTableName = resolveModelTableName(contract, relation.to);\n const localColumn = resolveFieldToColumn(contract, modelName, localField);\n const targetColumn = resolveFieldToColumn(contract, relation.to, targetField);\n\n return {\n relatedModelName: relation.to,\n relatedTableName,\n targetColumn,\n localColumn,\n cardinality: relation.cardinality,\n };\n}\n\nconst modelRelationsCache = new WeakMap<object, Map<string, Record<string, ResolvedRelation>>>();\n\nexport function resolveModelRelations(\n contract: Contract<SqlStorage>,\n modelName: string,\n): Record<string, ResolvedRelation> {\n let perContract = modelRelationsCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n modelRelationsCache.set(contract, perContract);\n }\n const cached = perContract.get(modelName);\n if (cached) return cached;\n\n const models = modelsOf(contract);\n const relationMap = models[modelName]?.relations ?? {};\n const resolved: Record<string, ResolvedRelation> = {};\n\n for (const [name, value] of Object.entries(relationMap)) {\n if (!value || typeof value !== 'object') continue;\n\n const rel = value as {\n to?: unknown;\n cardinality?: unknown;\n on?: { localFields?: unknown; targetFields?: unknown };\n };\n const localFields = rel.on?.localFields;\n const targetFields = rel.on?.targetFields;\n\n if (typeof rel.to !== 'string' || !Array.isArray(localFields) || !Array.isArray(targetFields)) {\n continue;\n }\n\n resolved[name] = {\n to: rel.to,\n cardinality: parseRelationCardinality(rel.cardinality),\n on: {\n localFields: localFields as readonly string[],\n targetFields: targetFields as readonly string[],\n },\n };\n }\n\n perContract.set(modelName, resolved);\n return resolved;\n}\n\nexport function parseRelationCardinality(value: unknown): RelationCardinalityTag | undefined {\n if (value === '1:1' || value === 'N:1' || value === '1:N' || value === 'M:N') {\n return value;\n }\n return undefined;\n}\n\nexport function resolveUpsertConflictColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n conflictOn: Record<string, unknown> | undefined,\n): string[] {\n if (conflictOn && typeof conflictOn === 'object') {\n const columns = Object.keys(conflictOn).map((fieldName) =>\n resolveFieldToColumn(contract, modelName, fieldName),\n );\n if (columns.length > 0) {\n return columns;\n }\n }\n\n const tableName = resolveModelTableName(contract, modelName);\n const primaryKeyColumns = unboundTable(contract, tableName)?.primaryKey?.columns ?? [];\n return [...primaryKeyColumns];\n}\n\nexport function resolveModelTableName(contract: Contract<SqlStorage>, modelName: string): string {\n const model = modelsOf(contract)[modelName];\n if (!model) {\n throw new Error(`Model \"${modelName}\" not found in contract`);\n }\n if (model.storage && typeof model.storage.table === 'string') {\n return model.storage.table;\n }\n throw new Error(`Model \"${modelName}\" has invalid or missing storage.table in the contract`);\n}\n\nexport function resolvePrimaryKeyColumn(contract: Contract<SqlStorage>, tableName: string): string {\n return unboundTable(contract, tableName)?.primaryKey?.columns[0] ?? 'id';\n}\n\nexport function resolveRowIdentityColumns(\n contract: Contract<SqlStorage>,\n tableName: string,\n): readonly string[] {\n const table = unboundTable(contract, tableName);\n if (!table) {\n return [];\n }\n if (table.primaryKey && table.primaryKey.columns.length > 0) {\n return table.primaryKey.columns;\n }\n for (const unique of table.uniques) {\n if (unique.columns.length > 0) {\n return unique.columns;\n }\n }\n return [];\n}\n\nexport function assertReturningCapability(contract: Contract<SqlStorage>, action: string): void {\n if (hasContractCapability(contract, 'returning')) {\n return;\n }\n\n throw new Error(`${action} requires contract capability \"returning\"`);\n}\n\nexport function hasContractCapability(contract: Contract<SqlStorage>, capability: string): boolean {\n const capabilities = contract.capabilities;\n const value = capabilities[capability];\n\n if (capabilityEnabled(value)) {\n return true;\n }\n\n return Object.values(capabilities).some((targetCapabilities) => {\n if (typeof targetCapabilities !== 'object' || targetCapabilities === null) {\n return false;\n }\n return capabilityEnabled(targetCapabilities[capability]);\n });\n}\n\nfunction capabilityEnabled(value: unknown): boolean {\n if (value === true) {\n return true;\n }\n\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return Object.values(value as Record<string, unknown>).some((flag) => flag === true);\n}\n\nexport function isToOneCardinality(cardinality: RelationCardinalityTag | undefined): boolean {\n return cardinality === '1:1' || cardinality === 'N:1';\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { getFieldToColumnMap } from './collection-contract';\nimport type { AggregateBuilder, AggregateSelector, NumericFieldNames } from './types';\n\nexport function createAggregateBuilder<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(contract: TContract, modelName: ModelName): AggregateBuilder<TContract, ModelName> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n\n return {\n count() {\n return {\n kind: 'aggregate',\n fn: 'count',\n };\n },\n sum(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'sum');\n },\n avg(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'avg');\n },\n min(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'min');\n },\n max(field) {\n return createFieldAggregateSelector(fieldToColumn, field, 'max');\n },\n };\n}\n\nexport function isAggregateSelector(value: unknown): value is AggregateSelector<unknown> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const candidate = value as { kind?: unknown; fn?: unknown };\n if (candidate.kind !== 'aggregate') {\n return false;\n }\n\n return (\n candidate.fn === 'count' ||\n candidate.fn === 'sum' ||\n candidate.fn === 'avg' ||\n candidate.fn === 'min' ||\n candidate.fn === 'max'\n );\n}\n\nfunction createFieldAggregateSelector<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(\n fieldToColumn: Record<string, string>,\n field: NumericFieldNames<TContract, ModelName>,\n fn: 'sum' | 'avg' | 'min' | 'max',\n): AggregateSelector<number | null> {\n const fieldName = field as string;\n return {\n kind: 'aggregate',\n fn,\n column: fieldToColumn[fieldName] ?? fieldName,\n };\n}\n","import type { AggregateResult, AggregateSelector } from './types';\n\nexport function normalizeAggregateResult<Spec extends Record<string, AggregateSelector<unknown>>>(\n aggregateSpec: Spec,\n row: Record<string, unknown>,\n): AggregateResult<Spec> {\n const result: Record<string, unknown> = {};\n\n for (const [alias, selector] of Object.entries(aggregateSpec)) {\n const value = row[alias];\n if (value === null) {\n result[alias] = null;\n continue;\n }\n\n if (value === undefined) {\n result[alias] = selector.fn === 'count' ? 0 : null;\n continue;\n }\n\n if (typeof value === 'number') {\n result[alias] = value;\n continue;\n }\n\n if (typeof value === 'bigint') {\n result[alias] = Number(value);\n continue;\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n result[alias] = Number.isNaN(numeric) ? value : numeric;\n continue;\n }\n\n result[alias] = value;\n }\n\n return result as AggregateResult<Spec>;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { getFieldToColumnMap } from './collection-contract';\n\nexport function mapFieldsToColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n fieldNames: readonly string[],\n): string[] {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n return fieldNames.map((fieldName) => fieldToColumn[fieldName] ?? fieldName);\n}\n\nexport function mapCursorValuesToColumns(\n contract: Contract<SqlStorage>,\n modelName: string,\n cursorValues: Readonly<Record<string, unknown>>,\n): Record<string, unknown> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const mappedCursor: Record<string, unknown> = {};\n\n for (const [fieldName, value] of Object.entries(cursorValues)) {\n if (value === undefined) {\n continue;\n }\n\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n mappedCursor[columnName] = value;\n }\n\n return mappedCursor;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnToFieldMap,\n getCompleteColumnToFieldMap,\n getFieldToColumnMap,\n type PolymorphismInfo,\n} from './collection-contract';\nimport type { CollectionContext, RuntimeConnection } from './types';\n\nexport interface RowEnvelope {\n readonly raw: Record<string, unknown>;\n readonly mapped: Record<string, unknown>;\n}\n\nexport function augmentSelectionForJoinColumns(\n selectedFields: readonly string[] | undefined,\n requiredColumns: readonly string[],\n): {\n selectedForQuery: readonly string[] | undefined;\n hiddenColumns: readonly string[];\n} {\n if (!selectedFields) {\n return {\n selectedForQuery: selectedFields,\n hiddenColumns: [],\n };\n }\n\n const hiddenColumns = requiredColumns.filter((column) => !selectedFields.includes(column));\n if (hiddenColumns.length === 0) {\n return {\n selectedForQuery: selectedFields,\n hiddenColumns: [],\n };\n }\n\n return {\n selectedForQuery: [...selectedFields, ...hiddenColumns],\n hiddenColumns,\n };\n}\n\nexport function stripHiddenMappedFields(\n contract: Contract<SqlStorage>,\n modelName: string,\n mapped: Record<string, unknown>,\n hiddenColumns: readonly string[],\n): void {\n if (hiddenColumns.length === 0) {\n return;\n }\n\n const columnToField = getColumnToFieldMap(contract, modelName);\n for (const hiddenColumn of hiddenColumns) {\n const fieldName = columnToField[hiddenColumn] ?? hiddenColumn;\n delete mapped[fieldName];\n }\n}\n\nexport function createRowEnvelope(\n contract: Contract<SqlStorage>,\n modelName: string,\n raw: Record<string, unknown>,\n): RowEnvelope {\n return {\n raw,\n mapped: mapStorageRowToModelFields(contract, modelName, raw),\n };\n}\n\nexport function mapStorageRowToModelFields(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const columnToField = getColumnToFieldMap(contract, modelName);\n if (Object.keys(columnToField).length === 0) {\n return { ...row };\n }\n\n const mapped: Record<string, unknown> = {};\n for (const [columnName, value] of Object.entries(row)) {\n mapped[columnToField[columnName] ?? columnName] = value;\n }\n return mapped;\n}\n\nconst mergedColumnToFieldCache = new WeakMap<object, Map<string, Record<string, string>>>();\n\nfunction getMergedColumnToFieldMap(\n contract: Contract<SqlStorage>,\n baseModelName: string,\n variantModelName: string,\n variantTable: string | undefined,\n): Record<string, string> {\n const cacheKey = `${baseModelName}:${variantModelName}:${variantTable ?? ''}`;\n let perContract = mergedColumnToFieldCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n mergedColumnToFieldCache.set(contract, perContract);\n }\n const cached = perContract.get(cacheKey);\n if (cached) return cached;\n\n const baseMap = getCompleteColumnToFieldMap(contract, baseModelName);\n const variantMap = getCompleteColumnToFieldMap(contract, variantModelName);\n\n const merged: Record<string, string> = { ...baseMap };\n for (const [col, field] of Object.entries(variantMap)) {\n if (variantTable) {\n merged[`${variantTable}__${col}`] = field;\n } else {\n merged[col] = field;\n }\n }\n\n perContract.set(cacheKey, merged);\n return merged;\n}\n\nexport function mapPolymorphicRow(\n contract: Contract<SqlStorage>,\n baseModelName: string,\n polyInfo: PolymorphismInfo,\n row: Record<string, unknown>,\n variantName?: string,\n): Record<string, unknown> {\n const variant = variantName\n ? polyInfo.variants.get(variantName)\n : polyInfo.variantsByValue.get(row[polyInfo.discriminatorColumn] as string);\n\n if (!variant) {\n const baseMap = getCompleteColumnToFieldMap(contract, baseModelName);\n const mapped: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(row)) {\n const field = baseMap[col];\n if (field !== undefined) {\n mapped[field] = val;\n }\n }\n return mapped;\n }\n\n const mtiTable = variant.strategy === 'mti' ? variant.table : undefined;\n const mergedMap = getMergedColumnToFieldMap(contract, baseModelName, variant.modelName, mtiTable);\n const mapped: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(row)) {\n const field = mergedMap[col];\n if (field !== undefined) {\n mapped[field] = val;\n }\n }\n return mapped;\n}\n\nexport function mapModelDataToStorageRow(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const mapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row)) {\n if (value === undefined) {\n continue;\n }\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n mapped[columnName] = value;\n }\n return mapped;\n}\n\nexport function mapResultRows<TIn, TOut>(\n result: AsyncIterableResult<TIn>,\n mapper: (value: TIn) => TOut,\n): AsyncIterableResult<TOut> {\n const generator = async function* (): AsyncGenerator<TOut, void, unknown> {\n for await (const value of result) {\n yield mapper(value);\n }\n };\n return new AsyncIterableResult(generator());\n}\n\nexport async function acquireRuntimeScope(\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'],\n): Promise<{\n scope: RuntimeScope;\n release?: () => Promise<void>;\n}> {\n if (typeof runtime.connection !== 'function') {\n return { scope: runtime };\n }\n\n const connection = await runtime.connection();\n if (typeof connection.release === 'function') {\n return {\n scope: connection,\n release: () => (connection as RuntimeConnection).release?.() ?? Promise.resolve(),\n };\n }\n\n return { scope: connection };\n}\n","import type { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlExecutionPlan, SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\n\nexport function executeQueryPlan<Row>(\n scope: RuntimeScope,\n plan: SqlExecutionPlan<Row> | SqlQueryPlan<Row>,\n): AsyncIterableResult<Row> {\n return scope.execute(plan);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\n\nexport type IncludeStrategy = 'lateral' | 'correlated' | 'multiQuery';\n\n/**\n * Choose the SQL emission strategy for nested includes based on the\n * contract's declared capabilities.\n *\n * - `'lateral'`: outer SELECT with one LATERAL JOIN per relation,\n * aggregating to JSON. Requires both `lateral` and `jsonAgg`.\n * Postgres has both.\n * - `'correlated'`: outer SELECT with one correlated subquery per\n * relation, aggregating to JSON. Requires `jsonAgg` only.\n * SQLite has `jsonAgg` (via `json_group_array`) but no LATERAL.\n * - `'multiQuery'`: fallback. One SELECT per relation, stitched\n * together in JS via `WHERE pk IN (parent-pk-values)`. Always\n * correct; just N+1 round-trips.\n *\n * The capability flags are looked up under the contract's\n * `targetFamily` and `target` namespaces — the two layers the contract\n * emitter actually populates. Cross-namespace (\"`postgres.lateral`\n * found while running SQLite\") false positives are impossible because\n * we only inspect the running target's namespaces.\n */\nexport function selectIncludeStrategy(contract: Contract<SqlStorage>): IncludeStrategy {\n const hasLateral = capabilityFlag(contract, 'lateral');\n const hasJsonAgg = capabilityFlag(contract, 'jsonAgg');\n\n if (hasLateral && hasJsonAgg) {\n return 'lateral';\n }\n\n if (hasJsonAgg) {\n return 'correlated';\n }\n\n return 'multiQuery';\n}\n\n/**\n * Read a capability flag from the contract's target/family namespaces.\n *\n * The contract emitter populates `capabilities[targetFamily]` (universal\n * SQL flags like `jsonAgg`, `returning`) and `capabilities[target]`\n * (target-specific flags like `lateral` on Postgres). Either may\n * declare a given flag; the family namespace declares the floor and the\n * target namespace can extend on top.\n */\nfunction capabilityFlag(contract: Contract<SqlStorage>, flag: string): boolean {\n return (\n contract.capabilities[contract.targetFamily]?.[flag] === true ||\n contract.capabilities[contract.target]?.[flag] === true\n );\n}\n","import type { IncludeExpr } from './types';\n\n/**\n * Recursive predicate: does any include in the tree carry a\n * non-leaf `distinct()` — i.e. `nested.distinct` set on an include\n * whose `nested.includes` is non-empty?\n *\n * Such shapes cannot be lowered into the lateral / correlated\n * single-query strategies: the child SELECT would emit\n * `SELECT DISTINCT <scalars>, json_agg(<nested>) FROM ...`, and\n * Postgres rejects equality on `json`. The dispatch path routes\n * these to multi-query (which applies distinct to scalar-only rows\n * before grandchildren stitch in JS); the planner rejects them at\n * the boundary.\n *\n * `distinctOn` is intentionally not included: Postgres only\n * compares the `ON (...)` expressions for equality, so a hashable\n * key column plus json projections is well-defined.\n */\nexport function hasNonLeafIncludeWithDistinct(includes: readonly IncludeExpr[]): boolean {\n return includes.some(\n (include) =>\n (include.nested.distinct !== undefined &&\n include.nested.distinct.length > 0 &&\n include.nested.includes.length > 0) ||\n hasNonLeafIncludeWithDistinct(include.nested.includes),\n );\n}\n\n/**\n * Recursive predicate: does any include in the tree carry a scalar\n * selector (`count` / `sum` / ...) or a `combine()` descriptor?\n *\n * Such shapes cannot be lowered into the lateral / correlated\n * single-query strategies (TML-2595). The dispatch path uses this\n * to gate the whole tree to multi-query at any depth; the planner\n * (`compileSelectWithIncludeStrategy`) uses the same predicate to\n * fail fast at the boundary rather than build a malformed plan.\n * Without the recursion, a depth-2+ row include containing a\n * depth-3 `count()` would fall through to the planner and hit its\n * explicit `throw` instead of routing to multi-query.\n */\nexport function hasScalarOrCombineIncludeDescriptors(includes: readonly IncludeExpr[]): boolean {\n return includes.some(\n (include) =>\n include.scalar !== undefined ||\n include.combine !== undefined ||\n hasScalarOrCombineIncludeDescriptors(include.nested.includes),\n );\n}\n","import type { Contract, PlanMeta } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport { type AnyQueryAst, collectOrderedParamRefs } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\n\nexport function deriveParamsFromAst(ast: AnyQueryAst): {\n params: unknown[];\n} {\n return {\n params: collectOrderedParamRefs(ast).map((p) => (p.kind === 'param-ref' ? p.value : undefined)),\n };\n}\n\nexport function resolveTableColumns(contract: Contract<SqlStorage>, tableName: string): string[] {\n const table = contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\" in SQL ORM query planner`);\n }\n return Object.keys(table.columns);\n}\n\nexport function buildOrmPlanMeta(\n contract: Contract<SqlStorage>,\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): PlanMeta {\n const annotationRecord =\n annotations !== undefined && annotations.size > 0\n ? Object.freeze(Object.fromEntries(annotations))\n : undefined;\n return {\n target: contract.target,\n targetFamily: contract.targetFamily,\n storageHash: contract.storage.storageHash,\n ...ifDefined('profileHash', contract.profileHash),\n ...ifDefined('annotations', annotationRecord),\n lane: 'orm-client',\n };\n}\n\nexport function buildOrmQueryPlan<Row>(\n contract: Contract<SqlStorage>,\n ast: AnyQueryAst,\n params: readonly unknown[],\n annotations?: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>,\n): SqlQueryPlan<Row> {\n return Object.freeze({\n ast,\n params: [...params],\n meta: buildOrmPlanMeta(contract, annotations),\n });\n}\n\n/**\n * Merges annotations into an existing `SqlQueryPlan`'s\n * `meta.annotations` and returns a new frozen plan.\n *\n * Used by the ORM dispatch path to attach terminal-call annotations to\n * plans produced by mutation compile functions (which don't take\n * annotations as parameters). Reads compile through `compileSelect`-\n * family functions that pass `state.annotations` directly to\n * `buildOrmQueryPlan`; this helper is the alternate path for write\n * terminals where annotations arrive at the call site, not via state.\n *\n * Returns the input plan unchanged when `annotations` is undefined\n * or empty. Reserved framework namespaces (`codecs`, `limit`) on the\n * input plan win over caller-supplied entries under the same key —\n * see the reserved-namespace policy on `defineAnnotation`.\n */\nexport function mergeAnnotations<Row>(\n plan: SqlQueryPlan<Row>,\n annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n): SqlQueryPlan<Row> {\n if (annotations === undefined || annotations.size === 0) {\n return plan;\n }\n const callerEntries: Record<string, AnnotationValue<unknown, OperationKind>> = {};\n for (const [namespace, value] of annotations) {\n callerEntries[namespace] = value;\n }\n // Caller-supplied annotations go first so framework-reserved keys on\n // the existing plan (codecs, limit) override any collision under the\n // same namespace.\n const mergedAnnotations = Object.freeze({\n ...callerEntries,\n ...(plan.meta.annotations ?? {}),\n });\n return Object.freeze({\n ...plan,\n meta: Object.freeze({\n ...plan.meta,\n annotations: mergedAnnotations,\n }),\n });\n}\n","import { AndExpr, type AnyExpression } from '@prisma-next/sql-relational-core/ast';\n\nexport function combineWhereExprs(filters: readonly AnyExpression[]): AnyExpression | undefined {\n if (filters.length === 0) {\n return undefined;\n }\n\n if (filters.length === 1) {\n return filters[0];\n }\n\n return AndExpr.of(filters);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n type CodecRef,\n ColumnRef,\n NotExpr,\n NullCheckExpr,\n OrExpr,\n ProjectionItem,\n SelectAst,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { buildOrmQueryPlan, deriveParamsFromAst } from './query-plan-meta';\nimport type { AggregateSelector } from './types';\nimport { combineWhereExprs } from './where-utils';\n\nfunction toAggregateProjection(\n contract: Contract<SqlStorage>,\n tableName: string,\n selector: AggregateSelector<unknown>,\n): { expr: AggregateExpr; codec: CodecRef | undefined } {\n if (selector.fn === 'count') {\n // count() returns a target-specific bigint; mapping isn't derivable here\n // without target coupling, so we leave the codec slot empty.\n return { expr: AggregateExpr.count(), codec: undefined };\n }\n\n if (!selector.column) {\n throw new Error(`Aggregate selector \"${selector.fn}\" requires a field`);\n }\n\n const expr = new AggregateExpr(selector.fn, ColumnRef.of(tableName, selector.column));\n // min/max preserve the input column's type, so propagate the column codec.\n // sum widens (int4 → int8 in Postgres) and avg → numeric; both need\n // target+input-aware mapping that doesn't exist yet, so leave unstamped.\n if (selector.fn === 'min' || selector.fn === 'max') {\n const codec = codecRefForStorageColumn(contract.storage, tableName, selector.column);\n return { expr, codec };\n }\n return { expr, codec: undefined };\n}\n\n// ORM HAVING filters use literal binding (values inlined at plan-build time),\n// not parameterized binding. ParamRef is rejected because the ORM's grouped\n// collection API always produces literal comparisons for having() predicates.\nfunction validateGroupedComparable(value: AnyExpression): AnyExpression {\n switch (value.kind) {\n case 'param-ref':\n throw new Error('ParamRef is not supported in grouped having expressions');\n case 'literal':\n case 'column-ref':\n case 'identifier-ref':\n case 'aggregate':\n case 'operation':\n return value;\n case 'list':\n if (value.values.some((entry) => entry.kind === 'param-ref')) {\n throw new Error('ParamRef is not supported in grouped having expressions');\n }\n return value;\n default:\n throw new Error(`Unsupported comparable kind in grouped having: \"${value.kind}\"`);\n }\n}\n\nfunction validateGroupedMetricExpr(expr: AnyExpression): AggregateExpr {\n if (expr.kind !== 'aggregate') {\n throw new Error('groupBy().having() only supports aggregate metric expressions');\n }\n\n return expr;\n}\n\nfunction rejectHavingExpr(expr: { kind: string }): never {\n throw new Error(`Unsupported grouped having expression kind \"${expr.kind}\"`);\n}\n\nfunction validateGroupedHavingExpr(expr: AnyExpression): AnyExpression {\n return expr.accept<AnyExpression>({\n columnRef: rejectHavingExpr,\n identifierRef: rejectHavingExpr,\n subquery: rejectHavingExpr,\n operation: rejectHavingExpr,\n aggregate: rejectHavingExpr,\n jsonObject: rejectHavingExpr,\n jsonArrayAgg: rejectHavingExpr,\n literal: rejectHavingExpr,\n param() {\n throw new Error('ParamRef is not supported in grouped having expressions');\n },\n preparedParam() {\n throw new Error('PreparedParamRef is not supported in grouped having expressions');\n },\n list: rejectHavingExpr,\n and(expr) {\n return AndExpr.of(expr.exprs.map((child) => validateGroupedHavingExpr(child)));\n },\n or(expr) {\n return OrExpr.of(expr.exprs.map((child) => validateGroupedHavingExpr(child)));\n },\n exists(expr) {\n throw new Error(`Unsupported grouped having expression kind \"${expr.kind}\"`);\n },\n nullCheck(expr) {\n return new NullCheckExpr(validateGroupedMetricExpr(expr.expr), expr.isNull);\n },\n not(expr) {\n return new NotExpr(validateGroupedHavingExpr(expr.expr));\n },\n binary(expr) {\n return new BinaryExpr(\n expr.op,\n validateGroupedMetricExpr(expr.left),\n validateGroupedComparable(expr.right),\n );\n },\n });\n}\n\nexport function compileAggregate(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n aggregateSpec: Record<string, AggregateSelector<unknown>>,\n): SqlQueryPlan<Record<string, unknown>> {\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('aggregate() requires at least one aggregation selector');\n }\n\n const projection: ProjectionItem[] = entries.map(([alias, selector]) => {\n const { expr, codec } = toAggregateProjection(contract, tableName, selector);\n return ProjectionItem.of(alias, expr, codec);\n });\n let ast = SelectAst.from(TableSource.named(tableName)).withProjection(projection);\n const where = combineWhereExprs(filters);\n if (where) {\n ast = ast.withWhere(where);\n }\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileGroupedAggregate(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n groupByColumns: readonly string[],\n aggregateSpec: Record<string, AggregateSelector<unknown>>,\n havingExpr: AnyExpression | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n if (groupByColumns.length === 0) {\n throw new Error('groupBy() requires at least one field');\n }\n\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('groupBy().aggregate() requires at least one aggregation selector');\n }\n\n const projection: ProjectionItem[] = [\n ...groupByColumns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableName, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n ),\n ...entries.map(([alias, selector]) => {\n const { expr, codec } = toAggregateProjection(contract, tableName, selector);\n return ProjectionItem.of(alias, expr, codec);\n }),\n ];\n\n let ast = SelectAst.from(TableSource.named(tableName))\n .withProjection(projection)\n .withGroupBy(groupByColumns.map((column) => ColumnRef.of(tableName, column)));\n const where = combineWhereExprs(filters);\n if (where) {\n ast = ast.withWhere(where);\n }\n\n if (havingExpr) {\n ast = ast.withHaving(validateGroupedHavingExpr(havingExpr));\n }\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n ColumnRef,\n DefaultValueExpr,\n DeleteAst,\n InsertAst,\n InsertOnConflict,\n ParamRef,\n ProjectionItem,\n TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { buildOrmQueryPlan, deriveParamsFromAst, resolveTableColumns } from './query-plan-meta';\nimport { combineWhereExprs } from './where-utils';\n\nfunction unboundTable(contract: Contract<SqlStorage>, tableName: string): StorageTable | undefined {\n return contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n}\n\nfunction buildReturningColumns(\n contract: Contract<SqlStorage>,\n tableName: string,\n returningColumns: readonly string[] | undefined,\n): ReadonlyArray<ProjectionItem> {\n const columns =\n returningColumns && returningColumns.length > 0\n ? [...returningColumns]\n : resolveTableColumns(contract, tableName);\n\n return columns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableName, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n );\n}\n\nfunction toParamAssignments(\n contract: Contract<SqlStorage>,\n tableName: string,\n values: Record<string, unknown>,\n): {\n readonly assignments: Record<string, ParamRef>;\n} {\n const assignments: Record<string, ParamRef> = {};\n\n const table = unboundTable(contract, tableName);\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\"`);\n }\n\n for (const [column, value] of Object.entries(values)) {\n if (!table.columns[column]) {\n throw new Error(`Unknown column \"${column}\" in table \"${tableName}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, tableName, column);\n assignments[column] = ParamRef.of(value, {\n name: column,\n ...ifDefined('codec', codec),\n });\n }\n\n return { assignments };\n}\n\nfunction normalizeInsertRows(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): {\n readonly rows: ReadonlyArray<Record<string, ParamRef | DefaultValueExpr>>;\n} {\n if (rows.length === 0) {\n throw new Error('normalizeInsertRows requires at least one row');\n }\n\n const orderedColumns: string[] = [];\n const seenColumns = new Set<string>();\n\n for (const row of rows) {\n for (const column of Object.keys(row)) {\n if (seenColumns.has(column)) {\n continue;\n }\n seenColumns.add(column);\n orderedColumns.push(column);\n }\n }\n\n const table = unboundTable(contract, tableName);\n if (!table) {\n throw new Error(`Unknown table \"${tableName}\"`);\n }\n\n const normalizedRows = rows.map((row) => {\n if (orderedColumns.length === 0) {\n return {};\n }\n\n const normalizedRow: Record<string, ParamRef | DefaultValueExpr> = {};\n for (const column of orderedColumns) {\n if (Object.hasOwn(row, column)) {\n if (!table.columns[column]) {\n throw new Error(`Unknown column \"${column}\" in table \"${tableName}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, tableName, column);\n normalizedRow[column] = ParamRef.of(row[column], {\n name: column,\n ...ifDefined('codec', codec),\n });\n continue;\n }\n normalizedRow[column] = new DefaultValueExpr();\n }\n return normalizedRow;\n });\n\n return { rows: normalizedRows };\n}\n\nexport function compileInsertReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const { rows: normalizedRows } = normalizeInsertRows(contract, tableName, rows);\n const ast = InsertAst.into(TableSource.named(tableName))\n .withRows(normalizedRows)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileInsertCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): SqlQueryPlan<Record<string, unknown>> {\n const { rows: normalizedRows } = normalizeInsertRows(contract, tableName, rows);\n const ast = InsertAst.into(TableSource.named(tableName)).withRows(normalizedRows);\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nfunction stripUndefinedValues(row: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\n// Groups rows by their set of present columns so each group can be emitted as a single INSERT statement. Groups are created in input order — rows with the same signature that are non-adjacent produce separate groups. This is deliberate: preserving insertion order ensures autogenerated/autoincrement columns are assigned in the same order as the caller's input.\nfunction groupRowsByColumnSignature(\n rows: readonly Record<string, unknown>[],\n): ReadonlyArray<readonly Record<string, unknown>[]> {\n const groups: Array<Record<string, unknown>[]> = [];\n let currentKey = '';\n let currentGroup: Record<string, unknown>[] = [];\n\n for (const rawRow of rows) {\n const row = stripUndefinedValues(rawRow);\n const key = Object.keys(row).sort().join(',');\n if (key !== currentKey || currentGroup.length === 0) {\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n currentKey = key;\n currentGroup = [row];\n } else {\n currentGroup.push(row);\n }\n }\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n\n return groups;\n}\n\nexport function compileInsertReturningSplit(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n returningColumns: readonly string[] | undefined,\n): ReadonlyArray<SqlQueryPlan<Record<string, unknown>>> {\n if (rows.length === 0) {\n throw new Error('create() requires at least one row');\n }\n return groupRowsByColumnSignature(rows).map((group) =>\n compileInsertReturning(contract, tableName, group, returningColumns),\n );\n}\n\nexport function compileInsertCountSplit(\n contract: Contract<SqlStorage>,\n tableName: string,\n rows: readonly Record<string, unknown>[],\n): ReadonlyArray<SqlQueryPlan<Record<string, unknown>>> {\n if (rows.length === 0) {\n throw new Error('createCount() requires at least one row');\n }\n return groupRowsByColumnSignature(rows).map((group) =>\n compileInsertCount(contract, tableName, group),\n );\n}\n\nexport function compileUpsertReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n createValues: Record<string, unknown>,\n updateValues: Record<string, unknown>,\n conflictColumns: readonly string[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const createAssignments = toParamAssignments(contract, tableName, createValues);\n const hasUpdateValues = Object.keys(updateValues).length > 0;\n const updateAssignments = hasUpdateValues\n ? toParamAssignments(contract, tableName, updateValues)\n : undefined;\n const onConflict = updateAssignments\n ? InsertOnConflict.on(\n conflictColumns.map((column) => ColumnRef.of(tableName, column)),\n ).doUpdateSet(updateAssignments.assignments)\n : InsertOnConflict.on(\n conflictColumns.map((column) => ColumnRef.of(tableName, column)),\n ).doNothing();\n\n const ast = InsertAst.into(TableSource.named(tableName))\n .withRows([createAssignments.assignments])\n .withOnConflict(onConflict)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileUpdateReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n const { assignments } = toParamAssignments(contract, tableName, setValues);\n let ast = UpdateAst.table(TableSource.named(tableName))\n .withSet(assignments)\n .withReturning(buildReturningColumns(contract, tableName, returningColumns));\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileUpdateCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n const { assignments } = toParamAssignments(contract, tableName, setValues);\n let ast = UpdateAst.table(TableSource.named(tableName)).withSet(assignments);\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileDeleteReturning(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n returningColumns: readonly string[] | undefined,\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n let ast = DeleteAst.from(TableSource.named(tableName)).withReturning(\n buildReturningColumns(contract, tableName, returningColumns),\n );\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n\nexport function compileDeleteCount(\n contract: Contract<SqlStorage>,\n tableName: string,\n filters: readonly AnyExpression[],\n): SqlQueryPlan<Record<string, unknown>> {\n const where = combineWhereExprs(filters);\n let ast = DeleteAst.from(TableSource.named(tableName));\n if (where) {\n ast = ast.withWhere(where);\n }\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n type AnyFromSource,\n BinaryExpr,\n type ColumnRef,\n DerivedTableSource,\n ExistsExpr,\n type ExpressionRewriter,\n JoinAst,\n ListExpression,\n NotExpr,\n NullCheckExpr,\n OrderByItem,\n OrExpr,\n ParamRef,\n type ProjectionExpr,\n ProjectionItem,\n SelectAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\n\nexport function bindWhereExpr(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return bindWhereExprNode(contract, expr);\n}\n\nfunction bindWhereExprNode(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return expr.accept<AnyExpression>({\n columnRef(expr) {\n return bindExpression(contract, expr);\n },\n identifierRef(expr) {\n return expr;\n },\n subquery(expr) {\n return bindExpression(contract, expr);\n },\n operation(expr) {\n return bindExpression(contract, expr);\n },\n aggregate(expr) {\n return bindExpression(contract, expr);\n },\n jsonObject(expr) {\n return bindExpression(contract, expr);\n },\n jsonArrayAgg(expr) {\n return bindExpression(contract, expr);\n },\n literal(expr) {\n return expr;\n },\n param(expr) {\n return expr;\n },\n preparedParam(expr) {\n return expr;\n },\n list(expr) {\n return bindExpression(contract, expr);\n },\n binary(expr) {\n const left = bindExpression(contract, expr.left);\n const bindingColumn = left.kind === 'column-ref' ? (left as ColumnRef) : undefined;\n\n return new BinaryExpr(expr.op, left, bindComparable(contract, expr.right, bindingColumn));\n },\n and(expr) {\n return AndExpr.of(expr.exprs.map((part) => bindWhereExprNode(contract, part)));\n },\n or(expr) {\n return OrExpr.of(expr.exprs.map((part) => bindWhereExprNode(contract, part)));\n },\n exists(expr) {\n return expr.notExists\n ? ExistsExpr.notExists(bindSelectAst(contract, expr.subquery))\n : ExistsExpr.exists(bindSelectAst(contract, expr.subquery));\n },\n nullCheck(expr) {\n return expr.isNull\n ? NullCheckExpr.isNull(bindExpression(contract, expr.expr))\n : NullCheckExpr.isNotNull(bindExpression(contract, expr.expr));\n },\n not(expr) {\n return new NotExpr(bindWhereExprNode(contract, expr.expr));\n },\n });\n}\n\nfunction bindComparable(\n contract: Contract<SqlStorage>,\n comparable: AnyExpression,\n bindingColumn: ColumnRef | undefined,\n): AnyExpression {\n if (comparable.kind === 'param-ref' || bindingColumn === undefined) {\n return comparable.kind === 'param-ref'\n ? comparable\n : comparable.kind === 'literal' || comparable.kind === 'list'\n ? comparable\n : bindExpression(contract, comparable);\n }\n\n if (comparable.kind === 'literal') {\n return createParamRef(contract, bindingColumn, comparable.value);\n }\n\n if (comparable.kind === 'list') {\n return ListExpression.of(\n comparable.values.map((value) =>\n value.kind === 'literal' ? createParamRef(contract, bindingColumn, value.value) : value,\n ),\n );\n }\n\n return bindExpression(contract, comparable);\n}\n\nfunction createParamRef(\n contract: Contract<SqlStorage>,\n columnRef: ColumnRef,\n value: unknown,\n): ParamRef {\n if (\n !(\n contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[columnRef.table] as\n | StorageTable\n | undefined\n )?.columns[columnRef.column]\n ) {\n throw new Error(`Unknown column \"${columnRef.column}\" in table \"${columnRef.table}\"`);\n }\n const codec = codecRefForStorageColumn(contract.storage, columnRef.table, columnRef.column);\n return ParamRef.of(value, codec ? { codec } : undefined);\n}\n\nfunction createExpressionBinder(contract: Contract<SqlStorage>): ExpressionRewriter {\n return {\n select: (ast) => bindSelectAst(contract, ast),\n };\n}\n\nfunction bindExpression(contract: Contract<SqlStorage>, expr: AnyExpression): AnyExpression {\n return expr.rewrite(createExpressionBinder(contract));\n}\n\nfunction bindProjectionExpr(contract: Contract<SqlStorage>, expr: ProjectionExpr): ProjectionExpr {\n return expr.kind === 'literal' ? expr : bindExpression(contract, expr);\n}\n\nfunction bindOrderByItem(contract: Contract<SqlStorage>, orderItem: OrderByItem): OrderByItem {\n return new OrderByItem(bindExpression(contract, orderItem.expr), orderItem.dir);\n}\n\nfunction bindJoin(contract: Contract<SqlStorage>, join: JoinAst): JoinAst {\n return new JoinAst(\n join.joinType,\n bindFromSource(contract, join.source),\n join.on.kind === 'eq-col-join-on' ? join.on : bindWhereExprNode(contract, join.on),\n join.lateral,\n );\n}\n\nfunction bindFromSource(contract: Contract<SqlStorage>, source: AnyFromSource): AnyFromSource {\n if (source.kind === 'table-source') {\n return source;\n }\n if (source.kind === 'derived-table-source') {\n const derived = source as DerivedTableSource;\n return DerivedTableSource.as(derived.alias, bindSelectAst(contract, derived.query));\n }\n\n return source;\n}\n\nfunction bindSelectAst(contract: Contract<SqlStorage>, ast: SelectAst): SelectAst {\n return new SelectAst({\n from: bindFromSource(contract, ast.from),\n joins: ast.joins?.map((join) => bindJoin(contract, join)),\n projection: ast.projection.map(\n (projection) =>\n new ProjectionItem(\n projection.alias,\n bindProjectionExpr(contract, projection.expr),\n projection.codec,\n ),\n ),\n where: ast.where ? bindWhereExprNode(contract, ast.where) : undefined,\n orderBy: ast.orderBy?.map((orderItem) => bindOrderByItem(contract, orderItem)),\n distinct: ast.distinct,\n distinctOn: ast.distinctOn?.map((expr) => bindExpression(contract, expr)),\n groupBy: ast.groupBy?.map((expr) => bindExpression(contract, expr)),\n having: ast.having ? bindWhereExprNode(contract, ast.having) : undefined,\n limit: ast.limit,\n offset: ast.offset,\n selectAllIntent: ast.selectAllIntent,\n });\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n type AstRewriter,\n BinaryExpr,\n type BinaryOp,\n ColumnRef,\n DerivedTableSource,\n EqColJoinOn,\n JoinAst,\n JsonArrayAggExpr,\n JsonObjectExpr,\n ListExpression,\n LiteralExpr,\n OrderByItem,\n OrExpr,\n ProjectionItem,\n SelectAst,\n SubqueryExpr,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n type PolymorphismInfo,\n resolvePolymorphismInfo,\n resolvePrimaryKeyColumn,\n} from './collection-contract';\nimport {\n hasNonLeafIncludeWithDistinct,\n hasScalarOrCombineIncludeDescriptors,\n} from './include-tree-predicates';\nimport { buildOrmQueryPlan, deriveParamsFromAst, resolveTableColumns } from './query-plan-meta';\nimport type { CollectionState, IncludeExpr } from './types';\nimport { bindWhereExpr } from './where-binding';\nimport { combineWhereExprs } from './where-utils';\n\ntype CursorOrderEntry = {\n readonly column: string;\n readonly direction: 'asc' | 'desc';\n readonly value: unknown;\n};\n\nfunction buildProjection(\n contract: Contract<SqlStorage>,\n tableName: string,\n selectedFields: readonly string[] | undefined,\n tableRef = tableName,\n): ProjectionItem[] {\n const columns =\n selectedFields && selectedFields.length > 0\n ? [...selectedFields]\n : resolveTableColumns(contract, tableName);\n\n return columns.map((column) =>\n ProjectionItem.of(\n column,\n ColumnRef.of(tableRef, column),\n codecRefForStorageColumn(contract.storage, tableName, column),\n ),\n );\n}\n\nfunction createBoundaryExpr(tableName: string, entry: CursorOrderEntry): AnyExpression {\n const comparator: BinaryOp = entry.direction === 'asc' ? 'gt' : 'lt';\n return new BinaryExpr(\n comparator,\n ColumnRef.of(tableName, entry.column),\n LiteralExpr.of(entry.value),\n );\n}\n\nfunction buildLexicographicCursorWhere(\n tableName: string,\n entries: readonly CursorOrderEntry[],\n): AnyExpression {\n const branches = entries.map((entry, index): AnyExpression => {\n const branchExprs: AnyExpression[] = [];\n\n for (const prefixEntry of entries.slice(0, index)) {\n branchExprs.push(\n BinaryExpr.eq(\n ColumnRef.of(tableName, prefixEntry.column),\n LiteralExpr.of(prefixEntry.value),\n ),\n );\n }\n\n branchExprs.push(createBoundaryExpr(tableName, entry));\n if (branchExprs.length === 1) {\n return branchExprs[0] as AnyExpression;\n }\n\n return AndExpr.of(branchExprs);\n });\n\n if (branches.length === 1) {\n return branches[0] as AnyExpression;\n }\n\n return OrExpr.of(branches);\n}\n\nfunction buildCursorWhere(\n tableName: string,\n orderBy: readonly OrderByItem[] | undefined,\n cursor: Readonly<Record<string, unknown>> | undefined,\n): AnyExpression | undefined {\n if (!cursor || !orderBy || orderBy.length === 0) {\n return undefined;\n }\n\n const entries: CursorOrderEntry[] = [];\n for (const order of orderBy) {\n if (order.expr.kind !== 'column-ref') continue;\n const column = order.expr.column;\n const value = cursor[column];\n if (value === undefined) {\n throw new Error(`Missing cursor value for orderBy column \"${column}\"`);\n }\n entries.push({\n column,\n direction: order.dir,\n value,\n });\n }\n\n const firstEntry = entries[0];\n if (entries.length === 1 && firstEntry !== undefined) {\n return createBoundaryExpr(tableName, firstEntry);\n }\n\n return buildLexicographicCursorWhere(tableName, entries);\n}\n\nfunction createTableRefRemapper(fromTable: string, toTable: string): AstRewriter {\n return {\n columnRef: (col) => (col.table === fromTable ? ColumnRef.of(toTable, col.column) : col),\n tableSource: (source) => {\n if (source.alias === fromTable) return TableSource.named(source.name, toTable);\n if (!source.alias && source.name === fromTable)\n return TableSource.named(source.name, toTable);\n return source;\n },\n eqColJoinOn: (on) =>\n EqColJoinOn.of(\n on.left.table === fromTable ? ColumnRef.of(toTable, on.left.column) : on.left,\n on.right.table === fromTable ? ColumnRef.of(toTable, on.right.column) : on.right,\n ),\n };\n}\n\nfunction buildStateWhere(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n options?: {\n readonly filterTableName?: string;\n },\n): AnyExpression | undefined {\n const filterTableName = options?.filterTableName;\n const cursorTableName = filterTableName ?? tableName;\n const cursorWhere = buildCursorWhere(cursorTableName, state.orderBy, state.cursor);\n const remappedFilters =\n filterTableName && filterTableName !== tableName\n ? state.filters.map((filter) =>\n filter.rewrite(createTableRefRemapper(filterTableName, tableName)),\n )\n : state.filters;\n const boundCursorWhere = cursorWhere ? bindWhereExpr(contract, cursorWhere) : undefined;\n const remappedCursorWhere =\n boundCursorWhere && filterTableName && filterTableName !== tableName\n ? boundCursorWhere.rewrite(createTableRefRemapper(filterTableName, tableName))\n : boundCursorWhere;\n const filters = remappedCursorWhere ? [...remappedFilters, remappedCursorWhere] : remappedFilters;\n return combineWhereExprs(filters);\n}\n\nfunction buildIncludeOrderArtifacts(\n relationName: string,\n rowAlias: string,\n childOrderBy: readonly OrderByItem[] | undefined,\n): {\n readonly childOrderBy: ReadonlyArray<OrderByItem> | undefined;\n readonly hiddenOrderProjection: ReadonlyArray<ProjectionItem>;\n readonly aggregateOrderBy: ReadonlyArray<OrderByItem> | undefined;\n} {\n if (!childOrderBy || childOrderBy.length === 0) {\n return {\n childOrderBy: undefined,\n hiddenOrderProjection: [],\n aggregateOrderBy: undefined,\n };\n }\n\n const hiddenOrderProjection = childOrderBy.map((orderItem, index) =>\n ProjectionItem.of(`${relationName}__order_${index}`, orderItem.expr),\n );\n const aggregateOrderBy = hiddenOrderProjection.map((projection, index) => {\n const orderItem = childOrderBy[index];\n if (!orderItem) {\n throw new Error(`Missing include order metadata at index ${index}`);\n }\n return new OrderByItem(ColumnRef.of(rowAlias, projection.alias), orderItem.dir);\n });\n\n return {\n childOrderBy,\n hiddenOrderProjection,\n aggregateOrderBy,\n };\n}\n\n/**\n * Recursively build the join + projection artifacts for the nested\n * includes attached to a child SELECT. Used by\n * `buildIncludeChildRowsSelect` to wire depth-2+ aggregates into the\n * inner SELECT at each level.\n *\n * Under the `lateral` strategy each nested include contributes one\n * LEFT JOIN LATERAL plus one projection item that references the\n * lateral alias. Under the `correlated` strategy each nested include\n * contributes a single projection item whose expression is a\n * correlated subquery; no joins are produced. The two cases are\n * symmetric, which is why both paths share `buildIncludeChildRowsSelect`.\n */\nfunction buildNestedIncludeArtifacts(\n contract: Contract<SqlStorage>,\n parentTableRef: string,\n includes: readonly IncludeExpr[],\n strategy: 'lateral' | 'correlated',\n): {\n readonly joins: ReadonlyArray<JoinAst>;\n readonly projections: ReadonlyArray<ProjectionItem>;\n} {\n if (includes.length === 0) {\n return { joins: [], projections: [] };\n }\n\n const joins: JoinAst[] = [];\n const projections: ProjectionItem[] = [];\n\n for (const nested of includes) {\n if (strategy === 'lateral') {\n const artifact = buildLateralIncludeArtifacts(contract, parentTableRef, nested);\n joins.push(artifact.join);\n projections.push(artifact.projection);\n continue;\n }\n const artifact = buildCorrelatedIncludeProjection(contract, parentTableRef, nested);\n projections.push(artifact.projection);\n }\n\n return { joins, projections };\n}\n\nfunction buildIncludeChildRowsSelect(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n strategy: 'lateral' | 'correlated',\n): {\n readonly childRows: SelectAst;\n readonly childProjection: ReadonlyArray<ProjectionItem>;\n readonly rowsAlias: string;\n readonly aggregateOrderBy: ReadonlyArray<OrderByItem> | undefined;\n} {\n const childState = include.nested;\n const childTableAlias =\n include.relatedTableName === parentTableName ? `${include.relationName}__child` : undefined;\n const childTableRef = childTableAlias ?? include.relatedTableName;\n const rowsAlias = `${include.relationName}__rows`;\n const scalarProjection = buildProjection(\n contract,\n include.relatedTableName,\n childState.selectedFields,\n childTableRef,\n );\n // Self-relations rename the inner table source via `childTableAlias`,\n // so any ColumnRef the user-supplied `orderBy` carries against the\n // original `include.relatedTableName` is no longer in scope inside the\n // child SELECT. Remap before lowering to the hidden order projection\n // — mirrors the `filterTableName` remap `buildStateWhere` applies to\n // the where clauses just below.\n const remappedChildOrderBy =\n childTableAlias && childState.orderBy\n ? childState.orderBy.map((item) =>\n item.rewrite(createTableRefRemapper(include.relatedTableName, childTableRef)),\n )\n : childState.orderBy;\n const { childOrderBy, hiddenOrderProjection, aggregateOrderBy } = buildIncludeOrderArtifacts(\n include.relationName,\n rowsAlias,\n remappedChildOrderBy,\n );\n const childWhere = buildStateWhere(contract, childTableRef, childState, {\n filterTableName: include.relatedTableName,\n });\n const joinExpr = BinaryExpr.eq(\n ColumnRef.of(childTableRef, include.targetColumn),\n ColumnRef.of(parentTableName, include.localColumn),\n );\n const whereExpr = childWhere ? AndExpr.of([joinExpr, childWhere]) : joinExpr;\n\n // Recurse: each nested include produces either a LATERAL JOIN (under\n // `lateral`) or a correlated subquery projection (under `correlated`).\n // The nested aggregates are attached to *this* child SELECT, so they\n // correlate against `childTableRef` — which may itself be an alias if\n // the relation is self-referential.\n const { joins: nestedJoins, projections: nestedProjections } = buildNestedIncludeArtifacts(\n contract,\n childTableRef,\n childState.includes,\n strategy,\n );\n\n // `childProjection` is the set of items that survive into the parent's\n // JSON object — the scalar columns plus any nested-include aggregate\n // columns. The hidden order-by projection is separate and is dropped\n // before assembling the parent's json_object_expr.\n const childProjection: ReadonlyArray<ProjectionItem> = [\n ...scalarProjection,\n ...nestedProjections,\n ];\n\n let childRows = SelectAst.from(TableSource.named(include.relatedTableName, childTableAlias))\n .withProjection([...childProjection, ...hiddenOrderProjection])\n .withJoins(nestedJoins)\n .withWhere(whereExpr);\n\n if (childOrderBy) {\n childRows = childRows.withOrderBy(childOrderBy);\n }\n if (childState.distinctOn && childState.distinctOn.length > 0) {\n childRows = childRows.withDistinctOn(\n childState.distinctOn.map((column) => ColumnRef.of(childTableRef, column)),\n );\n } else if (childState.distinct && childState.distinct.length > 0) {\n childRows = childRows.withDistinct(true);\n }\n if (childState.limit !== undefined) {\n childRows = childRows.withLimit(childState.limit);\n }\n if (childState.offset !== undefined) {\n childRows = childRows.withOffset(childState.offset);\n }\n\n return {\n childRows,\n childProjection,\n rowsAlias,\n aggregateOrderBy,\n };\n}\n\nfunction buildLateralIncludeArtifacts(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n): {\n readonly join: JoinAst;\n readonly projection: ProjectionItem;\n} {\n const { childRows, childProjection, rowsAlias, aggregateOrderBy } = buildIncludeChildRowsSelect(\n contract,\n parentTableName,\n include,\n 'lateral',\n );\n const lateralAlias = `${include.relationName}_lateral`;\n const jsonObjectExpr = JsonObjectExpr.fromEntries(\n childProjection.map((item) =>\n JsonObjectExpr.entry(item.alias, ColumnRef.of(rowsAlias, item.alias)),\n ),\n );\n\n const aggregateQuery = SelectAst.from(DerivedTableSource.as(rowsAlias, childRows)).withProjection(\n [\n ProjectionItem.of(\n include.relationName,\n JsonArrayAggExpr.of(jsonObjectExpr, 'emptyArray', aggregateOrderBy),\n ),\n ],\n );\n\n return {\n join: JoinAst.left(DerivedTableSource.as(lateralAlias, aggregateQuery), AndExpr.true(), true),\n projection: ProjectionItem.of(\n include.relationName,\n ColumnRef.of(lateralAlias, include.relationName),\n ),\n };\n}\n\nfunction buildCorrelatedIncludeProjection(\n contract: Contract<SqlStorage>,\n parentTableName: string,\n include: IncludeExpr,\n): {\n readonly projection: ProjectionItem;\n} {\n const { childRows, childProjection, rowsAlias, aggregateOrderBy } = buildIncludeChildRowsSelect(\n contract,\n parentTableName,\n include,\n 'correlated',\n );\n const jsonObjectExpr = JsonObjectExpr.fromEntries(\n childProjection.map((item) =>\n JsonObjectExpr.entry(item.alias, ColumnRef.of(rowsAlias, item.alias)),\n ),\n );\n const aggregateQuery = SelectAst.from(DerivedTableSource.as(rowsAlias, childRows)).withProjection(\n [\n ProjectionItem.of(\n include.relationName,\n JsonArrayAggExpr.of(jsonObjectExpr, 'emptyArray', aggregateOrderBy),\n ),\n ],\n );\n\n return {\n projection: ProjectionItem.of(include.relationName, SubqueryExpr.of(aggregateQuery)),\n };\n}\n\nfunction buildSelectAst(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n options: {\n readonly joins?: ReadonlyArray<JoinAst>;\n readonly includeProjection?: ReadonlyArray<ProjectionItem>;\n readonly where?: AnyExpression;\n } = {},\n): SelectAst {\n const scalarProjection = buildProjection(contract, tableName, state.selectedFields);\n const projection = [...scalarProjection, ...(options.includeProjection ?? [])];\n const where = options.where ?? buildStateWhere(contract, tableName, state);\n\n let ast = SelectAst.from(TableSource.named(tableName)).withProjection(projection);\n if (where) {\n ast = ast.withWhere(where);\n }\n if (state.orderBy) {\n ast = ast.withOrderBy(state.orderBy);\n }\n if (state.selectedFields === undefined) {\n ast = ast.withSelectAllIntent({ table: tableName });\n }\n if (state.distinctOn && state.distinctOn.length > 0) {\n ast = ast.withDistinctOn(state.distinctOn.map((column) => ColumnRef.of(tableName, column)));\n } else if (state.distinct && state.distinct.length > 0) {\n ast = ast.withDistinct(true);\n }\n if (state.limit !== undefined) {\n ast = ast.withLimit(state.limit);\n }\n if (state.offset !== undefined) {\n ast = ast.withOffset(state.offset);\n }\n if (options.joins && options.joins.length > 0) {\n ast = ast.withJoins(options.joins);\n }\n\n return ast;\n}\n\nfunction buildMtiJoins(\n contract: Contract<SqlStorage>,\n polyInfo: PolymorphismInfo,\n variantName: string | undefined,\n): { joins: JoinAst[]; projection: ProjectionItem[] } {\n const joins: JoinAst[] = [];\n const projection: ProjectionItem[] = [];\n const pkColumn = resolvePrimaryKeyColumn(contract, polyInfo.baseTable);\n\n const variantsToJoin = variantName\n ? polyInfo.mtiVariants.filter((v) => v.modelName === variantName)\n : polyInfo.mtiVariants;\n\n for (const variant of variantsToJoin) {\n const joinType = variantName ? 'inner' : 'left';\n const joinOn = EqColJoinOn.of(\n ColumnRef.of(polyInfo.baseTable, pkColumn),\n ColumnRef.of(variant.table, pkColumn),\n );\n const join =\n joinType === 'inner'\n ? JoinAst.inner(TableSource.named(variant.table), joinOn)\n : JoinAst.left(TableSource.named(variant.table), joinOn);\n joins.push(join);\n\n const variantColumns = resolveTableColumns(contract, variant.table);\n for (const col of variantColumns) {\n if (col === pkColumn) continue;\n const alias = `${variant.table}__${col}`;\n projection.push(\n ProjectionItem.of(\n alias,\n ColumnRef.of(variant.table, col),\n codecRefForStorageColumn(contract.storage, variant.table, col),\n ),\n );\n }\n }\n\n return { joins, projection };\n}\n\nexport function compileSelect(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n modelName?: string,\n): SqlQueryPlan<Record<string, unknown>> {\n const polyInfo = modelName ? resolvePolymorphismInfo(contract, modelName) : undefined;\n const mtiArtifacts =\n polyInfo && polyInfo.mtiVariants.length > 0\n ? buildMtiJoins(contract, polyInfo, state.variantName)\n : undefined;\n\n const ast = buildSelectAst(\n contract,\n tableName,\n { ...state, includes: [] },\n mtiArtifacts\n ? {\n joins: mtiArtifacts.joins,\n includeProjection: mtiArtifacts.projection,\n }\n : undefined,\n );\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params, state.annotations);\n}\n\nexport function compileRelationSelect(\n contract: Contract<SqlStorage>,\n relatedTableName: string,\n targetColumn: string,\n parentPks: readonly unknown[],\n nestedState: CollectionState,\n): SqlQueryPlan<Record<string, unknown>> {\n const inFilter: AnyExpression = BinaryExpr.in(\n ColumnRef.of(relatedTableName, targetColumn),\n ListExpression.fromValues(parentPks),\n );\n\n return compileSelect(contract, relatedTableName, {\n ...nestedState,\n includes: [],\n limit: undefined,\n offset: undefined,\n filters: [bindWhereExpr(contract, inFilter), ...nestedState.filters],\n });\n}\n\nexport function compileSelectWithIncludeStrategy(\n contract: Contract<SqlStorage>,\n tableName: string,\n state: CollectionState,\n strategy: 'lateral' | 'correlated',\n modelName?: string,\n): SqlQueryPlan<Record<string, unknown>> {\n if (hasScalarOrCombineIncludeDescriptors(state.includes)) {\n throw new Error(\n 'single-query include strategy does not support scalar include selectors or combine()',\n );\n }\n\n // Same recursive shape as the scalar/combine gate above. A non-leaf\n // `distinct()` cannot be lowered into the single-query strategies:\n // the child SELECT would emit `SELECT DISTINCT <scalars>, json_agg(...)`,\n // and Postgres rejects equality on `json`. The dispatch path routes\n // these to multi-query; direct planner callers (tests, rich-plan\n // consumers) fail fast here instead of building an invalid plan.\n if (hasNonLeafIncludeWithDistinct(state.includes)) {\n throw new Error(\n 'single-query include strategy does not support distinct() on a non-leaf include',\n );\n }\n\n const includeJoins: JoinAst[] = [];\n const includeProjection: ProjectionItem[] = [];\n const topLevelWhere = buildStateWhere(contract, tableName, state);\n\n const polyInfo = modelName ? resolvePolymorphismInfo(contract, modelName) : undefined;\n if (polyInfo && polyInfo.mtiVariants.length > 0) {\n const mtiArtifacts = buildMtiJoins(contract, polyInfo, state.variantName);\n includeJoins.push(...mtiArtifacts.joins);\n includeProjection.push(...mtiArtifacts.projection);\n }\n\n for (const include of state.includes) {\n if (strategy === 'lateral') {\n const artifact = buildLateralIncludeArtifacts(contract, tableName, include);\n includeJoins.push(artifact.join);\n includeProjection.push(artifact.projection);\n continue;\n }\n const artifact = buildCorrelatedIncludeProjection(contract, tableName, include);\n includeProjection.push(artifact.projection);\n }\n\n const ast = buildSelectAst(\n contract,\n tableName,\n {\n ...state,\n includes: [],\n },\n {\n joins: includeJoins,\n includeProjection,\n ...ifDefined('where', topLevelWhere),\n },\n );\n\n const { params } = deriveParamsFromAst(ast);\n return buildOrmQueryPlan(contract, ast, params, state.annotations);\n}\n","/**\n * Collection row dispatch.\n *\n * Per-row decoding is performed upstream in `sql-runtime`'s row-yielding async\n * generator (it `await`s `decodeRow` once per row before yielding). This file\n * never calls codec query-time methods directly; it consumes plain decoded\n * cells through `executeQueryPlan` → `scope.execute(plan)` →\n * `AsyncIterableResult<Row>`. Every `for await` / `.toArray()` consumer below\n * therefore sees plain `T` values, not `Promise<T>`.\n *\n * See `packages/2-sql/5-runtime/src/codecs/decoding.ts` for the decode-once-\n * per-row contract; this file is the consumer side of that contract. See also\n * ADR 030 (codecs registry & decode boundary) and the m3 coverage in\n * `test/integration/codec-async.test.ts` and `test/codec-async.types.test-d.ts`.\n */\n\nimport type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport { isToOneCardinality, resolvePolymorphismInfo } from './collection-contract';\nimport {\n acquireRuntimeScope,\n augmentSelectionForJoinColumns,\n createRowEnvelope,\n mapPolymorphicRow,\n mapResultRows,\n mapStorageRowToModelFields,\n type RowEnvelope,\n stripHiddenMappedFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { selectIncludeStrategy } from './include-strategy';\nimport {\n hasNonLeafIncludeWithDistinct,\n hasScalarOrCombineIncludeDescriptors,\n} from './include-tree-predicates';\nimport {\n compileRelationSelect,\n compileSelect,\n compileSelectWithIncludeStrategy,\n} from './query-plan';\nimport type {\n CollectionContext,\n CollectionState,\n IncludeExpr,\n IncludeScalar,\n RelationCardinalityTag,\n} from './types';\n\nexport function dispatchCollectionRows<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName } = options;\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n\n if (state.includes.length === 0) {\n const compiled = compileSelect(contract, tableName, state, modelName);\n const source = executeQueryPlan<Record<string, unknown>>(runtime, compiled);\n const mapper = polyInfo\n ? (rawRow: Record<string, unknown>) =>\n mapPolymorphicRow(contract, modelName, polyInfo, rawRow, state.variantName) as Row\n : (rawRow: Record<string, unknown>) =>\n mapStorageRowToModelFields(contract, modelName, rawRow) as Row;\n return mapResultRows(source, mapper);\n }\n\n return dispatchWithIncludeStrategy<Row>(options);\n}\n\nfunction dispatchWithIncludeStrategy<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const strategy = selectIncludeStrategy(options.contract);\n\n // Nested row includes (depth >= 2) are emitted recursively by the\n // lateral / correlated builders — they no longer force a fallback to\n // multi-query (TML-2594). Scalar (`count`/`sum`/...) and `combine()`\n // descriptors still do, until TML-2595 lands the matching lowering;\n // the recursive scan below catches them at any depth so a nested\n // `count()` inside a row include doesn't accidentally hit the\n // throw in `compileSelectWithIncludeStrategy`.\n //\n // `distinct()` on a non-leaf include is also forced through multi-query:\n // under the single-query strategies the child SELECT carries nested\n // JSON aggregate columns, and `SELECT DISTINCT` over those fails on\n // Postgres (`json` has no equality operator). The multi-query stitcher\n // applies distinct to scalar-only child rows before grandchildren are\n // joined, which is the semantically correct behavior we preserve.\n if (\n hasScalarOrCombineIncludeDescriptors(options.state.includes) ||\n hasNonLeafIncludeWithDistinct(options.state.includes)\n ) {\n return dispatchWithMultiQueryIncludes<Row>(options);\n }\n\n switch (strategy) {\n case 'lateral':\n return dispatchWithSingleQueryIncludes<Row>({\n ...options,\n strategy: 'lateral',\n });\n case 'correlated':\n return dispatchWithSingleQueryIncludes<Row>({\n ...options,\n strategy: 'correlated',\n });\n default:\n return dispatchWithMultiQueryIncludes<Row>(options);\n }\n}\n\nfunction dispatchWithSingleQueryIncludes<Row>(options: {\n strategy: 'lateral' | 'correlated';\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName, strategy } = options;\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const parentJoinColumns = state.includes.map((include) => include.localColumn);\n const { selectedForQuery: parentSelectedForQuery, hiddenColumns: hiddenParentColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, parentJoinColumns);\n const compiled = compileSelectWithIncludeStrategy(\n contract,\n tableName,\n {\n ...state,\n selectedFields: parentSelectedForQuery,\n },\n strategy,\n modelName,\n );\n\n const parentRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n compiled,\n ).toArray();\n if (parentRowsRaw.length === 0) {\n return;\n }\n\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n const parentRows = parentRowsRaw.map((row) => {\n const mapped = polyInfo\n ? mapPolymorphicRow(contract, modelName, polyInfo, row, state.variantName)\n : mapStorageRowToModelFields(contract, modelName, row);\n return { raw: row, mapped } as RowEnvelope;\n });\n\n for (const parent of parentRows) {\n for (const include of state.includes) {\n parent.mapped[include.relationName] = decodeIncludePayload(\n contract,\n include,\n parent.raw[include.relationName],\n );\n }\n\n if (hiddenParentColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, parent.mapped, hiddenParentColumns);\n }\n }\n\n for (const row of parentRows) {\n yield row.mapped as Row;\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\nfunction dispatchWithMultiQueryIncludes<Row>(options: {\n contract: Contract<SqlStorage>;\n runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n state: CollectionState;\n tableName: string;\n modelName: string;\n}): AsyncIterableResult<Row> {\n const { contract, runtime, state, tableName, modelName } = options;\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const parentJoinColumns = state.includes.map((include) => include.localColumn);\n const { selectedForQuery: parentSelectedForQuery, hiddenColumns: hiddenParentColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, parentJoinColumns);\n const parentCompiled = compileSelect(\n contract,\n tableName,\n {\n ...state,\n includes: [],\n selectedFields: parentSelectedForQuery,\n },\n modelName,\n );\n const parentRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n parentCompiled,\n ).toArray();\n if (parentRowsRaw.length === 0) {\n return;\n }\n\n const polyInfo = resolvePolymorphismInfo(contract, modelName);\n const parentRows = parentRowsRaw.map((row) => {\n const mapped = polyInfo\n ? mapPolymorphicRow(contract, modelName, polyInfo, row, state.variantName)\n : mapStorageRowToModelFields(contract, modelName, row);\n return { raw: row, mapped } as RowEnvelope;\n });\n await stitchIncludes(scope, contract, parentRows, state.includes);\n\n if (hiddenParentColumns.length > 0) {\n for (const row of parentRows) {\n stripHiddenMappedFields(contract, modelName, row.mapped, hiddenParentColumns);\n }\n }\n\n for (const row of parentRows) {\n yield row.mapped as Row;\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\nexport async function stitchIncludes(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n includes: readonly IncludeExpr[],\n): Promise<void> {\n for (const include of includes) {\n const parentJoinValues = uniqueValues(\n parentRows.map((row) => row.raw[include.localColumn]).filter((value) => value !== undefined),\n );\n\n if (parentJoinValues.length === 0) {\n assignEmptyIncludeResult(parentRows, include);\n continue;\n }\n\n if (include.combine) {\n await stitchCombinedInclude(scope, contract, parentRows, include, parentJoinValues);\n continue;\n }\n\n if (include.scalar) {\n await stitchScalarInclude(\n scope,\n contract,\n parentRows,\n include,\n include.scalar,\n parentJoinValues,\n );\n continue;\n }\n\n await stitchRowInclude(scope, contract, parentRows, include, include.nested, parentJoinValues);\n }\n}\n\nasync function stitchCombinedInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const branches = include.combine ?? {};\n\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = {};\n }\n\n for (const [branchName, branch] of Object.entries(branches)) {\n if (branch.kind === 'rows') {\n const rowsByParent = await resolveRowsByParent(\n scope,\n contract,\n include,\n branch.state,\n parentJoinValues,\n );\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const relatedRows = rowsByParent.get(parentJoinValue) ?? [];\n const combined = parent.mapped[include.relationName] as Record<string, unknown>;\n combined[branchName] = coerceIncludeResult(relatedRows, branch.state, include.cardinality);\n }\n continue;\n }\n\n const scalarByParent = await resolveScalarByParent(\n scope,\n contract,\n include,\n branch.selector,\n parentJoinValues,\n );\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const combined = parent.mapped[include.relationName] as Record<string, unknown>;\n combined[branchName] =\n scalarByParent.get(parentJoinValue) ?? emptyScalarResult(branch.selector.fn);\n }\n }\n}\n\nasync function stitchScalarInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n selector: IncludeScalar<unknown>,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const scalarByParent = await resolveScalarByParent(\n scope,\n contract,\n include,\n selector,\n parentJoinValues,\n );\n\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n parent.mapped[include.relationName] =\n scalarByParent.get(parentJoinValue) ?? emptyScalarResult(selector.fn);\n }\n}\n\nasync function stitchRowInclude(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n parentRows: RowEnvelope[],\n include: IncludeExpr,\n state: CollectionState,\n parentJoinValues: readonly unknown[],\n): Promise<void> {\n const rowsByParent = await resolveRowsByParent(scope, contract, include, state, parentJoinValues);\n\n for (const parent of parentRows) {\n const parentJoinValue = parent.raw[include.localColumn];\n const relatedRows = rowsByParent.get(parentJoinValue) ?? [];\n parent.mapped[include.relationName] = coerceIncludeResult(\n relatedRows,\n state,\n include.cardinality,\n );\n }\n}\n\nasync function resolveRowsByParent(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n state: CollectionState,\n parentJoinValues: readonly unknown[],\n): Promise<Map<unknown, Record<string, unknown>[]>> {\n // Multi-query stitching reads `child.raw[grandchildInclude.localColumn]`\n // for every immediate include in `state.includes` to bucket children by\n // join value. A user-supplied `.select(...)` on the child that omits any\n // of those join columns would silently yield `undefined` for the join\n // value, producing empty nested arrays at depth >= 2. Force every\n // direct nested include's `localColumn` into the child's selected set\n // alongside `include.targetColumn` so the stitcher always sees a\n // defined join value. The next level of recursion (when grandchild\n // stitching itself dispatches through `resolveRowsByParent`) repeats\n // this same augmentation for its own children.\n const nestedJoinColumns = state.includes.map((nested) => nested.localColumn);\n const requiredChildColumns = Array.from(\n new Set<string>([include.targetColumn, ...nestedJoinColumns]),\n );\n const { selectedForQuery: childSelectedForQuery, hiddenColumns: hiddenChildColumns } =\n augmentSelectionForJoinColumns(state.selectedFields, requiredChildColumns);\n\n const childCompiled = compileRelationSelect(\n contract,\n include.relatedTableName,\n include.targetColumn,\n parentJoinValues,\n {\n ...state,\n selectedFields: childSelectedForQuery,\n },\n );\n const childRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n childCompiled,\n ).toArray();\n const childRows = childRowsRaw.map((row) =>\n createRowEnvelope(contract, include.relatedModelName, row),\n );\n\n if (state.includes.length > 0) {\n await stitchIncludes(scope, contract, childRows, state.includes);\n }\n\n const childByParentJoin = new Map<unknown, Record<string, unknown>[]>();\n for (const child of childRows) {\n const joinValue = child.raw[include.targetColumn];\n\n if (hiddenChildColumns.length > 0) {\n stripHiddenMappedFields(contract, include.relatedModelName, child.mapped, hiddenChildColumns);\n }\n\n let bucket = childByParentJoin.get(joinValue);\n if (!bucket) {\n bucket = [];\n childByParentJoin.set(joinValue, bucket);\n }\n bucket.push(child.mapped);\n }\n\n return childByParentJoin;\n}\n\nasync function resolveScalarByParent(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n selector: IncludeScalar<unknown>,\n parentJoinValues: readonly unknown[],\n): Promise<Map<unknown, unknown>> {\n const requiredColumns = selector.column\n ? [include.targetColumn, selector.column]\n : [include.targetColumn];\n const { selectedForQuery } = augmentSelectionForJoinColumns(\n selector.state.selectedFields,\n requiredColumns,\n );\n\n const childCompiled = compileRelationSelect(\n contract,\n include.relatedTableName,\n include.targetColumn,\n parentJoinValues,\n {\n ...selector.state,\n selectedFields: selectedForQuery,\n includes: [],\n },\n );\n const childRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n childCompiled,\n ).toArray();\n\n const rowsByParent = new Map<unknown, Record<string, unknown>[]>();\n for (const row of childRowsRaw) {\n const joinValue = row[include.targetColumn];\n let bucket = rowsByParent.get(joinValue);\n if (!bucket) {\n bucket = [];\n rowsByParent.set(joinValue, bucket);\n }\n bucket.push(row);\n }\n\n const scalarByParent = new Map<unknown, unknown>();\n for (const [joinValue, rows] of rowsByParent) {\n const scopedRows = slicePerParent(rows, selector.state);\n scalarByParent.set(joinValue, computeScalarValue(selector, scopedRows));\n }\n\n return scalarByParent;\n}\n\nfunction uniqueValues(values: unknown[]): unknown[] {\n return [...new Set(values)];\n}\n\n/**\n * Decode a single-query include payload from a parent row's raw cell\n * into the model-shaped value that downstream consumers see. Recurses\n * through `include.nested.includes` so depth-2+ trees — emitted by the\n * recursive lateral / correlated builders — are decoded symmetrically.\n *\n * The shape produced by the SQL side is one JSON column per top-level\n * include; values nested inside that JSON are already-parsed JS values\n * after the outer `JSON.parse`, so `parseIncludedRows` recognises both\n * the string (top-level) and array (nested) forms.\n */\nfunction decodeIncludePayload(\n contract: Contract<SqlStorage>,\n include: IncludeExpr,\n raw: unknown,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n const rawChildren = parseIncludedRows(raw);\n const mappedChildren = rawChildren.map((childRow) => {\n const mapped = mapStorageRowToModelFields(contract, include.relatedModelName, childRow);\n for (const nestedInclude of include.nested.includes) {\n // Defence in depth: the dispatch gate filters scalar/combine at\n // any depth via `hasScalarOrCombineIncludeDescriptors`. This branch\n // is unreachable in production but documents the contract the\n // recursion relies on.\n if (nestedInclude.scalar || nestedInclude.combine) {\n throw new Error(\n 'single-query include strategy does not support nested scalar include selectors or combine()',\n );\n }\n mapped[nestedInclude.relationName] = decodeIncludePayload(\n contract,\n nestedInclude,\n mapped[nestedInclude.relationName],\n );\n }\n return mapped;\n });\n return coerceSingleQueryIncludeResult(mappedChildren, include.cardinality);\n}\n\nfunction assignEmptyIncludeResult(parentRows: RowEnvelope[], include: IncludeExpr): void {\n if (include.combine) {\n for (const parent of parentRows) {\n const combined: Record<string, unknown> = {};\n for (const [branchName, branch] of Object.entries(include.combine)) {\n combined[branchName] =\n branch.kind === 'rows'\n ? emptyIncludeResult(include.cardinality)\n : emptyScalarResult(branch.selector.fn);\n }\n parent.mapped[include.relationName] = combined;\n }\n return;\n }\n\n if (include.scalar) {\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = emptyScalarResult(include.scalar.fn);\n }\n return;\n }\n\n for (const parent of parentRows) {\n parent.mapped[include.relationName] = emptyIncludeResult(include.cardinality);\n }\n}\n\nfunction parseIncludedRows(value: unknown): Record<string, unknown>[] {\n if (value === null || value === undefined) {\n return [];\n }\n\n const parsed = parseIncludePayload(value);\n if (!Array.isArray(parsed)) {\n return [];\n }\n\n const rows: Record<string, unknown>[] = [];\n for (const item of parsed) {\n if (typeof item !== 'object' || item === null) {\n continue;\n }\n rows.push({ ...(item as Record<string, unknown>) });\n }\n\n return rows;\n}\n\nfunction parseIncludePayload(value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return [];\n }\n}\n\nfunction coerceSingleQueryIncludeResult(\n rows: Record<string, unknown>[],\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n return isToOneCardinality(cardinality) ? (rows[0] ?? null) : rows;\n}\n\nfunction slicePerParent(\n rows: Record<string, unknown>[],\n state: CollectionState,\n): Record<string, unknown>[] {\n const offset = state.offset ?? 0;\n if (state.limit === undefined) {\n return rows.slice(offset);\n }\n return rows.slice(offset, offset + state.limit);\n}\n\nfunction emptyIncludeResult(\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n return isToOneCardinality(cardinality) ? null : [];\n}\n\nfunction coerceIncludeResult(\n rows: Record<string, unknown>[],\n state: CollectionState,\n cardinality: RelationCardinalityTag | undefined,\n): Record<string, unknown>[] | Record<string, unknown> | null {\n const sliced = slicePerParent(rows, state);\n return isToOneCardinality(cardinality) ? (sliced[0] ?? null) : sliced;\n}\n\nfunction emptyScalarResult(fn: IncludeScalar<unknown>['fn']): number | null {\n return fn === 'count' ? 0 : null;\n}\n\nfunction computeScalarValue(\n selector: IncludeScalar<unknown>,\n rows: readonly Record<string, unknown>[],\n): number | null {\n if (selector.fn === 'count') {\n return rows.length;\n }\n\n const column = selector.column;\n if (!column) {\n return null;\n }\n\n const numericValues = rows\n .map((row) => coerceNumericValue(row[column]))\n .filter((value): value is number => value !== null);\n\n if (numericValues.length === 0) {\n return null;\n }\n\n if (selector.fn === 'sum') {\n return numericValues.reduce((total, value) => total + value, 0);\n }\n\n if (selector.fn === 'avg') {\n const total = numericValues.reduce((sum, value) => sum + value, 0);\n return total / numericValues.length;\n }\n\n if (selector.fn === 'min') {\n return Math.min(...numericValues);\n }\n\n if (selector.fn === 'max') {\n return Math.max(...numericValues);\n }\n\n return null;\n}\n\nfunction coerceNumericValue(value: unknown): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return Number(value);\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isNaN(numeric) ? null : numeric;\n }\n\n return null;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { stitchIncludes } from './collection-dispatch';\nimport {\n acquireRuntimeScope,\n createRowEnvelope,\n mapResultRows,\n mapStorageRowToModelFields,\n stripHiddenMappedFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport type { CollectionContext, IncludeExpr } from './types';\n\ninterface DispatchMutationRowsOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly compiled: SqlQueryPlan<Record<string, unknown>>;\n readonly modelName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n}\n\nexport function dispatchMutationRows<Row>(\n options: DispatchMutationRowsOptions<Row>,\n): AsyncIterableResult<Row> {\n const { contract, runtime, compiled, modelName, includes, hiddenColumns, mapRow } = options;\n\n if (includes.length === 0) {\n const source = executeQueryPlan<Record<string, unknown>>(runtime, compiled);\n\n return mapResultRows(source, (rawRow) => {\n const mapped = mapStorageRowToModelFields(contract, modelName, rawRow);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, mapped, hiddenColumns);\n }\n return mapRow(mapped);\n });\n }\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const rawRows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n if (rawRows.length === 0) {\n return;\n }\n\n const wrappedRows = rawRows.map((row) => createRowEnvelope(contract, modelName, row));\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n for (const row of wrappedRows) {\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, row.mapped, hiddenColumns);\n }\n yield mapRow(row.mapped);\n }\n } finally {\n if (release) {\n await release();\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\ninterface DispatchSplitMutationRowsOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly plans: ReadonlyArray<SqlQueryPlan<Record<string, unknown>>>;\n readonly tableName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n}\n\nexport function dispatchSplitMutationRows<Row>(\n options: DispatchSplitMutationRowsOptions<Row>,\n): AsyncIterableResult<Row> {\n const { contract, runtime, plans, tableName, includes, hiddenColumns, mapRow } = options;\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n if (includes.length > 0) {\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const allRawRows: Record<string, unknown>[] = [];\n for (const plan of plans) {\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, plan).toArray();\n allRawRows.push(...rows);\n }\n if (allRawRows.length === 0) return;\n\n const wrappedRows = allRawRows.map((row) => createRowEnvelope(contract, tableName, row));\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n for (const row of wrappedRows) {\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, tableName, row.mapped, hiddenColumns);\n }\n yield mapRow(row.mapped);\n }\n } finally {\n if (release) await release();\n }\n } else {\n for (const plan of plans) {\n const rows = await executeQueryPlan<Record<string, unknown>>(runtime, plan).toArray();\n for (const rawRow of rows) {\n const mapped = mapStorageRowToModelFields(contract, tableName, rawRow);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, tableName, mapped, hiddenColumns);\n }\n yield mapRow(mapped);\n }\n }\n }\n };\n\n return new AsyncIterableResult(generator());\n}\n\ninterface ExecuteSingleMutationOptions<Row> {\n readonly contract: Contract<SqlStorage>;\n readonly runtime: CollectionContext<Contract<SqlStorage>>['runtime'];\n readonly compiled: SqlQueryPlan<Record<string, unknown>>;\n readonly modelName: string;\n readonly includes: readonly IncludeExpr[];\n readonly hiddenColumns: readonly string[];\n readonly mapRow: (mapped: Record<string, unknown>) => Row;\n readonly onMissingRowMessage: string;\n}\n\nexport async function executeMutationReturningSingleRow<Row>(\n options: ExecuteSingleMutationOptions<Row>,\n): Promise<Row | null> {\n const {\n contract,\n runtime,\n compiled,\n modelName,\n includes,\n hiddenColumns,\n mapRow,\n onMissingRowMessage,\n } = options;\n\n if (includes.length === 0) {\n const rows = await executeQueryPlan<Record<string, unknown>>(runtime, compiled).toArray();\n const first = rows[0];\n if (!first) {\n return null;\n }\n\n const mapped = mapStorageRowToModelFields(contract, modelName, first);\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, mapped, hiddenColumns);\n }\n return mapRow(mapped);\n }\n\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n const first = rows[0];\n if (!first) {\n return null;\n }\n\n const wrappedRows = [createRowEnvelope(contract, modelName, first)];\n await stitchIncludes(scope, contract, wrappedRows, includes);\n\n const result = wrappedRows[0];\n if (!result) {\n throw new Error(onMissingRowMessage);\n }\n\n if (hiddenColumns.length > 0) {\n stripHiddenMappedFields(contract, modelName, result.mapped, hiddenColumns);\n }\n\n return mapRow(result.mapped);\n } finally {\n if (release) {\n await release();\n }\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n LiteralExpr,\n NullCheckExpr,\n OrExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { getFieldToColumnMap, modelOf, resolveModelTableName } from './collection-contract';\nimport type { ShorthandWhereFilter } from './types';\n\nexport function and(...exprs: AnyExpression[]): AndExpr {\n return AndExpr.of(exprs);\n}\n\nexport function or(...exprs: AnyExpression[]): OrExpr {\n return OrExpr.of(exprs);\n}\n\nexport function not(expr: AnyExpression): AnyExpression {\n return expr.not();\n}\n\nexport function all(): AnyExpression {\n return AndExpr.true();\n}\n\nexport function shorthandToWhereExpr<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(\n context: ExecutionContext<TContract>,\n modelName: ModelName,\n filters: ShorthandWhereFilter<TContract, ModelName>,\n): AnyExpression | undefined {\n const contract = context.contract;\n const tableName = resolveModelTableName(contract, modelName);\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n\n const exprs: AnyExpression[] = [];\n for (const [fieldName, value] of Object.entries(filters)) {\n if (value === undefined) {\n continue;\n }\n\n const columnName = fieldToColumn[fieldName] ?? fieldName;\n const left = ColumnRef.of(tableName, columnName);\n\n if (value === null) {\n exprs.push(NullCheckExpr.isNull(left));\n continue;\n }\n\n assertFieldHasEqualityTrait(context, modelName, fieldName);\n exprs.push(BinaryExpr.eq(left, LiteralExpr.of(value)));\n }\n\n if (exprs.length === 0) {\n return undefined;\n }\n\n return exprs.length === 1 ? exprs[0] : and(...exprs);\n}\n\nfunction assertFieldHasEqualityTrait(\n context: ExecutionContext,\n modelName: string,\n fieldName: string,\n): void {\n const fieldType = modelOf(context.contract, modelName)?.fields?.[fieldName]?.type;\n const codecId = fieldType?.kind === 'scalar' ? fieldType.codecId : undefined;\n const traits = codecId ? (context.codecDescriptors.descriptorFor(codecId)?.traits ?? []) : [];\n if (!traits.includes('equality')) {\n throw new Error(\n `Shorthand filter on \"${modelName}.${fieldName}\": field does not support equality comparisons`,\n );\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type {\n AnnotationValue,\n MetaBuilder,\n OperationKind,\n} from '@prisma-next/framework-components/runtime';\nimport { createMetaBuilder } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n AggregateExpr,\n type AnyExpression,\n BinaryExpr,\n type BinaryOp,\n ColumnRef,\n LiteralExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SimplifyDeep } from '@prisma-next/utils/simplify-deep';\nimport { createAggregateBuilder, isAggregateSelector } from './aggregate-builder';\nimport { getFieldToColumnMap } from './collection-contract';\nimport { mapStorageRowToModelFields } from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { compileGroupedAggregate, mergeAnnotations } from './query-plan';\nimport type {\n AggregateBuilder,\n AggregateResult,\n AggregateSpec,\n CollectionContext,\n DefaultModelRow,\n HavingBuilder,\n HavingComparisonMethods,\n} from './types';\nimport { combineWhereExprs } from './where-utils';\n\ninterface GroupedCollectionInit {\n readonly tableName: string;\n readonly baseFilters: readonly AnyExpression[];\n readonly groupByFields: readonly string[];\n readonly groupByColumns: readonly string[];\n readonly havingFilters: readonly AnyExpression[];\n}\n\ntype GroupByFieldName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = keyof DefaultModelRow<TContract, ModelName> & string;\n\nexport class GroupedCollection<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n GroupFields extends readonly GroupByFieldName<TContract, ModelName>[],\n> {\n readonly ctx: CollectionContext<TContract>;\n private readonly contract: TContract;\n readonly modelName: ModelName;\n readonly tableName: string;\n readonly baseFilters: readonly AnyExpression[];\n readonly groupByFields: readonly string[];\n readonly groupByColumns: readonly string[];\n readonly havingFilters: readonly AnyExpression[];\n\n constructor(\n ctx: CollectionContext<TContract>,\n modelName: ModelName,\n options: GroupedCollectionInit,\n ) {\n this.ctx = ctx;\n this.contract = ctx.context.contract;\n this.modelName = modelName;\n this.tableName = options.tableName;\n this.baseFilters = options.baseFilters;\n this.groupByFields = options.groupByFields;\n this.groupByColumns = options.groupByColumns;\n this.havingFilters = options.havingFilters;\n }\n\n having(\n predicate: (having: HavingBuilder<TContract, ModelName>) => AnyExpression,\n ): GroupedCollection<TContract, ModelName, GroupFields> {\n const havingExpr = predicate(\n createHavingBuilder(this.contract, this.modelName, this.tableName),\n );\n return new GroupedCollection(this.ctx, this.modelName, {\n tableName: this.tableName,\n baseFilters: this.baseFilters,\n groupByFields: this.groupByFields,\n groupByColumns: this.groupByColumns,\n havingFilters: [...this.havingFilters, havingExpr],\n }) as GroupedCollection<TContract, ModelName, GroupFields>;\n }\n\n /**\n * Read terminal: run a grouped aggregate query.\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` for attaching typed annotations.\n * Annotations are merged into the compiled plan's `meta.annotations`.\n */\n async aggregate<Spec extends AggregateSpec>(\n fn: (aggregate: AggregateBuilder<TContract, ModelName>) => Spec,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<\n Array<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, GroupFields[number]> & AggregateResult<Spec>\n >\n >\n > {\n const aggregateSpec = fn(createAggregateBuilder(this.contract, this.modelName));\n const aggregateEntries = Object.entries(aggregateSpec);\n if (aggregateEntries.length === 0) {\n throw new Error('groupBy().aggregate() requires at least one aggregation selector');\n }\n\n for (const [alias, selector] of aggregateEntries) {\n if (!isAggregateSelector(selector)) {\n throw new Error(`groupBy().aggregate() selector \"${alias}\" is invalid`);\n }\n }\n\n let annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined;\n if (configure !== undefined) {\n const meta = createMetaBuilder('read', 'groupBy.aggregate');\n configure(meta);\n if (meta.annotations.size > 0) {\n annotationsMap = meta.annotations;\n }\n }\n\n const compiled = mergeAnnotations(\n compileGroupedAggregate(\n this.contract,\n this.tableName,\n this.baseFilters,\n this.groupByColumns,\n aggregateSpec,\n combineWhereExprs(this.havingFilters),\n ),\n annotationsMap,\n );\n const rows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n compiled,\n ).toArray();\n\n return rows.map((row) => {\n const mapped = mapStorageRowToModelFields(this.contract, this.modelName, row);\n for (const [alias, selector] of aggregateEntries) {\n mapped[alias] = coerceAggregateValue(selector.fn, row[alias]);\n }\n return mapped;\n }) as Array<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, GroupFields[number]> & AggregateResult<Spec>\n >\n >;\n }\n}\n\nfunction createHavingBuilder<TContract extends Contract<SqlStorage>, ModelName extends string>(\n contract: TContract,\n modelName: ModelName,\n tableName: string,\n): HavingBuilder<TContract, ModelName> {\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const createMetricExpr = (\n fn: Exclude<AggregateExpr['fn'], 'count'>,\n fieldName: string,\n ): AggregateExpr =>\n new AggregateExpr(fn, ColumnRef.of(tableName, fieldToColumn[fieldName] ?? fieldName));\n\n return {\n count() {\n return createHavingComparisonMethods<number>(AggregateExpr.count());\n },\n sum(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('sum', field as string));\n },\n avg(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('avg', field as string));\n },\n min(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('min', field as string));\n },\n max(field) {\n return createHavingComparisonMethods<number | null>(createMetricExpr('max', field as string));\n },\n };\n}\n\nfunction createHavingComparisonMethods<T extends number | null>(\n metric: AggregateExpr,\n): HavingComparisonMethods<T> {\n const buildBinaryExpr = (op: BinaryOp, value: unknown): AnyExpression =>\n new BinaryExpr(op, metric, LiteralExpr.of(value));\n\n return {\n eq(value) {\n return buildBinaryExpr('eq', value);\n },\n neq(value) {\n return buildBinaryExpr('neq', value);\n },\n gt(value) {\n return buildBinaryExpr('gt', value);\n },\n lt(value) {\n return buildBinaryExpr('lt', value);\n },\n gte(value) {\n return buildBinaryExpr('gte', value);\n },\n lte(value) {\n return buildBinaryExpr('lte', value);\n },\n };\n}\n\nfunction coerceAggregateValue(fn: string, value: unknown): unknown {\n if (value === null) {\n return null;\n }\n\n if (value === undefined) {\n return fn === 'count' ? 0 : null;\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return Number(value);\n }\n\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isNaN(numeric) ? value : numeric;\n }\n\n return value;\n}\n","import type { StripRowType } from './collection-internal-types';\nimport type { CollectionState, IncludeCombine, IncludeCombineBranch, IncludeScalar } from './types';\n\ninterface CollectionStateCarrier {\n readonly state: CollectionState;\n}\n\nconst aggregateFns = new Set(['count', 'sum', 'avg', 'min', 'max']);\n\nexport function createIncludeScalar<Result>(\n fn: IncludeScalar<Result>['fn'],\n state: CollectionState,\n column?: string,\n): IncludeScalar<Result> {\n return {\n kind: 'includeScalar',\n fn,\n state,\n ...(column !== undefined ? { column } : {}),\n } satisfies StripRowType<IncludeScalar<Result>> as IncludeScalar<Result>;\n}\n\nexport function createIncludeCombine<ResultShape extends Record<string, unknown>>(\n branches: Record<string, IncludeCombineBranch>,\n): IncludeCombine<ResultShape> {\n return {\n kind: 'includeCombine',\n branches,\n } satisfies StripRowType<IncludeCombine<ResultShape>> as IncludeCombine<ResultShape>;\n}\n\nexport function isIncludeScalar(value: unknown): value is IncludeScalar<unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n kind?: unknown;\n fn?: unknown;\n state?: unknown;\n };\n\n return (\n candidate.kind === 'includeScalar' &&\n typeof candidate.fn === 'string' &&\n aggregateFns.has(candidate.fn) &&\n isCollectionState(candidate.state)\n );\n}\n\nexport function isIncludeCombine(value: unknown): value is IncludeCombine<Record<string, unknown>> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n kind?: unknown;\n branches?: unknown;\n };\n\n if (candidate.kind !== 'includeCombine') {\n return false;\n }\n\n if (typeof candidate.branches !== 'object' || candidate.branches === null) {\n return false;\n }\n\n return true;\n}\n\nexport function isCollectionStateCarrier(value: unknown): value is CollectionStateCarrier {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as { state?: unknown };\n return isCollectionState(candidate.state);\n}\n\nfunction isCollectionState(value: unknown): value is CollectionState {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const candidate = value as {\n filters?: unknown;\n includes?: unknown;\n };\n\n return Array.isArray(candidate.filters) && Array.isArray(candidate.includes);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { AnnotationValue, OperationKind } from '@prisma-next/framework-components/runtime';\nimport type {\n ExtractCodecTypes,\n ExtractQueryOperationTypes,\n SqlStorage,\n StorageColumn,\n StorageTable,\n} from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n type BinaryOp,\n type CodecRef,\n type CodecTrait,\n ListExpression,\n NullCheckExpr,\n OrderByItem,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { ComputeColumnJsType, RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport type { RowSelection } from './collection-internal-types';\n\nexport type AggregateFn = 'count' | 'sum' | 'avg' | 'min' | 'max';\n\nexport interface IncludeScalar<Result> extends RowSelection<Result> {\n readonly kind: 'includeScalar';\n readonly fn: AggregateFn;\n readonly column?: string;\n readonly state: CollectionState;\n}\n\nexport interface IncludeRowsBranch {\n readonly kind: 'rows';\n readonly state: CollectionState;\n}\n\nexport interface IncludeScalarBranch {\n readonly kind: 'scalar';\n readonly selector: IncludeScalar<unknown>;\n}\n\nexport type IncludeCombineBranch = IncludeRowsBranch | IncludeScalarBranch;\n\nexport interface IncludeCombine<ResultShape extends Record<string, unknown>>\n extends RowSelection<ResultShape> {\n readonly kind: 'includeCombine';\n readonly branches: Readonly<Record<string, IncludeCombineBranch>>;\n}\n\nexport interface IncludeExpr {\n readonly relationName: string;\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly targetColumn: string;\n readonly localColumn: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly nested: CollectionState;\n readonly scalar: IncludeScalar<unknown> | undefined;\n readonly combine: Readonly<Record<string, IncludeCombineBranch>> | undefined;\n}\n\nexport interface CollectionState {\n readonly filters: readonly AnyExpression[];\n readonly includes: readonly IncludeExpr[];\n readonly orderBy: readonly OrderByItem[] | undefined;\n readonly cursor: Readonly<Record<string, unknown>> | undefined;\n readonly distinct: readonly string[] | undefined;\n readonly distinctOn: readonly string[] | undefined;\n readonly selectedFields: readonly string[] | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n readonly variantName: string | undefined;\n /**\n * Annotations attached to this query at terminal-call time.\n * Populated transiently by terminal methods (`first`, `all`, `create`,\n * etc.) just before dispatch — `Collection` itself has no chainable\n * `.annotate()`. Stored as a `Map<namespace, AnnotationValue>` so\n * duplicate namespaces last-write-win. Empty on a fresh state.\n */\n readonly annotations: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>>;\n}\n\nexport function emptyState(): CollectionState {\n return {\n filters: [],\n includes: [],\n orderBy: undefined,\n cursor: undefined,\n distinct: undefined,\n distinctOn: undefined,\n selectedFields: undefined,\n limit: undefined,\n offset: undefined,\n variantName: undefined,\n annotations: new Map(),\n };\n}\n\nexport interface CollectionTypeState {\n readonly hasOrderBy: boolean;\n readonly hasWhere: boolean;\n readonly hasUniqueFilter: boolean;\n readonly variantName: string | undefined;\n}\n\nexport type RelationCardinalityTag = '1:1' | 'N:1' | '1:N' | 'M:N';\n\nexport type DefaultCollectionTypeState = {\n readonly hasOrderBy: false;\n readonly hasWhere: false;\n readonly hasUniqueFilter: false;\n readonly variantName: undefined;\n};\n\nexport interface RuntimeConnection extends RuntimeScope {\n release?(): Promise<void>;\n transaction?(): Promise<RuntimeTransaction>;\n}\n\nexport interface RuntimeTransaction extends RuntimeScope {\n commit?(): Promise<void>;\n rollback?(): Promise<void>;\n}\n\nexport interface RuntimeQueryable extends RuntimeScope {\n connection?(): Promise<RuntimeConnection>;\n transaction?(): Promise<RuntimeTransaction>;\n}\n\nexport interface CollectionContext<TContract extends Contract<SqlStorage>> {\n readonly runtime: RuntimeQueryable;\n readonly context: ExecutionContext<TContract>;\n}\n\nexport type ComparisonMethodFns<T> = {\n eq(value: T): AnyExpression;\n neq(value: T): AnyExpression;\n gt(value: T): AnyExpression;\n lt(value: T): AnyExpression;\n gte(value: T): AnyExpression;\n lte(value: T): AnyExpression;\n like(pattern: string): AnyExpression;\n in(values: readonly T[]): AnyExpression;\n notIn(values: readonly T[]): AnyExpression;\n isNull(): AnyExpression;\n isNotNull(): AnyExpression;\n asc(): OrderByItem;\n desc(): OrderByItem;\n};\n\n/**\n * Trait-gated comparison methods. Only methods whose required traits are all present in `Traits` are included.\n *\n * - `traits: []` → always available (isNull, isNotNull)\n */\nexport type ComparisonMethods<T, Traits> = {\n [K in keyof ComparisonMethodsMeta as [ComparisonMethodsMeta[K]['traits'][number]] extends [Traits]\n ? K\n : never]: ComparisonMethodFns<T>[K];\n};\n\ntype QueryOperationReturnTraits<\n Returns,\n TCodecTypes extends Record<string, unknown>,\n> = Returns extends { readonly codecId: infer Id extends string }\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly traits: infer Traits }\n ? Traits\n : never\n : never\n : never;\n\ntype QueryOperationReturnJsType<\n Returns,\n TCodecTypes extends Record<string, unknown>,\n> = Returns extends { readonly codecId: infer Id extends string; readonly nullable: infer N }\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly output: infer O }\n ? N extends true\n ? O | null\n : O\n : unknown\n : unknown\n : unknown;\n\ntype IsBooleanReturn<Returns, TCodecTypes extends Record<string, unknown>> = Returns extends {\n readonly codecId: infer Id extends string;\n}\n ? Id extends keyof TCodecTypes\n ? TCodecTypes[Id] extends { readonly traits: infer T }\n ? 'boolean' extends T\n ? true\n : false\n : false\n : false\n : false;\n\n/**\n * Extract the `{codecId, nullable}` spec carried inside an `Expression<T>`. Used to recover the op's return spec from its impl signature so the pre-existing `QueryOperationReturn*` helpers can consume it unchanged.\n */\ntype SpecOf<E> = E extends Expression<infer T> ? T : never;\n\ntype ImplReturnSpec<Impl> = Impl extends (...args: never[]) => infer Ret ? SpecOf<Ret> : never;\n\n/**\n * Builds the ORM column-method signature for an operation.\n *\n * - User args: drops the impl's first parameter (the column is bound at access time) and forwards the rest unchanged. Each remaining arg keeps its authored `CodecExpression` / `TraitExpression` shape — so callers can pass a raw JS value, another column handle (which itself implements `Expression`), or `null` when nullable.\n * - Return: predicate ops (boolean-traited return) yield `AnyExpression`; non-predicate ops yield `ComparisonMethods<JsType, Traits>` of the return codec.\n */\ntype QueryOperationMethod<Op, TCodecTypes extends Record<string, unknown>> = Op extends {\n readonly impl: (...args: never[]) => unknown;\n}\n ? Op['impl'] extends (first: never, ...rest: infer UserArgs extends readonly unknown[]) => unknown\n ? ImplReturnSpec<Op['impl']> extends infer Returns\n ? IsBooleanReturn<Returns, TCodecTypes> extends true\n ? (...args: UserArgs) => AnyExpression\n : (\n ...args: UserArgs\n ) => ComparisonMethods<\n QueryOperationReturnJsType<Returns, TCodecTypes>,\n QueryOperationReturnTraits<Returns, TCodecTypes>\n >\n : never\n : never\n : never;\n\n/**\n * Tests whether an operation's `self` dispatch hint reaches a field with the given codec identity. Codec hints match by identity; trait hints match when every required trait is present in the field codec's trait set.\n */\ntype OpMatchesField<Op, CodecId extends string, CT extends Record<string, unknown>> = Op extends {\n readonly self: infer Self;\n}\n ? Self extends { readonly codecId: CodecId }\n ? true\n : Self extends { readonly traits: infer RequiredTraits extends readonly string[] }\n ? CodecId extends keyof CT\n ? CT[CodecId] extends { readonly traits: infer FieldTraits }\n ? [RequiredTraits[number]] extends [FieldTraits]\n ? true\n : false\n : false\n : false\n : false\n : false;\n\ntype FieldOperations<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldCodecId<TContract, ModelName, FieldName> extends infer CodecId extends string\n ? ExtractQueryOperationTypes<TContract> extends infer AllOps\n ? {\n [OpName in keyof AllOps & string as OpMatchesField<\n AllOps[OpName],\n CodecId,\n ExtractCodecTypes<TContract>\n > extends true\n ? OpName\n : never]: QueryOperationMethod<AllOps[OpName], ExtractCodecTypes<TContract>>;\n }\n : unknown\n : unknown;\n\nfunction param(codec: CodecRef | undefined, value: unknown): ParamRef {\n if (codec === undefined) return ParamRef.of(value);\n return ParamRef.of(value, { codec });\n}\n\nfunction paramList(codec: CodecRef | undefined, values: readonly unknown[]): ListExpression {\n return ListExpression.of(values.map((value) => param(codec, value)));\n}\n\n// never[] is intentional: factories have heterogeneous signatures (value: unknown, values: readonly unknown[], pattern: string, etc.) but are only called through the typed ComparisonMethodFns interface, never through this type directly.\ntype MethodFactory = (\n left: AnyExpression,\n codec: CodecRef | undefined,\n) => (...args: never[]) => unknown;\n\ntype ComparisonMethodMeta = {\n readonly traits: readonly CodecTrait[];\n readonly create: MethodFactory;\n};\n\nfunction scalarComparisonMethod(op: BinaryOp) {\n return ((left, codec) => (value: unknown) => {\n if (value === null && (op === 'eq' || op === 'neq')) {\n return op === 'eq' ? NullCheckExpr.isNull(left) : NullCheckExpr.isNotNull(left);\n }\n return new BinaryExpr(op, left, param(codec, value));\n }) satisfies MethodFactory;\n}\n\nfunction listComparisonMethod(op: BinaryOp) {\n return ((left, codec) => (values: readonly unknown[]) =>\n new BinaryExpr(op, left, paramList(codec, values))) satisfies MethodFactory;\n}\n\n/**\n * Declares trait requirements and runtime factory for each comparison method.\n *\n * - `traits: []` means \"no trait required\" — always available\n * - Multi-trait: `traits: ['equality', 'order']` means BOTH traits are required\n */\nexport const COMPARISON_METHODS_META = {\n eq: {\n traits: ['equality'],\n create: scalarComparisonMethod('eq'),\n },\n neq: {\n traits: ['equality'],\n create: scalarComparisonMethod('neq'),\n },\n in: {\n traits: ['equality'],\n create: listComparisonMethod('in'),\n },\n notIn: {\n traits: ['equality'],\n create: listComparisonMethod('notIn'),\n },\n gt: {\n traits: ['order'],\n create: scalarComparisonMethod('gt'),\n },\n lt: {\n traits: ['order'],\n create: scalarComparisonMethod('lt'),\n },\n gte: {\n traits: ['order'],\n create: scalarComparisonMethod('gte'),\n },\n lte: {\n traits: ['order'],\n create: scalarComparisonMethod('lte'),\n },\n like: {\n traits: ['textual'],\n create: scalarComparisonMethod('like'),\n },\n asc: {\n traits: ['order'],\n create: (left) => () => OrderByItem.asc(left),\n },\n desc: {\n traits: ['order'],\n create: (left) => () => OrderByItem.desc(left),\n },\n isNull: {\n traits: [],\n create: (left) => () => NullCheckExpr.isNull(left),\n },\n isNotNull: {\n traits: [],\n create: (left) => () => NullCheckExpr.isNotNull(left),\n },\n} as const satisfies Record<keyof ComparisonMethodFns<unknown>, ComparisonMethodMeta>;\n\ntype ComparisonMethodsMeta = typeof COMPARISON_METHODS_META;\n\nexport type RelationPredicate<TContract extends Contract<SqlStorage>, ModelName extends string> = (\n model: ModelAccessor<TContract, ModelName>,\n) => AnyExpression;\n\nexport type RelationPredicateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = RelationPredicate<TContract, ModelName> | Record<string, unknown>;\n\nexport type RelationFilterAccessor<\n TContract extends Contract<SqlStorage>,\n RelatedModelName extends string,\n> = {\n some(predicate?: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n every(predicate: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n none(predicate?: RelationPredicateInput<TContract, RelatedModelName>): AnyExpression;\n};\n\ntype ScalarModelAccessor<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof FieldsOf<TContract, ModelName> & string]: Expression<{\n codecId: FieldCodecId<TContract, ModelName, K>;\n nullable: FieldNullable<TContract, ModelName, K>;\n }> &\n ComparisonMethods<FieldJsType<TContract, ModelName, K>, FieldTraits<TContract, ModelName, K>> &\n FieldOperations<TContract, ModelName, K>;\n};\n\ntype RelationModelAccessor<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in RelationNames<TContract, ModelName>]: RelationFilterAccessor<\n TContract,\n RelatedModelName<TContract, ModelName, K> & string\n >;\n};\n\nexport type ModelAccessor<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ScalarModelAccessor<TContract, ModelName> & RelationModelAccessor<TContract, ModelName>;\n\nexport type DefaultModelRow<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof FieldsOf<TContract, ModelName> & string]: FieldJsType<TContract, ModelName, K>;\n};\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\n\ntype VariantRow<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer DiscField extends string };\n readonly variants: infer V;\n }\n ? V extends Record<string, { readonly value: string }>\n ? {\n [VK in keyof V]: VK extends string & keyof ModelsOf<TContract>\n ? Simplify<\n Omit<DefaultModelRow<TContract, ModelName>, DiscField> &\n DefaultModelRow<TContract, VK> &\n Record<DiscField, V[VK]['value']>\n >\n : never;\n }[keyof V]\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>;\n\nexport type InferRootRow<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = VariantRow<TContract, ModelName>;\n\nexport type VariantNames<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly variants: infer V extends Record<string, unknown>;\n }\n ? keyof V & string\n : never;\n\nexport type VariantModelRow<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n VariantName extends string,\n> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer DiscField extends string };\n readonly variants: infer V;\n }\n ? V extends Record<string, { readonly value: string }>\n ? VariantName extends keyof V & string & keyof ModelsOf<TContract>\n ? Simplify<\n Omit<DefaultModelRow<TContract, ModelName>, DiscField> &\n DefaultModelRow<TContract, VariantName> &\n Record<DiscField, V[VariantName]['value']>\n >\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>\n : DefaultModelRow<TContract, ModelName>;\n\ndeclare const aggregateResultBrand: unique symbol;\n\nexport interface AggregateSelector<Result> {\n readonly kind: 'aggregate';\n readonly fn: AggregateFn;\n readonly column?: string;\n readonly [aggregateResultBrand]?: Result;\n}\n\nexport type AggregateSpec = Record<string, AggregateSelector<unknown>>;\n\nexport type AggregateResult<Spec extends AggregateSpec> = {\n [K in keyof Spec]: Spec[K] extends AggregateSelector<infer Result> ? Result : never;\n};\n\nexport interface AggregateBuilder<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n count(): AggregateSelector<number>;\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): AggregateSelector<number | null>;\n}\n\nexport type HavingComparisonMethods<T> = Pick<\n ComparisonMethods<T, 'equality' | 'order'>,\n 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte'\n>;\n\nexport interface HavingBuilder<TContract extends Contract<SqlStorage>, ModelName extends string> {\n count(): HavingComparisonMethods<number>;\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): HavingComparisonMethods<number | null>;\n}\n\nexport type ShorthandWhereFilter<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<{\n [K in keyof DefaultModelRow<TContract, ModelName> & string]:\n | DefaultModelRow<TContract, ModelName>[K]\n | null\n | undefined;\n}>;\n\ntype ModelsOf<TContract extends Contract<SqlStorage>> =\n TContract['models'] extends Record<string, unknown> ? TContract['models'] : Record<string, never>;\n\ntype ModelDef<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ModelName extends keyof ModelsOf<TContract> ? ModelsOf<TContract>[ModelName] : never;\n\ntype FieldsOf<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends { readonly fields: infer F }\n ? F extends Record<string, unknown>\n ? F\n : Record<string, never>\n : Record<string, never>;\n\ntype ModelStorageFields<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly storage: { readonly fields: infer Fields };\n }\n ? Fields extends Record<string, { readonly column: string }>\n ? Fields\n : never\n : never;\n\ntype ModelFieldToColumnMap<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageFields<TContract, ModelName> extends infer Fields\n ? Fields extends Record<string, { readonly column: string }>\n ? { readonly [F in keyof Fields]: Fields[F]['column'] }\n : never\n : never;\n\ntype FieldToColumnMapSafe<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string>\n ? ModelFieldToColumnMap<TContract, ModelName>\n : never;\n\ntype ModelTableName<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly storage: { readonly table: infer T extends string };\n }\n ? T\n : never;\n\ntype FieldColumnName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = (FieldToColumnMapSafe<TContract, ModelName> extends never\n ? FieldName\n : FieldName extends keyof FieldToColumnMapSafe<TContract, ModelName>\n ? FieldToColumnMapSafe<TContract, ModelName>[FieldName]\n : FieldName) &\n string;\n\ntype NamespaceTableDef<TContract extends Contract<SqlStorage>, TableName extends string> = {\n [K in keyof TContract['storage']['namespaces']]: TContract['storage']['namespaces'][K] extends {\n readonly tables: infer Tables;\n }\n ? TableName extends keyof Tables\n ? Tables[TableName]\n : never\n : never;\n}[keyof TContract['storage']['namespaces']];\n\ntype ResolvedStorageColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? FieldColumnName<TContract, ModelName, FieldName> extends infer ColName extends string\n ? NamespaceTableDef<TContract, TableName> extends { readonly columns: infer Columns }\n ? ColName extends keyof Columns\n ? Columns[ColName] extends StorageColumn\n ? Columns[ColName]\n : never\n : never\n : never\n : never\n : never;\n\ntype FieldStorageJsType<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n ResolvedStorageColumn<TContract, ModelName, FieldName> extends infer Col extends StorageColumn\n ? ComputeColumnJsType<\n TContract,\n ModelTableName<TContract, ModelName> & string,\n FieldColumnName<TContract, ModelName, FieldName> & string,\n Col,\n ExtractCodecTypes<TContract>\n >\n : never;\n\ntype FieldJsType<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = [FieldStorageJsType<TContract, ModelName, FieldName>] extends [never]\n ? unknown\n : FieldStorageJsType<TContract, ModelName, FieldName>;\n\ntype FieldStorageColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = ResolvedStorageColumn<TContract, ModelName, FieldName>;\n\ntype FieldCodecId<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends {\n readonly codecId: infer Id extends string;\n }\n ? Id\n : never;\n\ntype FieldNullable<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends {\n readonly nullable: infer N extends boolean;\n }\n ? N\n : false;\n\ntype FieldTraits<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldCodecId<TContract, ModelName, FieldName> extends infer Id extends string\n ? Id extends keyof ExtractCodecTypes<TContract>\n ? ExtractCodecTypes<TContract>[Id] extends { readonly traits: infer T }\n ? T\n : never\n : never\n : never;\n\nexport type NumericFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in keyof DefaultModelRow<TContract, ModelName> & string]: 'numeric' extends FieldTraits<\n TContract,\n ModelName,\n K\n >\n ? K\n : never;\n}[keyof DefaultModelRow<TContract, ModelName> & string];\n\ntype ExecutionDefaultEntry<TContract extends Contract<SqlStorage>> =\n TContract['execution'] extends {\n readonly mutations: {\n readonly defaults: infer Defaults;\n };\n }\n ? Defaults extends ReadonlyArray<unknown>\n ? Defaults[number]\n : never\n : never;\n\ntype HasExecutionCreateDefault<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = [\n Extract<\n ExecutionDefaultEntry<TContract>,\n {\n readonly ref: {\n readonly table: ModelTableName<TContract, ModelName>;\n readonly column: FieldColumnName<TContract, ModelName, FieldName>;\n };\n readonly onCreate?: unknown;\n }\n >,\n] extends [never]\n ? false\n : true;\n\ntype IsOptionalCreateField<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> =\n FieldStorageColumn<TContract, ModelName, FieldName> extends infer Column\n ? Column extends StorageColumn\n ? Column['nullable'] extends true\n ? true\n : Column extends { readonly default: unknown }\n ? true\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>\n : HasExecutionCreateDefault<TContract, ModelName, FieldName>;\n\ntype CreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = keyof DefaultModelRow<TContract, ModelName> & string;\n\ntype RequiredCreateFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in CreateFieldNames<TContract, ModelName>]-?: IsOptionalCreateField<\n TContract,\n ModelName,\n K\n > extends true\n ? never\n : K;\n}[CreateFieldNames<TContract, ModelName>];\n\ntype OptionalCreateFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {\n [K in CreateFieldNames<TContract, ModelName>]-?: IsOptionalCreateField<\n TContract,\n ModelName,\n K\n > extends true\n ? K\n : never;\n}[CreateFieldNames<TContract, ModelName>];\n\nexport type CreateInput<TContract extends Contract<SqlStorage>, ModelName extends string> = Pick<\n DefaultModelRow<TContract, ModelName>,\n RequiredCreateFieldNames<TContract, ModelName>\n> &\n Partial<\n Pick<DefaultModelRow<TContract, ModelName>, OptionalCreateFieldNames<TContract, ModelName>>\n > &\n RelationMutationFields<TContract, ModelName>;\n\ntype IsPolymorphicBase<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: unknown;\n readonly variants: Record<string, unknown>;\n }\n ? true\n : false;\n\ntype DiscriminatorFieldName<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends {\n readonly discriminator: { readonly field: infer F extends string };\n }\n ? F\n : never;\n\nexport type VariantCreateInput<\n TContract extends Contract<SqlStorage>,\n BaseModelName extends string,\n VariantName extends string,\n> = Omit<CreateInput<TContract, BaseModelName>, DiscriminatorFieldName<TContract, BaseModelName>> &\n CreateInput<TContract, VariantName>;\n\nexport type ResolvedCreateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n VName extends string | undefined,\n> =\n IsPolymorphicBase<TContract, ModelName> extends true\n ? VName extends string\n ? VariantCreateInput<TContract, ModelName, VName>\n : never\n : CreateInput<TContract, ModelName>;\n\ntype ModelStorageTableDef<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? NamespaceTableDef<TContract, TableName>\n : never;\n\ntype PrimaryKeyConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageTableDef<TContract, ModelName> extends {\n readonly primaryKey: { readonly columns: infer Columns extends readonly string[] };\n }\n ? Columns\n : never;\n\ntype UniqueConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelStorageTableDef<TContract, ModelName> extends {\n readonly uniques: infer Uniques;\n }\n ? Uniques extends ReadonlyArray<infer Unique>\n ? Unique extends { readonly columns: infer Columns extends readonly string[] }\n ? Columns\n : never\n : never\n : never;\n\ntype FieldNameForColumn<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n ColumnName extends string,\n> = {\n [K in keyof DefaultModelRow<TContract, ModelName> & string]: FieldColumnName<\n TContract,\n ModelName,\n K\n > extends ColumnName\n ? K\n : never;\n}[keyof DefaultModelRow<TContract, ModelName> & string] extends infer Matched\n ? Matched extends string\n ? Matched\n : ColumnName\n : ColumnName;\n\ntype RowValueForField<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n FieldName extends string,\n> = FieldName extends keyof DefaultModelRow<TContract, ModelName>\n ? DefaultModelRow<TContract, ModelName>[FieldName]\n : unknown;\n\ntype CriterionFromConstraintColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Columns extends readonly string[],\n> = string extends Columns[number]\n ? Record<string, unknown>\n : {\n [C in Columns[number] as FieldNameForColumn<TContract, ModelName, C>]: RowValueForField<\n TContract,\n ModelName,\n FieldNameForColumn<TContract, ModelName, C>\n >;\n };\n\ntype ConstraintColumnsUnion<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | PrimaryKeyConstraintColumns<TContract, ModelName>\n | UniqueConstraintColumns<TContract, ModelName>;\n\nexport type UniqueConstraintCriterion<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> =\n ConstraintColumnsUnion<TContract, ModelName> extends infer Columns\n ? Columns extends readonly string[]\n ? CriterionFromConstraintColumns<TContract, ModelName, Columns>\n : never\n : never;\n\ntype RelationConnectCriterion<TContract extends Contract<SqlStorage>, ModelName extends string> = [\n UniqueConstraintCriterion<TContract, ModelName>,\n] extends [never]\n ? Record<string, unknown>\n : UniqueConstraintCriterion<TContract, ModelName>;\n\nexport interface RelationMutationCreate<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'create';\n readonly data: readonly MutationCreateInput<TContract, ModelName>[];\n}\n\nexport interface RelationMutationConnect<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'connect';\n readonly criteria: readonly RelationConnectCriterion<TContract, ModelName>[];\n}\n\nexport interface RelationMutationDisconnect<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> {\n readonly kind: 'disconnect';\n readonly criteria?: readonly RelationConnectCriterion<TContract, ModelName>[];\n}\n\nexport type RelationMutation<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | RelationMutationCreate<TContract, ModelName>\n | RelationMutationConnect<TContract, ModelName>\n | RelationMutationDisconnect<TContract, ModelName>;\n\nexport interface RelationMutator<TContract extends Contract<SqlStorage>, ModelName extends string> {\n create(\n data: MutationCreateInput<TContract, ModelName>,\n ): RelationMutationCreate<TContract, ModelName>;\n create(\n data: readonly MutationCreateInput<TContract, ModelName>[],\n ): RelationMutationCreate<TContract, ModelName>;\n connect(\n criterion: RelationConnectCriterion<TContract, ModelName>,\n ): RelationMutationConnect<TContract, ModelName>;\n connect(\n criteria: readonly RelationConnectCriterion<TContract, ModelName>[],\n ): RelationMutationConnect<TContract, ModelName>;\n disconnect(): RelationMutationDisconnect<TContract, ModelName>;\n disconnect(\n criteria: readonly RelationConnectCriterion<TContract, ModelName>[],\n ): RelationMutationDisconnect<TContract, ModelName>;\n}\n\ntype RelationMutationCallback<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends RelationNames<TContract, ModelName>,\n> = (\n mutator: RelationMutator<TContract, RelatedModelName<TContract, ModelName, RelName> & string>,\n) => RelationMutation<TContract, RelatedModelName<TContract, ModelName, RelName> & string>;\n\ntype RelationMutationFields<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<{\n [K in RelationNames<TContract, ModelName>]: RelationMutationCallback<TContract, ModelName, K>;\n}>;\n\ntype AllModelRelationEntries<TContract extends Contract<SqlStorage>> = {\n [M in keyof ModelsOf<TContract>]: ModelsOf<TContract>[M] extends {\n readonly relations: infer R extends Record<string, unknown>;\n }\n ? R[keyof R]\n : never;\n}[keyof ModelsOf<TContract>];\n\ntype RelationDefWithTargetFields = {\n readonly to: string;\n readonly on: {\n readonly targetFields: readonly string[];\n };\n};\n\ntype ChildForeignKeyFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> =\n Extract<AllModelRelationEntries<TContract>, RelationDefWithTargetFields> extends infer Relation\n ? Relation extends {\n readonly to: ModelName;\n readonly on: {\n readonly targetFields: infer Fields extends readonly string[];\n };\n }\n ? Fields[number]\n : never\n : never;\n\ntype NestedOptionalCreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> =\n | OptionalCreateFieldNames<TContract, ModelName>\n | Extract<\n ChildForeignKeyFieldNames<TContract, ModelName>,\n CreateFieldNames<TContract, ModelName>\n >;\n\ntype NestedRequiredCreateFieldNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Exclude<\n CreateFieldNames<TContract, ModelName>,\n NestedOptionalCreateFieldNames<TContract, ModelName>\n>;\n\ntype NestedCreateInput<TContract extends Contract<SqlStorage>, ModelName extends string> = Pick<\n DefaultModelRow<TContract, ModelName>,\n NestedRequiredCreateFieldNames<TContract, ModelName>\n> &\n Partial<\n Pick<\n DefaultModelRow<TContract, ModelName>,\n NestedOptionalCreateFieldNames<TContract, ModelName>\n >\n >;\n\ntype AtLeastOne<T> = keyof T extends never\n ? never\n : {\n [K in keyof T]-?: Pick<T, K> & Partial<Omit<T, K>>;\n }[keyof T];\n\nexport type MutationCreateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = NestedCreateInput<TContract, ModelName> & RelationMutationFields<TContract, ModelName>;\n\nexport type MutationCreateInputWithRelations<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = NestedCreateInput<TContract, ModelName> &\n AtLeastOne<RelationMutationFields<TContract, ModelName>>;\n\nexport type MutationUpdateInput<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = Partial<DefaultModelRow<TContract, ModelName>> & RelationMutationFields<TContract, ModelName>;\n\ntype ModelRelations<TContract extends Contract<SqlStorage>, ModelName extends string> =\n ModelDef<TContract, ModelName> extends { readonly relations: infer R }\n ? R extends Record<string, unknown>\n ? R\n : Record<string, never>\n : Record<string, never>;\n\ntype ExactRecord<T> =\n T extends Record<string, unknown>\n ? string extends keyof T\n ? Record<string, never>\n : T\n : Record<string, never>;\n\nexport type RelationsOf<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = ExactRecord<ModelRelations<TContract, ModelName>>;\n\nexport type RelationNames<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n> = (string extends keyof RelationsOf<TContract, ModelName>\n ? never\n : keyof RelationsOf<TContract, ModelName>) &\n string;\n\ntype RelationModelName<Relation> = Relation extends { readonly to: infer To extends string }\n ? To\n : never;\n\nexport type RelatedModelName<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n RelationsOf<TContract, ModelName> extends infer Rels\n ? Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationModelName<Rels[RelName]>\n : never\n : never\n : never;\n\ntype RelationCardinalityFromRelation<Relation> = Relation extends {\n readonly cardinality: infer Cardinality extends RelationCardinalityTag;\n}\n ? Cardinality\n : '1:N';\n\nexport type RelationCardinality<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n RelationsOf<TContract, ModelName> extends infer Rels\n ? Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationCardinalityFromRelation<Rels[RelName]>\n : '1:N'\n : '1:N'\n : '1:N';\n\ntype RelationLocalFieldColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Relation,\n> = Relation extends {\n readonly on: { readonly localFields: infer Fields extends readonly string[] };\n}\n ? MapFieldsToColumns<TContract, ModelName, Fields>\n : readonly [];\n\ntype MapFieldsToColumns<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Fields extends readonly string[],\n> = Fields extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? readonly [\n FieldColumnName<TContract, ModelName, Head>,\n ...MapFieldsToColumns<TContract, ModelName, Tail>,\n ]\n : readonly [];\n\ntype AnyColumnNullable<\n Columns extends Record<string, StorageColumn>,\n ColNames extends readonly string[],\n> = ColNames extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? Head extends keyof Columns\n ? Columns[Head]['nullable'] extends true\n ? true\n : AnyColumnNullable<Columns, Tail>\n : true\n : false;\n\ntype HasForeignKeyForCols<\n FKs extends readonly unknown[],\n Cols extends readonly string[],\n> = FKs extends readonly [infer Head, ...infer Tail extends unknown[]]\n ? Head extends { readonly source: { readonly columns: Cols } }\n ? true\n : HasForeignKeyForCols<Tail, Cols>\n : false;\n\ntype IsFkSideOfRelation<\n Table extends StorageTable,\n ParentCols extends readonly string[],\n> = Table extends { readonly foreignKeys: infer FKs extends readonly unknown[] }\n ? HasForeignKeyForCols<FKs, ParentCols>\n : false;\n\ntype IsToOneRelationNullable<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n> =\n ModelTableName<TContract, ModelName> extends infer TableName extends string\n ? NamespaceTableDef<TContract, TableName> extends infer Table extends StorageTable\n ? RelationsOf<TContract, ModelName> extends infer Rels extends Record<string, unknown>\n ? RelName extends keyof Rels\n ? RelationLocalFieldColumns<\n TContract,\n ModelName,\n Rels[RelName]\n > extends infer Cols extends readonly string[]\n ? IsFkSideOfRelation<Table, Cols> extends true\n ? AnyColumnNullable<Table['columns'], Cols>\n : true\n : true\n : true\n : true\n : true\n : true;\n\nexport type IncludeRelationValue<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n RelName extends string,\n IncludedRow,\n> =\n RelationCardinality<TContract, ModelName, RelName> extends '1:1' | 'N:1'\n ? IsToOneRelationNullable<TContract, ModelName, RelName> extends true\n ? IncludedRow | null\n : IncludedRow\n : IncludedRow[];\n\nexport type CollectionModelName<TContract extends Contract<SqlStorage>> =\n keyof ModelsOf<TContract> & string;\n","import type { Contract } from '@prisma-next/contract/types';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport type { SqlStorage, StorageTable } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AndExpr,\n type AnyExpression,\n BinaryExpr,\n type CodecRef,\n ColumnRef,\n ExistsExpr,\n ProjectionItem,\n SelectAst,\n TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport { codecRefForStorageColumn } from '@prisma-next/sql-relational-core/codec-descriptor-registry';\nimport type { Expression, ScopeField } from '@prisma-next/sql-relational-core/expression';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport {\n getFieldToColumnMap,\n modelOf,\n resolveFieldToColumn,\n resolveModelTableName,\n} from './collection-contract';\nimport { and, not } from './filters';\nimport {\n COMPARISON_METHODS_META,\n type ComparisonMethodFns,\n type ModelAccessor,\n type RelationFilterAccessor,\n} from './types';\n\ninterface RelationMeta {\n readonly to: string;\n readonly cardinality?: string;\n readonly on?: {\n readonly localFields?: readonly string[];\n readonly targetFields?: readonly string[];\n };\n}\n\ntype RelationPredicateInput<TContract extends Contract<SqlStorage>, ModelName extends string> =\n | ((model: ModelAccessor<TContract, ModelName>) => AnyExpression)\n | Record<string, unknown>;\n\ntype NamedOp = readonly [name: string, entry: SqlOperationEntry];\n\nexport function createModelAccessor<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(context: ExecutionContext<TContract>, modelName: ModelName): ModelAccessor<TContract, ModelName> {\n const contract = context.contract;\n const fieldToColumn = getFieldToColumnMap(contract, modelName);\n const tableName = resolveModelTableName(contract, modelName);\n const modelRelations = (modelOf(contract, modelName)?.relations ?? {}) as Record<\n string,\n RelationMeta\n >;\n\n const opsByCodecId = new Map<string, NamedOp[]>();\n\n function registerOp(codecId: string, op: NamedOp) {\n let existing = opsByCodecId.get(codecId);\n if (!existing) {\n existing = [];\n opsByCodecId.set(codecId, existing);\n }\n existing.push(op);\n }\n\n for (const [name, entry] of Object.entries(context.queryOperations.entries())) {\n const op: NamedOp = [name, entry];\n const self = entry.self;\n if (!self) continue;\n if (self.codecId !== undefined) {\n registerOp(self.codecId, op);\n } else if (self.traits !== undefined) {\n for (const descriptor of context.codecDescriptors.values()) {\n const descriptorTraits: readonly string[] = descriptor.traits;\n if (self.traits.every((t) => descriptorTraits.includes(t))) {\n registerOp(descriptor.codecId, op);\n }\n }\n }\n }\n\n return new Proxy({} as ModelAccessor<TContract, ModelName>, {\n get(_target, prop: string | symbol): unknown {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = modelRelations[prop];\n if (relation) {\n return createRelationFilterAccessor(context, modelName, tableName, relation);\n }\n\n const columnName = fieldToColumn[prop] ?? prop;\n const column = resolveColumn(contract, tableName, columnName);\n // Unknown fields return `undefined`, matching plain JS object semantics.\n // The `ModelAccessor<TContract, ModelName>` type already rejects typos\n // at compile time for TS consumers, and contexts that iterate accessor\n // keys (e.g. relation-shorthand predicates) can detect missing fields\n // with an `undefined` check and raise their own, domain-specific error.\n if (!column) {\n return undefined;\n }\n const traits = context.codecDescriptors.descriptorFor(column.codecId)?.traits ?? [];\n const operations = opsByCodecId.get(column.codecId) ?? [];\n const codec = codecRefForStorageColumn(contract.storage, tableName, columnName);\n return createScalarFieldAccessor(\n tableName,\n columnName,\n column.codecId,\n column.nullable,\n codec,\n traits,\n operations,\n context,\n );\n },\n });\n}\n\nfunction resolveColumn(\n contract: Contract<SqlStorage>,\n tableName: string,\n columnName: string,\n): { readonly codecId: string; readonly nullable: boolean } | undefined {\n const table = contract.storage.namespaces[UNBOUND_NAMESPACE_ID]?.tables[tableName] as\n | StorageTable\n | undefined;\n const column = table?.columns?.[columnName];\n if (!column) return undefined;\n return { codecId: column.codecId, nullable: column.nullable };\n}\n\nfunction createScalarFieldAccessor(\n tableName: string,\n columnName: string,\n codecId: string,\n nullable: boolean,\n codec: CodecRef | undefined,\n traits: readonly string[],\n operations: readonly NamedOp[],\n context: ExecutionContext,\n): Partial<ComparisonMethodFns<unknown>> {\n const column = ColumnRef.of(tableName, columnName);\n const comparisonEntries: Array<[string, unknown]> = [];\n for (const [name, meta] of Object.entries(COMPARISON_METHODS_META)) {\n if (meta.traits.some((t) => !traits.includes(t))) continue;\n comparisonEntries.push([name, meta.create(column, codec)]);\n }\n\n const accessor = {\n returnType: { codecId, nullable, codec },\n codec,\n buildAst: () => column,\n ...Object.fromEntries(comparisonEntries),\n } as Expression<ScopeField> & Record<string, unknown>;\n\n for (const [name, entry] of operations) {\n accessor[name] = createExtensionMethodFactory(accessor, entry, context);\n }\n\n return accessor as Partial<ComparisonMethodFns<unknown>>;\n}\n\nfunction createExtensionMethodFactory(\n selfExpr: Expression<ScopeField>,\n entry: SqlOperationEntry,\n context: ExecutionContext,\n): (...args: unknown[]) => unknown {\n return (...args: unknown[]) => {\n // `entry.impl` is typed `(...args: never[]) => QueryOperationReturn` —\n // `never[]` args block direct invocation with unknown values, and the\n // declared return omits `buildAst` (sql-contract intentionally doesn't\n // depend on relational-core). Cast here to the practical shape: authors\n // always return Expression<ScopeField> via `buildOperation`.\n const impl = entry.impl as (self: unknown, ...args: unknown[]) => Expression<ScopeField>;\n const result = impl(selfExpr, ...args);\n const returnCodecId = result.returnType.codecId;\n const returnTraits = context.codecDescriptors.descriptorFor(returnCodecId)?.traits ?? [];\n const isPredicate = returnTraits.includes('boolean');\n\n if (isPredicate) {\n return result.buildAst();\n }\n\n const resultAst = result.buildAst();\n const returnCodec: CodecRef = { codecId: returnCodecId };\n const methods: Record<string, unknown> = {};\n for (const [resultMethodName, meta] of Object.entries(COMPARISON_METHODS_META)) {\n if (meta.traits.some((t) => !returnTraits.includes(t))) continue;\n methods[resultMethodName] = meta.create(resultAst, returnCodec);\n }\n return methods;\n };\n}\n\nfunction createRelationFilterAccessor<\n TContract extends Contract<SqlStorage>,\n ParentModelName extends string,\n>(\n context: ExecutionContext<TContract>,\n parentModelName: ParentModelName,\n parentTableName: string,\n relation: RelationMeta,\n): RelationFilterAccessor<TContract, string> {\n const relatedTableName = resolveModelTableName(context.contract, relation.to);\n\n const relationAccessor: RelationFilterAccessor<TContract, string> = {\n some: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'some',\n predicate,\n }),\n every: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'every',\n predicate,\n }),\n none: (predicate) =>\n buildExistsExpr(context, parentModelName, parentTableName, relatedTableName, relation, {\n mode: 'none',\n predicate,\n }),\n };\n\n return relationAccessor;\n}\n\nfunction buildExistsExpr<TContract extends Contract<SqlStorage>>(\n context: ExecutionContext<TContract>,\n parentModelName: string,\n parentTableName: string,\n relatedTableName: string,\n relation: RelationMeta,\n options: {\n readonly mode: 'some' | 'every' | 'none';\n readonly predicate: RelationPredicateInput<TContract, string> | undefined;\n },\n): AnyExpression {\n const joinWhere = buildJoinWhere(\n context.contract,\n parentModelName,\n parentTableName,\n relatedTableName,\n relation,\n );\n const childWhere = toRelationWhereExpr(context, relation.to, options.predicate);\n\n let subqueryWhere = joinWhere;\n let existsNot = false;\n\n if (options.mode === 'every') {\n if (!childWhere) {\n return AndExpr.true();\n }\n existsNot = true;\n subqueryWhere = and(joinWhere, not(childWhere));\n } else if (options.mode === 'none') {\n existsNot = true;\n if (childWhere) {\n subqueryWhere = and(joinWhere, childWhere);\n }\n } else if (childWhere) {\n subqueryWhere = and(joinWhere, childWhere);\n }\n\n const selectProjectionColumn = firstTargetColumn(context.contract, relation) ?? 'id';\n const subquery = SelectAst.from(TableSource.named(relatedTableName))\n .withProjection([\n ProjectionItem.of('_exists', ColumnRef.of(relatedTableName, selectProjectionColumn)),\n ])\n .withWhere(subqueryWhere);\n\n return existsNot ? ExistsExpr.notExists(subquery) : ExistsExpr.exists(subquery);\n}\n\nfunction toRelationWhereExpr<TContract extends Contract<SqlStorage>>(\n context: ExecutionContext<TContract>,\n relatedModelName: string,\n predicate: RelationPredicateInput<TContract, string> | undefined,\n): AnyExpression | undefined {\n if (!predicate) {\n return undefined;\n }\n\n // Both callback and shorthand paths use the trait-gated accessor\n const accessor = createModelAccessor(context, relatedModelName);\n\n if (typeof predicate === 'function') {\n return predicate(accessor);\n }\n\n // Shorthand object — skip fields without eq\n const exprs: AnyExpression[] = [];\n for (const [fieldName, value] of Object.entries(predicate)) {\n if (value === undefined) {\n continue;\n }\n\n const fieldAccessor = (accessor as Record<string, Partial<ComparisonMethodFns<unknown>>>)[\n fieldName\n ];\n // Unknown field in the shorthand predicate — the Proxy returns undefined\n // for fields the contract doesn't declare. Surface it explicitly: silent\n // skip would drop user intent (e.g. a typo'd `nmae: 'Alice'` filter would\n // match every row).\n if (!fieldAccessor) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": field is not defined on the model`,\n );\n }\n\n if (value === null) {\n if (!fieldAccessor.isNull) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": isNull is unexpectedly missing — this is a bug in trait gating`,\n );\n }\n exprs.push(fieldAccessor.isNull());\n continue;\n }\n\n if (!fieldAccessor.eq) {\n throw new Error(\n `Shorthand filter on \"${relatedModelName}.${fieldName}\": field does not support equality comparisons`,\n );\n }\n exprs.push(fieldAccessor.eq(value));\n }\n\n if (exprs.length === 0) {\n return undefined;\n }\n\n return exprs.length === 1 ? exprs[0] : and(...exprs);\n}\n\nfunction buildJoinWhere<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n parentModelName: string,\n parentTableName: string,\n relatedTableName: string,\n relation: RelationMeta,\n): AnyExpression {\n const localFields = relation.on?.localFields ?? [];\n const targetFields = relation.on?.targetFields ?? [];\n\n const joinExprs: AnyExpression[] = [];\n const count = Math.min(localFields.length, targetFields.length);\n\n for (let i = 0; i < count; i++) {\n const localField = localFields[i];\n const targetField = targetFields[i];\n if (!localField || !targetField) {\n continue;\n }\n\n const localColumn = resolveFieldToColumn(contract, parentModelName, localField);\n const targetColumn = resolveFieldToColumn(contract, relation.to, targetField);\n\n joinExprs.push(\n BinaryExpr.eq(\n ColumnRef.of(relatedTableName, targetColumn),\n ColumnRef.of(parentTableName, localColumn),\n ),\n );\n }\n\n if (joinExprs.length === 0) {\n throw new Error('Relation metadata is missing join columns');\n }\n\n const firstExpr = joinExprs[0];\n if (joinExprs.length === 1 && firstExpr !== undefined) {\n return firstExpr;\n }\n\n return and(...joinExprs);\n}\n\nfunction firstTargetColumn<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n relation: RelationMeta,\n): string | undefined {\n const targetFields = relation.on?.targetFields;\n const firstField = targetFields?.[0];\n if (!firstField) {\n return undefined;\n }\n return resolveFieldToColumn(contract, relation.to, firstField);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n MutationCreateInput,\n RelationMutation,\n RelationMutationConnect,\n RelationMutationCreate,\n RelationMutationDisconnect,\n RelationMutator,\n} from './types';\n\nexport function createRelationMutator<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n>(): RelationMutator<TContract, ModelName> {\n return {\n create(\n data:\n | MutationCreateInput<TContract, ModelName>\n | readonly MutationCreateInput<TContract, ModelName>[],\n ) {\n const rows = Array.isArray(data) ? [...data] : [data];\n return {\n kind: 'create',\n data: rows,\n } as RelationMutationCreate<TContract, ModelName>;\n },\n connect(criteria: Record<string, unknown> | readonly Record<string, unknown>[]) {\n const values = Array.isArray(criteria) ? [...criteria] : [criteria];\n return {\n kind: 'connect',\n criteria: values,\n } as RelationMutationConnect<TContract, ModelName>;\n },\n disconnect(criteria?: readonly Record<string, unknown>[]) {\n if (!criteria) {\n return {\n kind: 'disconnect',\n } as RelationMutationDisconnect<TContract, ModelName>;\n }\n\n return {\n kind: 'disconnect',\n criteria: [...criteria],\n } as RelationMutationDisconnect<TContract, ModelName>;\n },\n } as RelationMutator<TContract, ModelName>;\n}\n\nexport function isRelationMutationDescriptor(\n value: unknown,\n): value is RelationMutation<Contract<SqlStorage>, string> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const candidate = value as { kind?: unknown };\n if (\n candidate.kind !== 'create' &&\n candidate.kind !== 'connect' &&\n candidate.kind !== 'disconnect'\n ) {\n return false;\n }\n\n return true;\n}\n\nexport function isRelationMutationCallback(\n value: unknown,\n): value is (\n mutator: RelationMutator<Contract<SqlStorage>, string>,\n) => RelationMutation<Contract<SqlStorage>, string> {\n return typeof value === 'function';\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n LiteralExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { RuntimeScope } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnToFieldMap,\n resolveFieldToColumn,\n resolveModelRelations,\n resolveModelTableName,\n resolvePrimaryKeyColumn,\n} from './collection-contract';\nimport {\n acquireRuntimeScope,\n mapModelDataToStorageRow,\n mapStorageRowToModelFields,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { and, shorthandToWhereExpr } from './filters';\nimport {\n compileInsertReturning,\n compileSelect,\n compileUpdateCount,\n compileUpdateReturning,\n} from './query-plan';\nimport {\n createRelationMutator,\n isRelationMutationCallback,\n isRelationMutationDescriptor,\n} from './relation-mutator';\nimport type {\n CollectionState,\n MutationCreateInput,\n MutationUpdateInput,\n RelationCardinalityTag,\n RelationMutation,\n RelationMutator,\n RuntimeQueryable,\n} from './types';\nimport { emptyState } from './types';\n\ninterface RelationDefinition {\n readonly relationName: string;\n readonly relatedModelName: string;\n readonly relatedTableName: string;\n readonly cardinality: RelationCardinalityTag | undefined;\n readonly localColumns: readonly string[];\n readonly targetColumns: readonly string[];\n}\n\ninterface ParsedRelationMutation {\n readonly relation: RelationDefinition;\n readonly mutation: RelationMutation<Contract<SqlStorage>, string>;\n}\n\ninterface ParsedMutationInput {\n readonly scalarData: Record<string, unknown>;\n readonly relationMutations: readonly ParsedRelationMutation[];\n}\n\nexport function hasNestedMutationCallbacks(\n contract: Contract<SqlStorage>,\n modelName: string,\n data: Record<string, unknown>,\n): boolean {\n const relationNames = new Set(\n getRelationDefinitions(contract, modelName).map((relation) => relation.relationName),\n );\n for (const [fieldName, value] of Object.entries(data)) {\n if (!relationNames.has(fieldName)) {\n continue;\n }\n if (isRelationMutationCallback(value)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function executeNestedCreateMutation(options: {\n context: ExecutionContext;\n runtime: RuntimeQueryable;\n modelName: string;\n data: MutationCreateInput<Contract<SqlStorage>, string>;\n}): Promise<Record<string, unknown>> {\n return withMutationScope(options.runtime, async (scope) =>\n createGraph(scope, options.context, options.modelName, options.data),\n );\n}\n\nexport async function executeNestedUpdateMutation(options: {\n context: ExecutionContext;\n runtime: RuntimeQueryable;\n modelName: string;\n filters: readonly AnyExpression[];\n data: MutationUpdateInput<Contract<SqlStorage>, string>;\n}): Promise<Record<string, unknown> | null> {\n return withMutationScope(options.runtime, async (scope) =>\n updateFirstGraph(scope, options.context, options.modelName, options.filters, options.data),\n );\n}\n\nexport function buildPrimaryKeyFilterFromRow(\n contract: Contract<SqlStorage>,\n modelName: string,\n row: Record<string, unknown>,\n): Record<string, unknown> {\n const tableName = resolveModelTableName(contract, modelName);\n const primaryKeyColumn = resolvePrimaryKeyColumn(contract, tableName);\n const fieldName = toFieldName(contract, modelName, primaryKeyColumn);\n const value = row[fieldName];\n if (value === undefined) {\n throw new Error(\n `Missing primary key field \"${fieldName}\" while reloading model \"${modelName}\"`,\n );\n }\n\n return {\n [fieldName]: value,\n };\n}\n\nexport async function withMutationScope<T>(\n runtime: RuntimeQueryable,\n run: (scope: RuntimeScope) => Promise<T>,\n): Promise<T> {\n if (typeof runtime.transaction === 'function') {\n const transaction = await runtime.transaction();\n try {\n const result = await run(transaction);\n if (typeof transaction.commit === 'function') {\n await transaction.commit();\n }\n return result;\n } catch (error) {\n if (typeof transaction.rollback === 'function') {\n await transaction.rollback();\n }\n throw error;\n }\n }\n\n const { scope, release } = await acquireRuntimeScope(runtime);\n try {\n return await run(scope);\n } finally {\n if (release) {\n await release();\n }\n }\n}\n\nasync function createGraph(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n input: MutationCreateInput<Contract<SqlStorage>, string>,\n): Promise<Record<string, unknown>> {\n const contract = context.contract;\n const parsed = parseMutationInput(contract, modelName, input);\n const { parentOwned, childOwned } = partitionByOwnership(parsed.relationMutations);\n\n const scalarData = { ...parsed.scalarData };\n\n for (const relationMutation of parentOwned) {\n if (relationMutation.mutation.kind === 'disconnect') {\n throw new Error('disconnect() is only supported in update() nested mutations');\n }\n\n await applyParentOwnedMutation(\n scope,\n context,\n modelName,\n scalarData,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n const parentRow = await insertSingleRow(scope, context, modelName, scalarData);\n\n for (const relationMutation of childOwned) {\n if (relationMutation.mutation.kind === 'disconnect') {\n throw new Error('disconnect() is only supported in update() nested mutations');\n }\n\n await applyChildOwnedMutation(\n scope,\n context,\n modelName,\n parentRow,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n return parentRow;\n}\n\nasync function updateFirstGraph(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n filters: readonly AnyExpression[],\n input: MutationUpdateInput<Contract<SqlStorage>, string>,\n): Promise<Record<string, unknown> | null> {\n const contract = context.contract;\n const existingRow = await findFirstByFilters(scope, contract, modelName, filters);\n if (!existingRow) {\n return null;\n }\n\n const parsed = parseMutationInput(contract, modelName, input as Record<string, unknown>);\n const { parentOwned, childOwned } = partitionByOwnership(parsed.relationMutations);\n\n const scalarData = { ...parsed.scalarData };\n\n for (const relationMutation of parentOwned) {\n await applyParentOwnedMutation(\n scope,\n context,\n modelName,\n scalarData,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n let parentRow = existingRow;\n\n const mappedUpdateData = mapModelDataToStorageRow(contract, modelName, scalarData);\n if (Object.keys(mappedUpdateData).length > 0) {\n const tableName = resolveModelTableName(contract, modelName);\n const appliedUpdateDefaults = context.applyMutationDefaults({\n op: 'update',\n table: tableName,\n values: mappedUpdateData,\n });\n for (const def of appliedUpdateDefaults) {\n mappedUpdateData[def.column] = def.value;\n }\n const pkFilter = buildPrimaryKeyFilterFromRow(contract, modelName, existingRow);\n const pkWhere = shorthandToWhereExpr(\n context,\n modelName,\n pkFilter as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!pkWhere) {\n throw new Error(`Failed to build primary key filter for model \"${modelName}\"`);\n }\n\n const compiled = compileUpdateReturning(\n contract,\n tableName,\n mappedUpdateData,\n [pkWhere],\n undefined,\n );\n const updatedRowsRaw = await executeQueryPlan<Record<string, unknown>>(\n scope,\n compiled,\n ).toArray();\n\n const updatedRaw = updatedRowsRaw[0];\n if (updatedRaw) {\n parentRow = mapStorageRowToModelFields(contract, modelName, updatedRaw);\n }\n }\n\n for (const relationMutation of childOwned) {\n await applyChildOwnedMutation(\n scope,\n context,\n modelName,\n parentRow,\n relationMutation.relation,\n relationMutation.mutation,\n );\n }\n\n return parentRow;\n}\n\nfunction parseMutationInput(\n contract: Contract<SqlStorage>,\n modelName: string,\n input: Record<string, unknown>,\n): ParsedMutationInput {\n const scalarData: Record<string, unknown> = {};\n const relationDefinitions = new Map(\n getRelationDefinitions(contract, modelName).map((relation) => [\n relation.relationName,\n relation,\n ]),\n );\n\n const relationMutations: ParsedRelationMutation[] = [];\n\n for (const [fieldName, value] of Object.entries(input)) {\n const relation = relationDefinitions.get(fieldName);\n if (!relation) {\n scalarData[fieldName] = value;\n continue;\n }\n\n if (!isRelationMutationCallback(value)) {\n throw new Error(\n `Relation field \"${fieldName}\" on model \"${modelName}\" expects a mutator callback`,\n );\n }\n\n const mutator = createRelationMutator<Contract<SqlStorage>, string>();\n const mutation = value(mutator as RelationMutator<Contract<SqlStorage>, string>);\n if (!isRelationMutationDescriptor(mutation)) {\n throw new Error(\n `Relation field \"${fieldName}\" on model \"${modelName}\" returned an invalid mutation descriptor`,\n );\n }\n\n relationMutations.push({\n relation,\n mutation,\n });\n }\n\n return {\n scalarData,\n relationMutations,\n };\n}\n\nfunction partitionByOwnership(relationMutations: readonly ParsedRelationMutation[]): {\n parentOwned: ParsedRelationMutation[];\n childOwned: ParsedRelationMutation[];\n} {\n const parentOwned: ParsedRelationMutation[] = [];\n const childOwned: ParsedRelationMutation[] = [];\n\n for (const relationMutation of relationMutations) {\n if (relationMutation.relation.cardinality === 'N:1') {\n parentOwned.push(relationMutation);\n continue;\n }\n\n if (relationMutation.relation.cardinality === 'M:N') {\n throw new Error('M:N nested mutations are not supported yet');\n }\n\n childOwned.push(relationMutation);\n }\n\n return {\n parentOwned,\n childOwned,\n };\n}\n\nasync function applyParentOwnedMutation(\n scope: RuntimeScope,\n context: ExecutionContext,\n parentModelName: string,\n scalarData: Record<string, unknown>,\n relation: RelationDefinition,\n mutation: RelationMutation<Contract<SqlStorage>, string>,\n): Promise<void> {\n const contract = context.contract;\n if (mutation.kind === 'disconnect') {\n for (const localColumn of relation.localColumns) {\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n scalarData[parentFieldName] = null;\n }\n return;\n }\n\n if (mutation.kind === 'create') {\n const row = mutation.data[0];\n if (!row) {\n throw new Error(\n `create() nested mutation for relation \"${relation.relationName}\" requires data`,\n );\n }\n\n const relatedRow = await createGraph(\n scope,\n context,\n relation.relatedModelName,\n row as MutationCreateInput<Contract<SqlStorage>, string>,\n );\n copyRelatedValuesToParent(contract, parentModelName, relation, scalarData, relatedRow);\n return;\n }\n\n const criterion = mutation.criteria[0];\n if (!criterion) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" requires criterion`,\n );\n }\n\n const relatedRow = await findRowByCriterion(\n scope,\n context,\n relation.relatedModelName,\n criterion as Record<string, unknown>,\n );\n if (!relatedRow) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" did not find a matching row`,\n );\n }\n\n copyRelatedValuesToParent(contract, parentModelName, relation, scalarData, relatedRow);\n}\n\nfunction copyRelatedValuesToParent(\n contract: Contract<SqlStorage>,\n parentModelName: string,\n relation: RelationDefinition,\n scalarData: Record<string, unknown>,\n relatedRow: Record<string, unknown>,\n): void {\n for (let i = 0; i < relation.localColumns.length; i++) {\n const localColumn = relation.localColumns[i];\n const targetColumn = relation.targetColumns[i];\n if (!localColumn || !targetColumn) {\n continue;\n }\n\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n const childFieldName = toFieldName(contract, relation.relatedModelName, targetColumn);\n scalarData[parentFieldName] = relatedRow[childFieldName];\n }\n}\n\nasync function applyChildOwnedMutation(\n scope: RuntimeScope,\n context: ExecutionContext,\n parentModelName: string,\n parentRow: Record<string, unknown>,\n relation: RelationDefinition,\n mutation: RelationMutation<Contract<SqlStorage>, string>,\n): Promise<void> {\n const contract = context.contract;\n const parentValues = readParentColumnValues(contract, parentModelName, relation, parentRow);\n\n if (mutation.kind === 'create') {\n for (const childInput of mutation.data) {\n const payload = {\n ...(childInput as Record<string, unknown>),\n };\n\n for (const [childColumn, parentValue] of parentValues.entries()) {\n const childFieldName = toFieldName(contract, relation.relatedModelName, childColumn);\n payload[childFieldName] = parentValue;\n }\n\n await createGraph(\n scope,\n context,\n relation.relatedModelName,\n payload as MutationCreateInput<Contract<SqlStorage>, string>,\n );\n }\n return;\n }\n\n if (mutation.kind === 'connect') {\n for (const criterion of mutation.criteria) {\n const criterionWhere = shorthandToWhereExpr(\n context,\n relation.relatedModelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!criterionWhere) {\n throw new Error(\n `connect() nested mutation for relation \"${relation.relationName}\" requires non-empty criterion`,\n );\n }\n\n const setValues: Record<string, unknown> = {};\n for (const [childColumn, parentValue] of parentValues.entries()) {\n setValues[childColumn] = parentValue;\n }\n\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n criterionWhere,\n ]);\n }\n return;\n }\n\n const setValues: Record<string, unknown> = {};\n for (const childColumn of parentValues.keys()) {\n setValues[childColumn] = null;\n }\n\n if (!mutation.criteria || mutation.criteria.length === 0) {\n const parentJoinWhere = buildChildJoinWhere(relation, parentValues);\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n parentJoinWhere,\n ]);\n return;\n }\n\n for (const criterion of mutation.criteria) {\n const criterionWhere = shorthandToWhereExpr(\n context,\n relation.relatedModelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!criterionWhere) {\n throw new Error(\n `disconnect() nested mutation for relation \"${relation.relationName}\" requires non-empty criterion`,\n );\n }\n\n const parentJoinWhere = buildChildJoinWhere(relation, parentValues);\n await executeUpdateCount(scope, contract, relation.relatedTableName, setValues, [\n and(parentJoinWhere, criterionWhere),\n ]);\n }\n}\n\nfunction readParentColumnValues(\n contract: Contract<SqlStorage>,\n parentModelName: string,\n relation: RelationDefinition,\n parentRow: Record<string, unknown>,\n): Map<string, unknown> {\n const values = new Map<string, unknown>();\n\n for (let i = 0; i < relation.localColumns.length; i++) {\n const localColumn = relation.localColumns[i];\n const targetColumn = relation.targetColumns[i];\n if (!localColumn || !targetColumn) {\n continue;\n }\n\n const parentFieldName = toFieldName(contract, parentModelName, localColumn);\n const parentValue = parentRow[parentFieldName];\n if (parentValue === undefined) {\n throw new Error(\n `Nested mutation requires parent field \"${parentFieldName}\" to be present in returned row`,\n );\n }\n\n values.set(targetColumn, parentValue);\n }\n\n return values;\n}\n\nfunction buildChildJoinWhere(\n relation: RelationDefinition,\n childValues: Map<string, unknown>,\n): AnyExpression {\n const exprs: AnyExpression[] = [];\n\n for (const [childColumn, parentValue] of childValues.entries()) {\n exprs.push(\n BinaryExpr.eq(\n ColumnRef.of(relation.relatedTableName, childColumn),\n LiteralExpr.of(parentValue),\n ),\n );\n }\n\n const first = exprs[0];\n if (exprs.length === 1 && first !== undefined) {\n return first;\n }\n\n return and(...exprs);\n}\n\nasync function insertSingleRow(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n data: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const contract = context.contract;\n const tableName = resolveModelTableName(contract, modelName);\n\n const mappedData = mapModelDataToStorageRow(contract, modelName, data);\n const applied = context.applyMutationDefaults({\n op: 'create',\n table: tableName,\n values: mappedData,\n });\n\n for (const def of applied) {\n mappedData[def.column] = def.value;\n }\n\n const compiled = compileInsertReturning(contract, tableName, [mappedData], undefined);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n throw new Error(`Nested create for model \"${modelName}\" did not return a row`);\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function findRowByCriterion(\n scope: RuntimeScope,\n context: ExecutionContext,\n modelName: string,\n criterion: Record<string, unknown>,\n): Promise<Record<string, unknown> | null> {\n const contract = context.contract;\n const whereExpr = shorthandToWhereExpr(\n context,\n modelName,\n criterion as MutationUpdateInput<Contract<SqlStorage>, string>,\n );\n if (!whereExpr) {\n throw new Error(`Nested connect for model \"${modelName}\" requires non-empty criterion`);\n }\n\n const tableName = resolveModelTableName(contract, modelName);\n const state: CollectionState = {\n ...emptyState(),\n filters: [whereExpr],\n limit: 1,\n };\n const compiled = compileSelect(contract, tableName, state);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n return null;\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function findFirstByFilters(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n modelName: string,\n filters: readonly AnyExpression[],\n): Promise<Record<string, unknown> | null> {\n const tableName = resolveModelTableName(contract, modelName);\n const state: CollectionState = {\n ...emptyState(),\n filters,\n limit: 1,\n };\n const compiled = compileSelect(contract, tableName, state);\n const rows = await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n\n const firstRow = rows[0];\n if (!firstRow) {\n return null;\n }\n\n return mapStorageRowToModelFields(contract, modelName, firstRow);\n}\n\nasync function executeUpdateCount(\n scope: RuntimeScope,\n contract: Contract<SqlStorage>,\n tableName: string,\n setValues: Record<string, unknown>,\n filters: readonly AnyExpression[],\n): Promise<void> {\n const compiled = compileUpdateCount(contract, tableName, setValues, filters);\n await executeQueryPlan<Record<string, unknown>>(scope, compiled).toArray();\n}\n\nconst relationDefsCache = new WeakMap<object, Map<string, RelationDefinition[]>>();\n\nfunction getRelationDefinitions(\n contract: Contract<SqlStorage>,\n modelName: string,\n): RelationDefinition[] {\n let perContract = relationDefsCache.get(contract);\n if (!perContract) {\n perContract = new Map();\n relationDefsCache.set(contract, perContract);\n }\n const cached = perContract.get(modelName);\n if (cached) return cached;\n\n const relations = resolveModelRelations(contract, modelName);\n const definitions = Object.entries(relations).map(([relationName, relation]) => ({\n relationName,\n relatedModelName: relation.to,\n relatedTableName: resolveModelTableName(contract, relation.to),\n cardinality: relation.cardinality,\n localColumns: relation.on.localFields.map((f) => resolveFieldToColumn(contract, modelName, f)),\n targetColumns: relation.on.targetFields.map((f) =>\n resolveFieldToColumn(contract, relation.to, f),\n ),\n }));\n\n perContract.set(modelName, definitions);\n return definitions;\n}\n\nfunction toFieldName(\n contract: Contract<SqlStorage>,\n modelName: string,\n columnName: string,\n): string {\n const columnToField = getColumnToFieldMap(contract, modelName);\n return columnToField[columnName] ?? columnName;\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { AnyExpression, ToWhereExpr, WhereArg } from '@prisma-next/sql-relational-core/ast';\nimport { isWhereExpr } from '@prisma-next/sql-relational-core/ast';\nimport { bindWhereExpr } from './where-binding';\n\ninterface NormalizeWhereArgOptions {\n readonly contract?: Contract<SqlStorage>;\n}\n\nexport function normalizeWhereArg(arg: undefined): undefined;\nexport function normalizeWhereArg(arg: undefined, options: NormalizeWhereArgOptions): undefined;\nexport function normalizeWhereArg(arg: WhereArg, options?: NormalizeWhereArgOptions): AnyExpression;\nexport function normalizeWhereArg(\n arg: WhereArg | undefined,\n options?: NormalizeWhereArgOptions,\n): AnyExpression | undefined;\nexport function normalizeWhereArg(\n arg: WhereArg | undefined,\n options?: NormalizeWhereArgOptions,\n): AnyExpression | undefined {\n if (arg === undefined) {\n return undefined;\n }\n if (arg === null) {\n throw new Error(\n 'WhereArg cannot be null. Pass undefined or a valid WhereExpr/ToWhereExpr payload.',\n );\n }\n\n if (isToWhereExpr(arg)) {\n return arg.toWhereExpr();\n }\n\n if (options?.contract) {\n return bindWhereExpr(options.contract, arg);\n }\n return arg;\n}\n\nfunction isToWhereExpr(arg: WhereArg): arg is ToWhereExpr {\n return typeof arg === 'object' && arg !== null && 'toWhereExpr' in arg && !isWhereExpr(arg);\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type {\n AnnotationValue,\n MetaBuilder,\n OperationKind,\n} from '@prisma-next/framework-components/runtime';\nimport { AsyncIterableResult, createMetaBuilder } from '@prisma-next/framework-components/runtime';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression,\n BinaryExpr,\n ColumnRef,\n isWhereExpr,\n LiteralExpr,\n type OrderByItem,\n type ToWhereExpr,\n type WhereArg,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SimplifyDeep } from '@prisma-next/utils/simplify-deep';\nimport { createAggregateBuilder, isAggregateSelector } from './aggregate-builder';\nimport { normalizeAggregateResult } from './collection-aggregate-result';\nimport { mapCursorValuesToColumns, mapFieldsToColumns } from './collection-column-mapping';\nimport {\n assertReturningCapability,\n getColumnToFieldMap,\n getFieldToColumnMap,\n isToOneCardinality,\n type PolymorphismInfo,\n resolveFieldToColumn,\n resolveIncludeRelation,\n resolveModelTableName,\n resolvePolymorphismInfo,\n resolvePrimaryKeyColumn,\n resolveRowIdentityColumns,\n resolveUpsertConflictColumns,\n} from './collection-contract';\nimport { dispatchCollectionRows } from './collection-dispatch';\nimport type {\n CollectionConstructor,\n CollectionInit,\n IncludedRelationsForRow,\n IncludeRefinementCollection,\n IncludeRefinementResult,\n IncludeRefinementValue,\n IsToManyRelation,\n RowSelection,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n RowType,\n WithOrderByState,\n WithVariantState,\n WithWhereState,\n} from './collection-internal-types';\nimport {\n dispatchMutationRows,\n dispatchSplitMutationRows,\n executeMutationReturningSingleRow,\n} from './collection-mutation-dispatch';\nimport {\n augmentSelectionForJoinColumns,\n mapModelDataToStorageRow,\n mapPolymorphicRow,\n} from './collection-runtime';\nimport { executeQueryPlan } from './execute-query-plan';\nimport { shorthandToWhereExpr } from './filters';\nimport { GroupedCollection } from './grouped-collection';\nimport {\n createIncludeCombine,\n createIncludeScalar,\n isCollectionStateCarrier,\n isIncludeCombine,\n isIncludeScalar,\n} from './include-descriptors';\nimport { createModelAccessor } from './model-accessor';\nimport {\n buildPrimaryKeyFilterFromRow,\n executeNestedCreateMutation,\n executeNestedUpdateMutation,\n hasNestedMutationCallbacks,\n withMutationScope,\n} from './mutation-executor';\nimport {\n compileAggregate,\n compileDeleteCount,\n compileDeleteReturning,\n compileInsertCount,\n compileInsertCountSplit,\n compileInsertReturning,\n compileInsertReturningSplit,\n compileSelect,\n compileUpdateCount,\n compileUpdateReturning,\n compileUpsertReturning,\n mergeAnnotations,\n} from './query-plan';\nimport {\n type AggregateBuilder,\n type AggregateResult,\n type AggregateSpec,\n type CollectionContext,\n type CollectionState,\n type CollectionTypeState,\n type DefaultCollectionTypeState,\n type DefaultModelRow,\n emptyState,\n type IncludeCombine,\n type IncludeCombineBranch,\n type IncludeExpr,\n type IncludeScalar,\n type InferRootRow,\n type ModelAccessor,\n type MutationCreateInput,\n type MutationCreateInputWithRelations,\n type MutationUpdateInput,\n type NumericFieldNames,\n type RelatedModelName,\n type RelationNames,\n type ResolvedCreateInput,\n type RuntimeQueryable,\n type ShorthandWhereFilter,\n type UniqueConstraintCriterion,\n type VariantModelRow,\n type VariantNames,\n} from './types';\nimport { normalizeWhereArg } from './where-interop';\n\nfunction applyCreateDefaults(\n ctx: CollectionContext<Contract<SqlStorage>>,\n tableName: string,\n rows: Record<string, unknown>[],\n): void {\n // Per-operation cache for generators with `stability: 'query'` (e.g.\n // `timestampNow` for `temporal.updatedAt()`): one generated value\n // shared across every row in this insert. Per-field generators\n // (e.g. `cuid`) ignore the cache and vary per row.\n const defaultValueCache = rows.length > 1 ? new Map<string, unknown>() : undefined;\n for (const row of rows) {\n const applied = ctx.context.applyMutationDefaults({\n op: 'create',\n table: tableName,\n values: row,\n ...(defaultValueCache ? { defaultValueCache } : {}),\n });\n for (const def of applied) {\n row[def.column] = def.value;\n }\n }\n}\n\nfunction applyUpdateDefaults(\n ctx: CollectionContext<Contract<SqlStorage>>,\n tableName: string,\n values: Record<string, unknown>,\n): void {\n const applied = ctx.context.applyMutationDefaults({\n op: 'update',\n table: tableName,\n values,\n });\n for (const def of applied) {\n values[def.column] = def.value;\n }\n}\n\ntype WhereDirectInput = WhereArg;\n\nfunction isToWhereExprInput(value: unknown): value is ToWhereExpr {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'toWhereExpr' in value &&\n typeof (value as { toWhereExpr?: unknown }).toWhereExpr === 'function'\n );\n}\n\nfunction isWhereDirectInput(value: unknown): value is WhereDirectInput {\n return (\n (isWhereExpr(value) && typeof (value as { accept?: unknown }).accept === 'function') ||\n isToWhereExprInput(value)\n );\n}\n\ninterface MtiCreateContext {\n polyInfo: PolymorphismInfo;\n variant: { modelName: string; value: string; table: string; strategy: 'mti' };\n baseFieldToColumn: Record<string, string>;\n variantFieldToColumn: Record<string, string>;\n pkColumn: string;\n}\n\nexport class Collection<\n TContract extends Contract<SqlStorage>,\n ModelName extends string,\n Row = SimplifyDeep<InferRootRow<TContract, ModelName>>,\n State extends CollectionTypeState = DefaultCollectionTypeState,\n> implements RowSelection<Row>\n{\n declare readonly [RowType]: Row;\n /** @internal */\n readonly ctx: CollectionContext<TContract>;\n /** @internal */\n private readonly contract: TContract;\n /** @internal */\n readonly modelName: ModelName;\n /** @internal */\n readonly tableName: string;\n /** @internal */\n readonly state: CollectionState;\n /** @internal */\n readonly registry: ReadonlyMap<string, CollectionConstructor<TContract>>;\n /** @internal */\n readonly includeRefinementMode: boolean;\n\n constructor(\n ctx: CollectionContext<TContract>,\n modelName: ModelName,\n options: CollectionInit<TContract> = {},\n ) {\n this.ctx = ctx;\n this.contract = ctx.context.contract;\n this.modelName = modelName;\n this.tableName = options.tableName ?? resolveModelTableName(this.contract, modelName);\n this.state = options.state ?? emptyState();\n this.registry = options.registry ?? new Map<string, CollectionConstructor<TContract>>();\n this.includeRefinementMode = options.includeRefinementMode ?? false;\n }\n\n /**\n * Narrow the collection with a `WHERE` predicate. Returns a new\n * collection — chain further builders or run a terminal on it.\n *\n * Accepts a callback receiving a typed model accessor, a raw\n * `WhereArg` expression, or a shorthand field/value object. Multiple\n * calls are AND-combined.\n *\n * ```typescript\n * // Callback form with column-level operators:\n * const matches = await db.orm.User.where((u) => u.email.eq('alice@example.com')).all();\n *\n * // Shorthand object form:\n * const user = await db.orm.User.where({ id: 1, active: true }).first();\n *\n * // Chained AND — still a builder, run a terminal to execute:\n * const adults = await db.orm.User.where({ active: true }).where((u) => u.age.gt(18)).all();\n * ```\n */\n where(\n fn: (model: ModelAccessor<TContract, ModelName>) => WhereDirectInput,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(input: WhereDirectInput): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n fn: (model: ModelAccessor<TContract, ModelName>) => WhereArg,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n filters: ShorthandWhereFilter<TContract, ModelName>,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>>;\n where(\n input:\n | WhereDirectInput\n | ((model: ModelAccessor<TContract, ModelName>) => WhereDirectInput)\n | ((model: ModelAccessor<TContract, ModelName>) => WhereArg)\n | ShorthandWhereFilter<TContract, ModelName>,\n ): Collection<TContract, ModelName, Row, WithWhereState<State>> {\n const whereArg =\n typeof input === 'function'\n ? input(createModelAccessor(this.ctx.context, this.modelName))\n : isWhereDirectInput(input)\n ? input\n : shorthandToWhereExpr(this.ctx.context, this.modelName, input);\n const filter = normalizeWhereArg(whereArg, { contract: this.contract });\n\n if (!filter) {\n return this as Collection<TContract, ModelName, Row, WithWhereState<State>>;\n }\n\n return this.#clone<WithWhereState<State>>({\n filters: [...this.state.filters, filter],\n });\n }\n\n /**\n * Narrow a polymorphic model to a specific variant. The returned\n * collection has the variant's row shape and a discriminator filter\n * is automatically applied. Chaining `.variant(...)` again replaces\n * the previous variant filter.\n *\n * ```typescript\n * // Read only admin users (STI):\n * const admins = await db.orm.User.variant('Admin').all();\n *\n * // Iterate the rows:\n * for await (const admin of db.orm.User.variant('Admin').all()) {\n * console.log(admin.role);\n * }\n *\n * // Insert under a variant — discriminator is injected automatically:\n * await db.orm.User.variant('Admin').create({ name: 'Ada', role: 'super' });\n * ```\n */\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n WithVariantState<WithWhereState<State>, V>\n > {\n type ReturnState = WithVariantState<WithWhereState<State>, V>;\n const model = this.contract.models[this.modelName] as Record<string, unknown> | undefined;\n const discriminator = model?.['discriminator'] as { field: string } | undefined;\n const variants = model?.['variants'] as Record<string, { value: string }> | undefined;\n\n if (!discriminator || !variants) {\n return this as unknown as Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n ReturnState\n >;\n }\n\n const variantEntry = variants[variantName];\n if (!variantEntry) {\n return this as unknown as Collection<\n TContract,\n ModelName,\n VariantModelRow<TContract, ModelName, V>,\n ReturnState\n >;\n }\n\n const columnName = resolveFieldToColumn(this.contract, this.modelName, discriminator.field);\n const filter = BinaryExpr.eq(\n ColumnRef.of(this.tableName, columnName),\n LiteralExpr.of(variantEntry.value),\n );\n\n const filtersWithoutPreviousVariant = this.state.variantName\n ? this.state.filters.filter(\n (f) =>\n !(\n f instanceof BinaryExpr &&\n f.left instanceof ColumnRef &&\n f.left.column === columnName &&\n f.left.table === this.tableName\n ),\n )\n : this.state.filters;\n\n return this.#cloneWithRow<VariantModelRow<TContract, ModelName, V>, ReturnState>({\n filters: [...filtersWithoutPreviousVariant, filter],\n variantName: variantName as string,\n });\n }\n\n /**\n * Eagerly load a related model. The relation appears on every\n * returned row under its declared name; to-one relations are mapped\n * to a single object (or `null`), to-many relations to an array.\n *\n * An optional refinement callback receives a child collection that\n * can be further constrained, projected, ordered, paginated, or\n * reduced to scalars via `count()`/`sum()`/etc. or to multiple\n * sub-aggregates via `combine()`.\n *\n * ```typescript\n * // Simple include — every user comes back with its posts array:\n * const users = await db.orm.User.include('posts').all();\n *\n * // Refine the related collection:\n * const withRecent = await db.orm.User.include('posts', (posts) =>\n * posts.where({ published: true }).orderBy((p) => p.createdAt.desc()).take(5),\n * ).all();\n *\n * // Reduce a to-many relation to a scalar value:\n * const withCounts = await db.orm.User.include('posts', (posts) => posts.count()).all();\n *\n * // Multiple sub-views via combine():\n * const overview = await db.orm.User.include('posts', (posts) =>\n * posts.combine({ recent: posts.take(3), total: posts.count() }),\n * ).all();\n * ```\n */\n include<\n RelName extends RelationNames<TContract, ModelName>,\n RelatedName extends RelatedModelName<TContract, ModelName, RelName> & string = RelatedModelName<\n TContract,\n ModelName,\n RelName\n > &\n string,\n IsToMany extends boolean = IsToManyRelation<TContract, ModelName, RelName>,\n RefinedResult extends IncludeRefinementResult<\n TContract,\n RelatedName,\n IsToMany\n > = IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n CollectionTypeState,\n IsToMany\n >,\n >(\n relationName: RelName,\n refineFn?: (\n collection: IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState,\n IsToMany\n >,\n ) => RefinedResult,\n ): Collection<\n TContract,\n ModelName,\n SimplifyDeep<\n Row & {\n [K in RelName]: IncludeRefinementValue<\n TContract,\n ModelName,\n K,\n DefaultModelRow<TContract, RelatedName>,\n RefinedResult\n >;\n }\n >,\n State\n > {\n const relation = resolveIncludeRelation(this.contract, this.modelName, relationName as string);\n\n let nestedState = emptyState();\n let scalarSelector: IncludeScalar<unknown> | undefined;\n let combineBranches: Readonly<Record<string, IncludeCombineBranch>> | undefined;\n\n if (refineFn) {\n const nestedCollection = this.#createCollection<\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState\n >(relation.relatedModelName as RelatedName, {\n tableName: relation.relatedTableName,\n state: emptyState(),\n includeRefinementMode: true,\n });\n const refined = refineFn(\n nestedCollection as unknown as IncludeRefinementCollection<\n TContract,\n RelatedName,\n DefaultModelRow<TContract, RelatedName>,\n DefaultCollectionTypeState,\n IsToMany\n >,\n );\n\n if (isIncludeScalar(refined)) {\n if (isToOneCardinality(relation.cardinality)) {\n throw new Error(\n `include('${relationName as string}') scalar aggregations are only supported for to-many relations`,\n );\n }\n scalarSelector = refined;\n nestedState = refined.state;\n } else if (isIncludeCombine(refined)) {\n if (isToOneCardinality(relation.cardinality)) {\n throw new Error(\n `include('${relationName as string}') combine() is only supported for to-many relations`,\n );\n }\n combineBranches = refined.branches;\n } else if (isCollectionStateCarrier(refined)) {\n nestedState = refined.state;\n } else {\n throw new Error(\n `include('${relationName as string}') refinement must return a collection, include scalar selector, or combine() descriptor`,\n );\n }\n }\n\n const includeExpr: IncludeExpr = {\n relationName: relationName as string,\n relatedModelName: relation.relatedModelName,\n relatedTableName: relation.relatedTableName,\n targetColumn: relation.targetColumn,\n localColumn: relation.localColumn,\n cardinality: relation.cardinality,\n nested: nestedState,\n scalar: scalarSelector,\n combine: combineBranches,\n };\n\n return this.#cloneWithRow<\n SimplifyDeep<\n Row & {\n [K in RelName]: IncludeRefinementValue<\n TContract,\n ModelName,\n K,\n DefaultModelRow<TContract, RelatedName>,\n RefinedResult\n >;\n }\n >,\n State\n >({\n includes: [...this.state.includes, includeExpr],\n });\n }\n\n /**\n * Project the row down to a subset of scalar fields. Previously\n * included relations are preserved on the resulting row shape; only\n * scalar columns are narrowed.\n *\n * ```typescript\n * const summaries = await db.orm.User.select('id', 'email').all();\n * // typeof summaries[number] === { id: ...; email: ... }\n *\n * for await (const row of db.orm.User.select('id', 'email').all()) {\n * console.log(row.id, row.email);\n * }\n * ```\n */\n select<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(\n ...fields: Fields\n ): Collection<\n TContract,\n ModelName,\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, Fields[number]> &\n IncludedRelationsForRow<TContract, ModelName, Row>\n >,\n State\n > {\n const selectedFields = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return this.#cloneWithRow<\n SimplifyDeep<\n Pick<DefaultModelRow<TContract, ModelName>, Fields[number]> &\n IncludedRelationsForRow<TContract, ModelName, Row>\n >,\n State\n >({\n selectedFields,\n });\n }\n\n /**\n * Append an `ORDER BY` clause. Pass a single selector callback or an\n * array of callbacks; each receives a typed model accessor whose\n * columns expose `.asc()` and `.desc()`. Multiple calls append to the\n * existing list (left-to-right ordering preserved).\n *\n * Calling `orderBy(...)` unlocks `cursor(...)` and `distinctOn(...)`,\n * which both require a defined sort order.\n *\n * ```typescript\n * const newest = await db.orm.User.orderBy((u) => u.createdAt.desc()).all();\n *\n * const byName = await db.orm.User\n * .orderBy([(u) => u.lastName.asc(), (u) => u.firstName.asc()])\n * .all();\n * ```\n */\n orderBy(\n selection:\n | ((model: ModelAccessor<TContract, ModelName>) => OrderByItem)\n | ReadonlyArray<(model: ModelAccessor<TContract, ModelName>) => OrderByItem>,\n ): Collection<TContract, ModelName, Row, WithOrderByState<State>> {\n const accessor = createModelAccessor(this.ctx.context, this.modelName);\n const selectors = Array.isArray(selection) ? selection : [selection];\n const nextOrders = selectors.map((selector) =>\n selector(accessor as ModelAccessor<TContract, ModelName>),\n );\n const existing = this.state.orderBy ?? [];\n return this.#clone<WithOrderByState<State>>({\n orderBy: [...existing, ...nextOrders],\n });\n }\n\n /**\n * Switch to grouped-aggregate mode. Returns a `GroupedCollection`\n * whose `.aggregate(...)` terminal produces one row per group with\n * the chosen key columns plus the requested aggregates.\n *\n * ```typescript\n * const stats = await db.orm.Post\n * .where({ published: true })\n * .groupBy('userId')\n * .aggregate((agg) => ({ count: agg.count(), totalViews: agg.sum('views') }));\n * // [{ userId: 1, count: 3, totalViews: 120 }, ...]\n * ```\n */\n groupBy<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(...fields: Fields): GroupedCollection<TContract, ModelName, Fields> {\n const groupByColumns = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return new GroupedCollection(this.ctx, this.modelName, {\n tableName: this.tableName,\n baseFilters: this.state.filters,\n groupByFields: [...fields],\n groupByColumns,\n havingFilters: [],\n });\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the number of\n * related rows. Use inside an `include(...)` refinement callback as\n * `include(..., (rel) => rel.count())`; throws if called elsewhere.\n * The parent row's relation field becomes that count instead of an\n * array.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.count()).all();\n * // each user row: { ...user, posts: number }\n * ```\n */\n count(): IncludeScalar<number> {\n this.#assertIncludeRefinementMode('count()');\n return createIncludeScalar<number>('count', this.state);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the sum of `field`\n * across related rows. Returns `null` when there are no related\n * rows. Use inside an `include(...)` refinement callback; throws if\n * called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.sum('views')).all();\n * // each user row: { ...user, posts: number | null }\n * ```\n */\n sum<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('sum()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('sum', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the average of\n * `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.avg('views')).all();\n * // each user row: { ...user, posts: number | null }\n * ```\n */\n avg<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('avg()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('avg', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the minimum value\n * of `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.min('views')).all();\n * ```\n */\n min<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('min()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('min', this.state, columnName);\n }\n\n /**\n * Scalar reducer — reduces a to-many relation to the maximum value\n * of `field` across related rows. Returns `null` when there are no\n * related rows. Use inside an `include(...)` refinement callback;\n * throws if called elsewhere.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) => posts.max('views')).all();\n * ```\n */\n max<FieldName extends NumericFieldNames<TContract, ModelName>>(\n field: FieldName,\n ): IncludeScalar<number | null> {\n this.#assertIncludeRefinementMode('max()');\n const columnName = resolveFieldToColumn(this.contract, this.modelName, field as string);\n return createIncludeScalar<number | null>('max', this.state, columnName);\n }\n\n /**\n * Produce multiple named sub-views of a to-many relation in a\n * single `include(...)`. Each branch is either another refined\n * collection (mapped to a row array on the parent) or a scalar\n * reducer such as `count()`/`sum(...)`. Only valid inside an\n * `include(...)` refinement callback for to-many relations.\n *\n * ```typescript\n * const users = await db.orm.User.include('posts', (posts) =>\n * posts.combine({\n * recent: posts.where({ published: true }).take(3),\n * total: posts.count(),\n * averageViews: posts.avg('views'),\n * }),\n * ).all();\n * // each user row: {\n * // ...user,\n * // posts: { recent: Post[]; total: number; averageViews: number | null };\n * // }\n * ```\n */\n combine<\n Spec extends Record<\n string,\n Collection<TContract, ModelName, unknown, CollectionTypeState> | IncludeScalar<unknown>\n >,\n >(\n spec: Spec,\n ): IncludeCombine<{\n [K in keyof Spec]: Spec[K] extends IncludeScalar<infer ScalarResult>\n ? ScalarResult\n : Spec[K] extends Collection<TContract, ModelName, infer BranchRow, CollectionTypeState>\n ? BranchRow[]\n : never;\n }> {\n this.#assertIncludeRefinementMode('combine()');\n\n const branches: Record<string, IncludeCombineBranch> = {};\n for (const [name, value] of Object.entries(spec)) {\n if (isIncludeScalar(value)) {\n branches[name] = {\n kind: 'scalar',\n selector: value,\n };\n continue;\n }\n\n if (isCollectionStateCarrier(value)) {\n branches[name] = {\n kind: 'rows',\n state: value.state,\n };\n continue;\n }\n\n throw new Error(`include().combine() branch \"${name}\" is invalid`);\n }\n\n return createIncludeCombine(branches) as IncludeCombine<{\n [K in keyof Spec]: Spec[K] extends IncludeScalar<infer ScalarResult>\n ? ScalarResult\n : Spec[K] extends Collection<TContract, ModelName, infer BranchRow, CollectionTypeState>\n ? BranchRow[]\n : never;\n }>;\n }\n\n /**\n * Resume pagination from a known cursor position. Requires a prior\n * `orderBy(...)` so the cursor has a stable basis; provide a value\n * for every column referenced by the active `orderBy(...)` so each\n * ordered axis has a defined boundary.\n *\n * ```typescript\n * const page1 = await db.orm.Post\n * .orderBy((p) => p.createdAt.desc())\n * .take(20)\n * .all();\n *\n * const last = page1[page1.length - 1]!;\n * const page2 = await db.orm.Post\n * .orderBy((p) => p.createdAt.desc())\n * .cursor({ createdAt: last.createdAt })\n * .take(20)\n * .all();\n * ```\n */\n cursor(\n cursorValues: State['hasOrderBy'] extends true\n ? Partial<Record<keyof DefaultModelRow<TContract, ModelName> & string, unknown>>\n : never,\n ): Collection<TContract, ModelName, Row, State> {\n const mappedCursor = mapCursorValuesToColumns(\n this.contract,\n this.modelName,\n cursorValues as Readonly<Record<string, unknown>>,\n );\n\n if (Object.keys(mappedCursor).length === 0) {\n return this;\n }\n\n return this.#clone({\n cursor: mappedCursor,\n });\n }\n\n /**\n * Emit `SELECT DISTINCT` keyed on the given fields. Replaces any\n * previous `distinct(...)` / `distinctOn(...)` selection.\n *\n * ```typescript\n * const groups = await db.orm.User.distinct('country', 'role').all();\n * ```\n */\n distinct<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(...fields: Fields): Collection<TContract, ModelName, Row, State> {\n const distinctFields = mapFieldsToColumns(this.contract, this.modelName, fields);\n\n return this.#clone({\n distinct: distinctFields,\n distinctOn: undefined,\n });\n }\n\n /**\n * Emit `SELECT DISTINCT ON (fields)` — keep the first row per\n * distinct key according to the current `orderBy(...)`. Requires a\n * prior `orderBy(...)`; replaces any previous `distinct(...)` /\n * `distinctOn(...)` selection.\n *\n * ```typescript\n * // Latest post per user:\n * const latestPerUser = await db.orm.Post\n * .orderBy([(p) => p.userId.asc(), (p) => p.createdAt.desc()])\n * .distinctOn('userId')\n * .all();\n * ```\n */\n distinctOn<\n Fields extends readonly [\n keyof DefaultModelRow<TContract, ModelName> & string,\n ...(keyof DefaultModelRow<TContract, ModelName> & string)[],\n ],\n >(\n ...fields: State['hasOrderBy'] extends true ? Fields : never\n ): Collection<TContract, ModelName, Row, State> {\n const distinctOnFields = mapFieldsToColumns(\n this.contract,\n this.modelName,\n fields as readonly string[],\n );\n\n return this.#clone({\n distinct: undefined,\n distinctOn: distinctOnFields,\n });\n }\n\n /**\n * Apply `LIMIT n`. Replaces any previous limit set on this collection.\n *\n * ```typescript\n * const firstTen = await db.orm.User.orderBy((u) => u.id.asc()).take(10).all();\n * ```\n */\n take(n: number): Collection<TContract, ModelName, Row, State> {\n return this.#clone({ limit: n });\n }\n\n /**\n * Apply `OFFSET n`. Replaces any previous offset set on this collection.\n *\n * ```typescript\n * const page2 = await db.orm.User\n * .orderBy((u) => u.id.asc())\n * .skip(10)\n * .take(10)\n * .all();\n * ```\n */\n skip(n: number): Collection<TContract, ModelName, Row, State> {\n return this.#clone({ offset: n });\n }\n\n /**\n * Read terminal: execute the query and stream every matching row.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` (so `await` collects all rows into an array)\n * AND an async iterable (so `for await` streams rows as they\n * arrive, without buffering the whole result set in memory). Pick\n * whichever fits the caller. A single result can only be consumed\n * once.\n *\n * Streaming is the default and the expected execution model. The\n * only scenarios that fall back to buffering internally before\n * yielding are drivers that cannot expose a cursor to the\n * underlying database, and — for queries with `include(...)` —\n * targets whose SQL dialect supports neither lateral joins nor\n * correlated subqueries (so child rows cannot be stitched in a\n * single streaming query). These are implementation details below\n * the public API; the iteration shape itself is genuinely\n * streaming whenever the driver and plan allow it.\n *\n * ```typescript\n * // Thenable — collect to an array:\n * const users = await db.orm.User.all();\n * for (const user of users) console.log(user.id);\n *\n * // Async iterable — stream rows as they arrive:\n * for await (const user of db.orm.User.all()) {\n * console.log(user.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` so the caller can attach typed user\n * annotations to the executed plan. `meta.annotate(...)` enforces\n * applicability at the type level and at runtime; annotations are\n * merged into `plan.meta.annotations` at compile time.\n *\n * ```typescript\n * await db.orm.User.all((meta) => meta.annotate(cacheAnnotation({ ttl: 60 })));\n * ```\n */\n all(configure?: (meta: MetaBuilder<'read'>) => void): AsyncIterableResult<Row> {\n return this.#withAnnotationsFromMeta(configure, 'all').#dispatch();\n }\n\n /**\n * Read terminal: return the first matching row, or `null` if none\n * match. Optionally accepts a filter (callback or shorthand object)\n * followed by a `configure` callback for typed read annotations.\n *\n * To attach annotations without further narrowing, pass `undefined`\n * as the filter (or chain `.where(...)` first):\n *\n * ```typescript\n * // No filter — first row in the collection:\n * const someone = await db.orm.User.first();\n *\n * // Shorthand filter:\n * const alice = await db.orm.User.first({ email: 'alice@example.com' });\n *\n * // Callback filter:\n * const old = await db.orm.User.first((u) => u.age.gt(60));\n *\n * // Annotate without filtering further:\n * await db.orm.User.first(undefined, (meta) =>\n * meta.annotate(cacheAnnotation({ ttl: 60 })),\n * );\n * ```\n */\n async first(): Promise<Row | null>;\n async first(\n filter: undefined,\n configure: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter: (model: ModelAccessor<TContract, ModelName>) => WhereArg,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter: ShorthandWhereFilter<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null>;\n async first(\n filter?:\n | ((model: ModelAccessor<TContract, ModelName>) => WhereArg)\n | ShorthandWhereFilter<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<Row | null> {\n const scoped =\n filter === undefined\n ? this\n : typeof filter === 'function'\n ? this.where(filter)\n : this.where(filter);\n const limited = scoped.take(1).#withAnnotationsFromMeta(configure, 'first');\n const rows = await limited.#dispatch().toArray();\n return rows[0] ?? null;\n }\n\n /**\n * Read terminal: run an aggregate query (count, sum, avg, min, max)\n * built via the `AggregateBuilder` callback. Returns one object\n * with the requested aggregate values keyed by the aliases supplied\n * in the spec.\n *\n * ```typescript\n * const stats = await db.orm.Post\n * .where({ published: true })\n * .aggregate((agg) => ({\n * total: agg.count(),\n * averageViews: agg.avg('views'),\n * maxViews: agg.max('views'),\n * }));\n * // { total: 42, averageViews: 17.3, maxViews: 9001 }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'read'>` for attaching typed annotations.\n * Annotations are merged into the compiled plan's `meta.annotations`.\n */\n async aggregate<Spec extends AggregateSpec>(\n fn: (aggregate: AggregateBuilder<TContract, ModelName>) => Spec,\n configure?: (meta: MetaBuilder<'read'>) => void,\n ): Promise<AggregateResult<Spec>> {\n const aggregateSpec = fn(createAggregateBuilder(this.contract, this.modelName));\n const entries = Object.entries(aggregateSpec);\n if (entries.length === 0) {\n throw new Error('aggregate() requires at least one aggregation selector');\n }\n\n for (const [alias, selector] of entries) {\n if (!isAggregateSelector(selector)) {\n throw new Error(`aggregate() selector \"${alias}\" is invalid`);\n }\n }\n\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'read', 'aggregate');\n\n const compiled = mergeAnnotations(\n compileAggregate(this.contract, this.tableName, this.state.filters, aggregateSpec),\n annotationsMap,\n );\n const rows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n compiled,\n ).toArray();\n return normalizeAggregateResult(aggregateSpec, rows[0] ?? {});\n }\n\n /**\n * Write terminal: insert one row and return it (with any configured\n * `select(...)` / `include(...)` projections applied to the returned\n * shape).\n *\n * Related rows can be created or linked through relation callbacks\n * on parent/child-owned relations (one-to-one or one-to-many).\n * The callback receives a mutator exposing `create(...)` and\n * `connect(...)`; `disconnect(...)` is only supported in nested\n * `update(...)` mutations. Many-to-many relations are not yet\n * supported as nested-mutation targets.\n *\n * ```typescript\n * // Simple insert:\n * const user = await db.orm.User.create({\n * email: 'alice@example.com',\n * name: 'Alice',\n * });\n *\n * // Nested create on a child-owned to-many relation:\n * const author = await db.orm.User.create({\n * email: 'bob@example.com',\n * posts: (posts) => posts.create([\n * { title: 'Hello' },\n * { title: 'World' },\n * ]),\n * });\n *\n * // Connect a child-owned post to an existing parent author:\n * const reply = await db.orm.Post.create({\n * title: 'Re: Hello',\n * author: (author) => author.connect({ id: 1 }),\n * });\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n * Annotations are merged into the compiled mutation plan's\n * `meta.annotations`.\n *\n * Note: when the input contains nested-mutation callbacks, the\n * operation is executed as a graph of internal queries via\n * `withMutationScope`. In that path, annotations apply to the\n * logical `create()` call but do not currently flow into each\n * constituent SQL statement issued for the related rows.\n */\n async create(\n data: ResolvedCreateInput<TContract, ModelName, State['variantName']>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row>;\n async create(\n data: MutationCreateInputWithRelations<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row>;\n async create(\n data:\n | ResolvedCreateInput<TContract, ModelName, State['variantName']>\n | MutationCreateInputWithRelations<TContract, ModelName>,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row> {\n assertReturningCapability(this.contract, 'create()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'create');\n\n if (\n hasNestedMutationCallbacks(this.contract, this.modelName, data as Record<string, unknown>)\n ) {\n const createdRow = await executeNestedCreateMutation({\n context: this.ctx.context,\n runtime: this.ctx.runtime,\n modelName: this.modelName,\n data: data as MutationCreateInput<Contract<SqlStorage>, string>,\n });\n\n const pkCriterion = buildPrimaryKeyFilterFromRow(this.contract, this.modelName, createdRow);\n const reloaded = await this.#reloadMutationRowByPrimaryKey(pkCriterion);\n if (!reloaded) {\n throw new Error(`create() for model \"${this.modelName}\" did not return a row`);\n }\n return reloaded;\n }\n\n const rows = await this.#createAllWithAnnotations(\n [data as ResolvedCreateInput<TContract, ModelName, State['variantName']>],\n annotationsMap,\n );\n const created = rows[0];\n if (created) {\n return created;\n }\n\n throw new Error(`create() for model \"${this.modelName}\" did not return a row`);\n }\n\n /**\n * Write terminal: insert many rows and stream the inserted rows.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams inserted\n * rows as they arrive. Use whichever shape fits the caller — but\n * only consume it once. Streaming is the default; some\n * driver/plan combinations may still buffer internally before\n * yielding.\n *\n * ```typescript\n * // Thenable — collect all inserted rows into an array:\n * const created = await db.orm.User.createAll([\n * { email: 'a@example.com' },\n * { email: 'b@example.com' },\n * ]);\n *\n * // Async iterable — stream inserted rows as they arrive:\n * for await (const row of db.orm.User.createAll(seedUsers)) {\n * console.log('inserted', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations to the\n * compiled insert plan.\n */\n createAll(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return this.#createAllWithAnnotations(\n data,\n this.#collectAnnotationsFromMeta(configure, 'write', 'createAll'),\n );\n }\n\n #createAllWithAnnotations(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n if (data.length === 0) {\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {};\n return new AsyncIterableResult(generator());\n }\n\n assertReturningCapability(this.contract, 'createAll()');\n\n const rows = data as readonly Record<string, unknown>[];\n const mtiContext = this.#resolveMtiCreateContext();\n if (mtiContext) {\n return this.#executeMtiCreate(rows, mtiContext);\n }\n\n const mappedRows = this.#mapCreateRows(rows);\n applyCreateDefaults(this.ctx, this.tableName, mappedRows);\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForInsert, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n if (this.contract.capabilities?.['sql']?.['defaultInInsert'] !== true) {\n const plans = compileInsertReturningSplit(\n this.contract,\n this.tableName,\n mappedRows,\n selectedForInsert,\n ).map((plan) => mergeAnnotations(plan, annotationsMap));\n return dispatchSplitMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n plans,\n tableName: this.tableName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n const compiled = mergeAnnotations(\n compileInsertReturning(this.contract, this.tableName, mappedRows, selectedForInsert),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n #assertNotMtiVariant(method: string): void {\n const mtiCtx = this.#resolveMtiCreateContext();\n if (mtiCtx) {\n throw new Error(\n `${method} is not supported for MTI variant \"${this.state.variantName}\" on model \"${this.modelName}\". Use createAll() instead.`,\n );\n }\n }\n\n #resolveMtiCreateContext(): MtiCreateContext | null {\n const variantName = this.state.variantName;\n if (!variantName) return null;\n\n const polyInfo = resolvePolymorphismInfo(this.contract, this.modelName);\n if (!polyInfo) return null;\n\n const variant = polyInfo.variants.get(variantName);\n if (!variant || variant.strategy !== 'mti') return null;\n\n const baseFieldToColumn = getFieldToColumnMap(this.contract, this.modelName);\n const variantFieldToColumn = getFieldToColumnMap(this.contract, variant.modelName);\n const pkColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n\n return {\n polyInfo,\n variant: variant as typeof variant & { strategy: 'mti' },\n baseFieldToColumn,\n variantFieldToColumn,\n pkColumn,\n };\n }\n\n #executeMtiCreate(\n data: readonly Record<string, unknown>[],\n mtiCtx: MtiCreateContext,\n ): AsyncIterableResult<Row> {\n const { polyInfo, variant, baseFieldToColumn, variantFieldToColumn, pkColumn } = mtiCtx;\n const contract = this.contract;\n const collectionCtx = this.ctx;\n const runtime = collectionCtx.runtime;\n const tableName = this.tableName;\n const modelName = this.modelName;\n\n const baseFieldColumns = new Set(Object.values(baseFieldToColumn));\n const variantFieldColumns = new Set(Object.values(variantFieldToColumn));\n const mergedFieldToColumn = { ...baseFieldToColumn, ...variantFieldToColumn };\n\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {\n for (const row of data) {\n const allMapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row as Record<string, unknown>)) {\n if (value === undefined) continue;\n const columnName = mergedFieldToColumn[fieldName] ?? fieldName;\n allMapped[columnName] = value;\n }\n allMapped[polyInfo.discriminatorColumn] = variant.value;\n\n const baseRow: Record<string, unknown> = {};\n const variantRow: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(allMapped)) {\n if (baseFieldColumns.has(col) || col === polyInfo.discriminatorColumn) {\n baseRow[col] = val;\n }\n if (variantFieldColumns.has(col)) {\n variantRow[col] = val;\n }\n }\n\n const merged = await withMutationScope(runtime, async (scope) => {\n applyCreateDefaults(collectionCtx, tableName, [baseRow]);\n const baseCompiled = compileInsertReturning(contract, tableName, [baseRow], undefined);\n const baseResult = await executeQueryPlan<Record<string, unknown>>(\n scope,\n baseCompiled,\n ).toArray();\n const baseCreated = baseResult[0];\n if (!baseCreated) {\n throw new Error(`MTI base INSERT for model \"${modelName}\" did not return a row`);\n }\n\n const pkValue = baseCreated[pkColumn];\n variantRow[pkColumn] = pkValue;\n applyCreateDefaults(collectionCtx, variant.table, [variantRow]);\n const variantCompiled = compileInsertReturning(\n contract,\n variant.table,\n [variantRow],\n undefined,\n );\n const variantResult = await executeQueryPlan<Record<string, unknown>>(\n scope,\n variantCompiled,\n ).toArray();\n const variantCreated = variantResult[0];\n if (!variantCreated) {\n throw new Error(\n `MTI variant INSERT for model \"${modelName}\" into \"${variant.table}\" did not return a row`,\n );\n }\n\n const prefixedVariant: Record<string, unknown> = {};\n for (const [col, val] of Object.entries(variantCreated)) {\n if (col === pkColumn) continue;\n prefixedVariant[`${variant.table}__${col}`] = val;\n }\n\n return mapPolymorphicRow(\n contract,\n modelName,\n polyInfo,\n { ...baseCreated, ...prefixedVariant },\n variant.modelName,\n );\n });\n\n yield merged as Row;\n }\n };\n\n return new AsyncIterableResult(generator());\n }\n\n #mapCreateRows(data: readonly Record<string, unknown>[]): Record<string, unknown>[] {\n const variantName = this.state.variantName;\n if (!variantName) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const polyInfo = resolvePolymorphismInfo(this.contract, this.modelName);\n if (!polyInfo) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const variant = polyInfo.variants.get(variantName);\n if (!variant) {\n return data.map((row) => mapModelDataToStorageRow(this.contract, this.modelName, row));\n }\n\n const baseFieldToColumn = getFieldToColumnMap(this.contract, this.modelName);\n const variantFieldToColumn = getFieldToColumnMap(this.contract, variant.modelName);\n const mergedFieldToColumn = { ...baseFieldToColumn, ...variantFieldToColumn };\n\n return data.map((row) => {\n const mapped: Record<string, unknown> = {};\n for (const [fieldName, value] of Object.entries(row as Record<string, unknown>)) {\n if (value === undefined) continue;\n const columnName = mergedFieldToColumn[fieldName] ?? fieldName;\n mapped[columnName] = value;\n }\n mapped[polyInfo.discriminatorColumn] = variant.value;\n return mapped;\n });\n }\n\n /**\n * Write terminal: insert many rows without materializing the\n * inserted rows, returning the number of inserted records.\n *\n * Prefer `createAll(...)` when you need the returned rows; prefer\n * this when you only need to know how many rows were inserted (the\n * compiled plan skips `RETURNING`).\n *\n * ```typescript\n * const inserted = await db.orm.User.createCount([\n * { email: 'a@example.com' },\n * { email: 'b@example.com' },\n * ]);\n * // inserted === 2\n * ```\n *\n * Not supported on MTI variants — use `createAll(...)` instead.\n */\n async createCount(\n data: readonly ResolvedCreateInput<TContract, ModelName, State['variantName']>[],\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n if (data.length === 0) {\n return 0;\n }\n\n this.#assertNotMtiVariant('createCount()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'createCount');\n\n const rows = data as readonly Record<string, unknown>[];\n const mappedRows = this.#mapCreateRows(rows);\n applyCreateDefaults(this.ctx, this.tableName, mappedRows);\n\n if (this.contract.capabilities?.['sql']?.['defaultInInsert'] !== true) {\n const plans = compileInsertCountSplit(this.contract, this.tableName, mappedRows).map((plan) =>\n mergeAnnotations(plan, annotationsMap),\n );\n for (const plan of plans) {\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, plan).toArray();\n }\n return data.length;\n }\n\n const compiled = mergeAnnotations(\n compileInsertCount(this.contract, this.tableName, mappedRows),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n return data.length;\n }\n\n /**\n * Write terminal: insert a row, or update the existing row on\n * conflict. Returns the resulting row (the inserted one or the\n * updated/existing one).\n *\n * `conflictOn` selects which unique constraint drives the conflict\n * resolution — omit to use the model's primary key.\n *\n * ```typescript\n * // Insert-or-update on email uniqueness:\n * await db.orm.User.upsert({\n * create: { email: 'alice@example.com', name: 'Alice' },\n * update: { name: 'Alice (updated)' },\n * conflictOn: { email: 'alice@example.com' },\n * });\n *\n * // Conditional create — `update: {}` keeps the existing row\n * // unchanged. `conflictOn` must reference the constraint that\n * // makes the row \"already exist\"; omit only when the conflict is\n * // on the primary key. On conflict,\n * // `ON CONFLICT DO NOTHING RETURNING ...` may return zero rows,\n * // so a follow-up reload is issued to fetch and return the\n * // existing row.\n * await db.orm.User.upsert({\n * create: { email: 'alice@example.com', name: 'Alice' },\n * update: {},\n * conflictOn: { email: 'alice@example.com' },\n * });\n * ```\n *\n * Not supported on MTI variants.\n */\n async upsert(\n input: {\n create: ResolvedCreateInput<TContract, ModelName, State['variantName']>;\n update: Partial<DefaultModelRow<TContract, ModelName>>;\n conflictOn?: UniqueConstraintCriterion<TContract, ModelName>;\n },\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row> {\n assertReturningCapability(this.contract, 'upsert()');\n this.#assertNotMtiVariant('upsert()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'upsert');\n\n const mappedCreateRows = this.#mapCreateRows([input.create as Record<string, unknown>]);\n const createValues = mappedCreateRows[0] ?? {};\n applyCreateDefaults(this.ctx, this.tableName, [createValues]);\n const updateValues = mapModelDataToStorageRow(this.contract, this.modelName, input.update);\n const hasUpdateValues = Object.keys(updateValues).length > 0;\n if (hasUpdateValues) {\n applyUpdateDefaults(this.ctx, this.tableName, updateValues);\n }\n const conflictColumns = resolveUpsertConflictColumns(\n this.contract,\n this.modelName,\n input.conflictOn as Record<string, unknown> | undefined,\n );\n if (conflictColumns.length === 0) {\n throw new Error(`upsert() for model \"${this.modelName}\" requires conflict columns`);\n }\n\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForUpsert, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileUpsertReturning(\n this.contract,\n this.tableName,\n createValues,\n updateValues,\n conflictColumns,\n selectedForUpsert,\n ),\n annotationsMap,\n );\n const row = await executeMutationReturningSingleRow<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n onMissingRowMessage: `upsert() for model \"${this.modelName}\" did not return a row`,\n });\n if (row) {\n return row;\n }\n\n if (!hasUpdateValues) {\n const conflictCriterion = this.#buildUpsertConflictCriterion(createValues, conflictColumns);\n const existing = await this.#reloadMutationRowByCriterion(\n conflictCriterion,\n 'upsert conflict',\n );\n if (existing) {\n return existing;\n }\n }\n\n throw new Error(`upsert() for model \"${this.modelName}\" did not return a row`);\n }\n\n /**\n * Write terminal: update matching rows and return the first one (or\n * `null` when no row matched). Requires a prior `.where(...)` —\n * calling `update(...)` on an unfiltered collection is a type error.\n *\n * Related rows can be created or relinked through relation\n * callbacks on parent/child-owned relations (one-to-one or\n * one-to-many). The callback receives a mutator exposing\n * `create(...)`, `connect(...)`, and `disconnect(...)`. Nested\n * updates against existing related rows, and many-to-many relations\n * as nested-mutation targets, are not supported through this API.\n *\n * ```typescript\n * // Update one row by id:\n * const updated = await db.orm.User\n * .where({ id: 1 })\n * .update({ name: 'Alice Renamed' });\n *\n * // Update + relink — runs as a graph of internal mutations:\n * await db.orm.User\n * .where({ id: 1 })\n * .update({\n * name: 'Alice',\n * posts: (posts) => posts.connect([{ id: 5 }]),\n * });\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n *\n * Note: when the input contains nested-mutation callbacks, the\n * operation is executed as a graph of internal queries via\n * `withMutationScope`. In that path, annotations apply to the logical\n * `update()` call but do not currently flow into each constituent SQL\n * statement issued for the related rows.\n */\n async update(\n data: State['hasWhere'] extends true ? MutationUpdateInput<TContract, ModelName> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row | null> {\n assertReturningCapability(this.contract, 'update()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'update');\n\n if (\n hasNestedMutationCallbacks(this.contract, this.modelName, data as Record<string, unknown>)\n ) {\n const updatedRow = await executeNestedUpdateMutation({\n context: this.ctx.context,\n runtime: this.ctx.runtime,\n modelName: this.modelName,\n filters: this.state.filters,\n data: data as MutationUpdateInput<Contract<SqlStorage>, string>,\n });\n if (!updatedRow) {\n return null;\n }\n\n const pkCriterion = buildPrimaryKeyFilterFromRow(this.contract, this.modelName, updatedRow);\n return this.#reloadMutationRowByPrimaryKey(pkCriterion);\n }\n\n return withMutationScope(this.ctx.runtime, async (scope) => {\n const scoped = this.#withRuntime(scope);\n const identityWhere = await scoped.#findFirstMatchingRowIdentityWhere();\n if (!identityWhere) {\n return null;\n }\n const narrowed = scoped.#clone({ filters: [identityWhere] });\n const rows = await narrowed.#updateAllWithAnnotations(\n data as State['hasWhere'] extends true\n ? Partial<DefaultModelRow<TContract, ModelName>>\n : never,\n annotationsMap,\n );\n return rows[0] ?? null;\n });\n }\n\n /**\n * Write terminal: update every matching row and stream the updated\n * rows. Requires a prior `.where(...)` filter.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams updated\n * rows as they arrive. Use whichever fits; a result can only be\n * consumed once. Streaming is the default; some driver/plan\n * combinations may still buffer internally before yielding.\n *\n * ```typescript\n * // Thenable — collect updated rows into an array:\n * const updated = await db.orm.Post\n * .where({ published: false })\n * .updateAll({ published: true });\n *\n * // Async iterable — stream updated rows as they arrive:\n * for await (const row of db.orm.Post.where({ draft: true }).updateAll({ draft: false })) {\n * console.log('published', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n updateAll(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return this.#updateAllWithAnnotations(\n data,\n this.#collectAnnotationsFromMeta(configure, 'write', 'updateAll'),\n );\n }\n\n #updateAllWithAnnotations(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n assertReturningCapability(this.contract, 'updateAll()');\n\n const mappedData = mapModelDataToStorageRow(this.contract, this.modelName, data);\n if (Object.keys(mappedData).length === 0) {\n const generator = async function* (): AsyncGenerator<Row, void, unknown> {};\n return new AsyncIterableResult(generator());\n }\n\n applyUpdateDefaults(this.ctx, this.tableName, mappedData);\n\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForUpdate, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileUpdateReturning(\n this.contract,\n this.tableName,\n mappedData,\n this.state.filters,\n selectedForUpdate,\n ),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n /**\n * Write terminal: update every matching row without returning them,\n * resolving to the count of rows that were updated. Requires a prior\n * `.where(...)` filter.\n *\n * Prefer `updateAll(...)` when you need the updated rows; prefer\n * this when you only need the affected-row count.\n *\n * ```typescript\n * const count = await db.orm.Post\n * .where({ published: false })\n * .updateCount({ published: true });\n * ```\n */\n async updateCount(\n data: State['hasWhere'] extends true ? Partial<DefaultModelRow<TContract, ModelName>> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n const mappedData = mapModelDataToStorageRow(this.contract, this.modelName, data);\n if (Object.keys(mappedData).length === 0) {\n return 0;\n }\n\n applyUpdateDefaults(this.ctx, this.tableName, mappedData);\n\n // Annotations attach to the write, not the matching read.\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'updateCount');\n\n const primaryKeyColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n const countState: CollectionState = {\n ...emptyState(),\n filters: this.state.filters,\n selectedFields: [primaryKeyColumn],\n };\n const countCompiled = compileSelect(this.contract, this.tableName, countState);\n const matchingRows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n countCompiled,\n ).toArray();\n\n const compiled = mergeAnnotations(\n compileUpdateCount(this.contract, this.tableName, mappedData, this.state.filters),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n\n return matchingRows.length;\n }\n\n /**\n * Write terminal: delete matching rows and return the first deleted\n * row (or `null` when no row matched). Requires a prior `.where(...)`\n * — calling `delete()` on an unfiltered collection is a type error.\n *\n * ```typescript\n * const deleted = await db.orm.User.where({ id: 1 }).delete();\n * if (deleted) console.log('deleted', deleted.email);\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n async delete(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<Row | null> {\n assertReturningCapability(this.contract, 'delete()');\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'delete');\n return withMutationScope(this.ctx.runtime, async (scope) => {\n const scoped = this.#withRuntime(scope);\n const identityWhere = await scoped.#findFirstMatchingRowIdentityWhere();\n if (!identityWhere) {\n return null;\n }\n const narrowed = scoped.#clone({ filters: [identityWhere] });\n const rows = await narrowed.#executeDeleteReturning(annotationsMap).toArray();\n return rows[0] ?? null;\n });\n }\n\n /**\n * Write terminal: delete every matching row and stream the deleted\n * rows. Requires a prior `.where(...)` filter.\n *\n * The returned `AsyncIterableResult<Row>` is BOTH a thenable that\n * resolves to `Row[]` AND an async iterable that streams deleted\n * rows as they arrive. Use whichever fits; a result can only be\n * consumed once. Streaming is the default; some driver/plan\n * combinations may still buffer internally before yielding.\n *\n * ```typescript\n * // Thenable — collect the deleted rows into an array:\n * const deleted = await db.orm.Post.where({ archived: true }).deleteAll();\n *\n * // Async iterable — stream deleted rows as they arrive:\n * for await (const row of db.orm.Post.where({ archived: true }).deleteAll()) {\n * console.log('removed', row.id);\n * }\n * ```\n *\n * Accepts an optional `configure` callback that receives a\n * `MetaBuilder<'write'>` for attaching typed annotations.\n */\n deleteAll(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): AsyncIterableResult<Row> {\n return (this as Collection<TContract, ModelName, Row, State>).#deleteAllWithAnnotations(\n this.#collectAnnotationsFromMeta(configure, 'write', 'deleteAll'),\n );\n }\n\n #deleteAllWithAnnotations(\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n assertReturningCapability(this.contract, 'deleteAll()');\n return this.#executeDeleteReturning(annotationsMap);\n }\n\n #executeDeleteReturning(\n annotationsMap: ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined,\n ): AsyncIterableResult<Row> {\n const parentJoinColumns = this.state.includes.map((include) => include.localColumn);\n const { selectedForQuery: selectedForDelete, hiddenColumns } = augmentSelectionForJoinColumns(\n this.state.selectedFields,\n parentJoinColumns,\n );\n const compiled = mergeAnnotations(\n compileDeleteReturning(this.contract, this.tableName, this.state.filters, selectedForDelete),\n annotationsMap,\n );\n return dispatchMutationRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n compiled,\n modelName: this.modelName,\n includes: this.state.includes,\n hiddenColumns,\n mapRow: (mapped) => mapped as Row,\n });\n }\n\n /**\n * Write terminal: delete every matching row without returning them,\n * resolving to the count of rows that were deleted. Requires a prior\n * `.where(...)` filter.\n *\n * Prefer `deleteAll(...)` when you need the deleted rows; prefer\n * this when you only need the affected-row count.\n *\n * ```typescript\n * const removed = await db.orm.Post.where({ archived: true }).deleteCount();\n * ```\n */\n async deleteCount(\n this: State['hasWhere'] extends true ? Collection<TContract, ModelName, Row, State> : never,\n configure?: (meta: MetaBuilder<'write'>) => void,\n ): Promise<number> {\n // Annotations attach to the write, not the matching read.\n const annotationsMap = this.#collectAnnotationsFromMeta(configure, 'write', 'deleteCount');\n\n const primaryKeyColumn = resolvePrimaryKeyColumn(this.contract, this.tableName);\n const countState: CollectionState = {\n ...emptyState(),\n filters: this.state.filters,\n selectedFields: [primaryKeyColumn],\n };\n const countCompiled = compileSelect(this.contract, this.tableName, countState);\n const matchingRows = await executeQueryPlan<Record<string, unknown>>(\n this.ctx.runtime,\n countCompiled,\n ).toArray();\n\n const compiled = mergeAnnotations(\n compileDeleteCount(this.contract, this.tableName, this.state.filters),\n annotationsMap,\n );\n await executeQueryPlan<Record<string, unknown>>(this.ctx.runtime, compiled).toArray();\n\n return matchingRows.length;\n }\n\n #buildUpsertConflictCriterion(\n createValues: Record<string, unknown>,\n conflictColumns: readonly string[],\n ): Record<string, unknown> {\n const columnToField = getColumnToFieldMap(this.contract, this.modelName);\n const criterion: Record<string, unknown> = {};\n\n for (const columnName of conflictColumns) {\n if (!(columnName in createValues)) {\n throw new Error(\n `upsert() for model \"${this.modelName}\" requires create value for conflict column \"${columnName}\"`,\n );\n }\n\n const fieldName = columnToField[columnName] ?? columnName;\n criterion[fieldName] = createValues[columnName];\n }\n\n return criterion;\n }\n\n async #findFirstMatchingRowIdentityWhere(): Promise<AnyExpression | null> {\n const identityColumns = resolveRowIdentityColumns(this.contract, this.tableName);\n if (identityColumns.length === 0) {\n throw new Error(\n `update()/delete() on model \"${this.modelName}\" requires the table to have a primary key or unique constraint`,\n );\n }\n const firstRow = await this.#clone({\n selectedFields: [...identityColumns],\n includes: [],\n }).first();\n if (!firstRow) {\n return null;\n }\n const columnToField = getColumnToFieldMap(this.contract, this.modelName);\n const criterion: Record<string, unknown> = {};\n for (const column of identityColumns) {\n const fieldName = columnToField[column] ?? column;\n const value = (firstRow as Record<string, unknown>)[fieldName];\n if (value === undefined) {\n throw new Error(\n `Missing identity field \"${fieldName}\" while resolving single-row scope for model \"${this.modelName}\"`,\n );\n }\n criterion[fieldName] = value;\n }\n return (\n shorthandToWhereExpr(\n this.ctx.context,\n this.modelName,\n criterion as ShorthandWhereFilter<TContract, ModelName>,\n ) ?? null\n );\n }\n\n async #reloadMutationRowByPrimaryKey(criterion: Record<string, unknown>): Promise<Row | null> {\n return this.#reloadMutationRowByCriterion(criterion, 'primary key');\n }\n\n async #reloadMutationRowByCriterion(\n criterion: Record<string, unknown>,\n criterionLabel: string,\n ): Promise<Row | null> {\n const whereExpr = shorthandToWhereExpr(\n this.ctx.context,\n this.modelName,\n criterion as ShorthandWhereFilter<TContract, ModelName>,\n );\n if (!whereExpr) {\n throw new Error(\n `Failed to build ${criterionLabel} filter for mutation result on model \"${this.modelName}\"`,\n );\n }\n\n const resultState: CollectionState = {\n ...emptyState(),\n filters: [whereExpr],\n includes: this.state.includes,\n selectedFields: this.state.selectedFields,\n limit: 1,\n };\n\n const rows = await dispatchCollectionRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n state: resultState,\n tableName: this.tableName,\n modelName: this.modelName,\n });\n return rows[0] ?? null;\n }\n\n #assertIncludeRefinementMode(action: string): void {\n if (this.includeRefinementMode) {\n return;\n }\n\n throw new Error(`${action} is only available inside include() refinement callbacks`);\n }\n\n #clone<NextState extends CollectionTypeState = State>(\n overrides: Partial<CollectionState>,\n ): Collection<TContract, ModelName, Row, NextState> {\n return this.#createSelf<Row, NextState>({\n ...this.state,\n ...overrides,\n });\n }\n\n #withRuntime(runtime: RuntimeQueryable): Collection<TContract, ModelName, Row, State> {\n const Ctor = this.constructor as CollectionConstructor<TContract>;\n return new Ctor({ ...this.ctx, runtime }, this.modelName, {\n tableName: this.tableName,\n state: this.state,\n registry: this.registry,\n includeRefinementMode: this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelName, Row, State>;\n }\n\n #cloneWithRow<NextRow, NextState extends CollectionTypeState = State>(\n overrides: Partial<CollectionState>,\n ): Collection<TContract, ModelName, NextRow, NextState> {\n return this.#createSelf<NextRow, NextState>({\n ...this.state,\n ...overrides,\n });\n }\n\n #createSelf<NextRow, NextState extends CollectionTypeState>(\n state: CollectionState,\n ): Collection<TContract, ModelName, NextRow, NextState> {\n const Ctor = this.constructor as CollectionConstructor<TContract>;\n return new Ctor(this.ctx, this.modelName, {\n tableName: this.tableName,\n state,\n registry: this.registry,\n includeRefinementMode: this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelName, NextRow, NextState>;\n }\n\n #createCollection<\n ModelNameInner extends string,\n RowInner,\n StateInner extends CollectionTypeState,\n >(\n modelName: ModelNameInner,\n options: CollectionInit<TContract>,\n ): Collection<TContract, ModelNameInner, RowInner, StateInner> {\n const Ctor =\n (this.registry.get(modelName) as CollectionConstructor<TContract> | undefined) ??\n (Collection as unknown as CollectionConstructor<TContract>);\n return new Ctor(this.ctx, modelName, {\n tableName: options.tableName,\n state: options.state,\n registry:\n options.registry ??\n (this.registry as ReadonlyMap<string, CollectionConstructor<TContract>>),\n includeRefinementMode: options.includeRefinementMode ?? this.includeRefinementMode,\n }) as unknown as Collection<TContract, ModelNameInner, RowInner, StateInner>;\n }\n\n #dispatch(): AsyncIterableResult<Row> {\n return dispatchCollectionRows<Row>({\n contract: this.contract,\n runtime: this.ctx.runtime,\n state: this.state,\n tableName: this.tableName,\n modelName: this.modelName,\n });\n }\n\n /**\n * Invokes the user-supplied configurator (if any) against a freshly\n * constructed read meta builder, and returns a clone whose\n * `state.annotations` carries the recorded map. Used by read\n * terminals that flow annotations through state (`all`, `first`).\n *\n * Returns the receiver unchanged when no configurator was supplied\n * or when the configurator did not call `meta.annotate(...)`. The\n * meta builder's `annotate` method enforces applicability at the\n * type level and at runtime, so terminal code does not need to\n * re-validate.\n */\n #withAnnotationsFromMeta(\n configure: ((meta: MetaBuilder<'read'>) => void) | undefined,\n terminalName: string,\n ): this {\n if (configure === undefined) {\n return this;\n }\n const meta = createMetaBuilder('read', terminalName);\n configure(meta);\n if (meta.annotations.size === 0) {\n return this;\n }\n const next = new Map(this.state.annotations);\n for (const [namespace, value] of meta.annotations) {\n next.set(namespace, value);\n }\n return this.#clone({ annotations: next }) as this;\n }\n\n /**\n * Invokes the user-supplied configurator (if any) against a freshly\n * constructed meta builder of the given operation kind, and returns\n * the recorded annotation map (or `undefined` when empty). Used by\n * terminals where annotations don't flow through `state` — the\n * compiled plan is post-wrapped via `mergeAnnotations` instead.\n * Read terminals `all` and `first` populate `state.annotations`\n * via `#withAnnotationsFromMeta` instead; `aggregate` uses this\n * post-wrap path because its compile function doesn't take `state`.\n * The meta builder's `annotate` method enforces applicability at the\n * type level and at runtime.\n */\n #collectAnnotationsFromMeta<K extends OperationKind>(\n configure: ((meta: MetaBuilder<K>) => void) | undefined,\n kind: K,\n terminalName: string,\n ): ReadonlyMap<string, AnnotationValue<unknown, OperationKind>> | undefined {\n if (configure === undefined) {\n return undefined;\n }\n const meta = createMetaBuilder(kind, terminalName);\n configure(meta);\n return meta.annotations.size === 0 ? undefined : meta.annotations;\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { Collection } from './collection';\nimport type {\n CollectionContext,\n CollectionModelName,\n CollectionTypeState,\n InferRootRow,\n RuntimeQueryable,\n} from './types';\n\nexport interface OrmOptions<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> {\n readonly runtime: RuntimeQueryable;\n readonly collections?: Collections;\n readonly context: ExecutionContext<TContract>;\n}\n\ntype ModelNames<TContract extends Contract<SqlStorage>> = CollectionModelName<TContract>;\n\ntype AnyCollectionClass = new (...args: never[]) => object;\n\ntype CustomCollectionForKey<\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n Key extends string,\n> = Key extends keyof Collections\n ? Collections[Key] extends AnyCollectionClass\n ? InstanceType<Collections[Key]>\n : never\n : never;\n\ntype ModelCollection<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n ModelName extends ModelNames<TContract>,\n> = [CustomCollectionForKey<Collections, ModelName>] extends [never]\n ? Collection<TContract, ModelName, InferRootRow<TContract, ModelName>>\n : CustomCollectionForKey<Collections, ModelName>;\n\ntype ModelCollectionMap<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> = {\n [K in ModelNames<TContract>]: ModelCollection<TContract, Collections, K>;\n};\n\ntype OrmClient<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n> = ModelCollectionMap<TContract, Collections>;\n\nexport function orm<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>> = Record<never, never>,\n>(options: OrmOptions<TContract, Collections>): OrmClient<TContract, Collections> {\n const { runtime, collections, context } = options;\n const contract = context.contract;\n const ctx: CollectionContext<TContract> = { runtime, context };\n const modelNames = new Set(Object.keys(contract.models));\n const collectionRegistry = createCollectionRegistry(contract, collections);\n const cache = new Map<\n ModelNames<TContract>,\n Collection<TContract, string, unknown, CollectionTypeState>\n >();\n\n return new Proxy({} as OrmClient<TContract, Collections>, {\n get(_target, prop: string | symbol): unknown {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n if (!modelNames.has(prop)) {\n throw new Error(\n `No model found for '${prop}'. Available models: ${[...modelNames].join(', ')}`,\n );\n }\n\n const modelName = prop as ModelNames<TContract>;\n\n const cached = cache.get(modelName);\n if (cached) {\n return cached;\n }\n\n const CollectionClass =\n collectionRegistry.get(modelName) ?? (Collection as unknown as AnyCollectionClass);\n const CollectionCtor = CollectionClass as unknown as new (\n ctx: CollectionContext<TContract>,\n modelName: string,\n options?: Record<string, unknown>,\n ) => Collection<TContract, string, unknown, CollectionTypeState>;\n const collection = new CollectionCtor(ctx, modelName, {\n registry: collectionRegistry,\n }) as ModelCollection<TContract, Collections, ModelNames<TContract>>;\n cache.set(\n modelName,\n collection as unknown as Collection<TContract, string, unknown, CollectionTypeState>,\n );\n return collection;\n },\n });\n}\n\nfunction createCollectionRegistry<\n TContract extends Contract<SqlStorage>,\n Collections extends Partial<Record<string, AnyCollectionClass>>,\n>(\n contract: TContract,\n collections: Collections | undefined,\n): Map<ModelNames<TContract>, AnyCollectionClass> {\n const registry = new Map<ModelNames<TContract>, AnyCollectionClass>();\n if (!collections) {\n return registry;\n }\n\n const models = contract.models;\n for (const [key, collectionClass] of Object.entries(collections)) {\n if (!collectionClass) {\n continue;\n }\n if (!isCollectionClass(collectionClass)) {\n throw new Error(\n `Custom collection '${key}' must be a Collection class (constructor), not an instance`,\n );\n }\n if (!Object.hasOwn(models, key)) {\n throw new Error(\n `No model found for custom collection '${key}'. Available models: ${Object.keys(models).join(', ')}`,\n );\n }\n registry.set(key as ModelNames<TContract>, collectionClass as AnyCollectionClass);\n }\n\n return registry;\n}\n\nfunction isCollectionClass(value: unknown): value is AnyCollectionClass {\n if (typeof value !== 'function') {\n return false;\n }\n const candidate = value as { prototype?: unknown };\n if (!candidate.prototype || typeof candidate.prototype !== 'object') {\n return false;\n }\n return candidate.prototype instanceof Collection;\n}\n"],"mappings":"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"}
|