@prisma-next/sql-orm-lane 0.0.1 → 0.1.0-dev.10

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.
@@ -2,6 +2,16 @@
2
2
  import { planInvalid as planInvalid5 } from "@prisma-next/plan";
3
3
  import { schema as schema4 } from "@prisma-next/sql-relational-core/schema";
4
4
 
5
+ // src/selection/predicates.ts
6
+ import { augmentDescriptorWithColumnMeta } from "@prisma-next/sql-relational-core/plan";
7
+ import {
8
+ getColumnInfo,
9
+ getColumnMeta,
10
+ getOperationExpr,
11
+ isColumnBuilder,
12
+ isParamPlaceholder
13
+ } from "@prisma-next/sql-relational-core/utils/guards";
14
+
5
15
  // src/utils/ast.ts
6
16
  import {
7
17
  createBinaryExpr,
@@ -90,10 +100,10 @@ function errorMissingAlias(index) {
90
100
  throw planInvalid(`Missing alias at index ${index}`);
91
101
  }
92
102
  function errorMissingColumn(alias, index) {
93
- throw planInvalid(`Missing column for alias ${alias} at index ${index}`);
103
+ throw planInvalid(`Missing column for alias "${alias}" at index ${index}`);
94
104
  }
95
105
  function errorInvalidColumn(alias, index) {
96
- throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);
106
+ throw planInvalid(`Invalid column for alias "${alias}" at index ${index}`);
97
107
  }
98
108
  function errorFailedToBuildWhereClause() {
99
109
  throw planInvalid("Failed to build WHERE clause");
@@ -112,35 +122,62 @@ function assertParameterExists(paramsMap, paramName) {
112
122
 
113
123
  // src/selection/predicates.ts
114
124
  function buildWhereExpr(where, contract, paramsMap, descriptors, values) {
115
- const placeholder = where.right;
116
- const paramName = placeholder.name;
117
- if (!Object.hasOwn(paramsMap, paramName)) {
118
- errorMissingParameter(paramName);
119
- }
120
- const value = paramsMap[paramName];
121
- const index = values.push(value);
122
125
  let leftExpr;
123
126
  let codecId;
124
- const operationExpr = where.left._operationExpr;
127
+ let rightExpr;
128
+ let paramName;
129
+ const operationExpr = getOperationExpr(where.left);
125
130
  if (operationExpr) {
126
131
  leftExpr = operationExpr;
132
+ } else if (isColumnBuilder(where.left)) {
133
+ const { table, column } = getColumnInfo(where.left);
134
+ const contractTable = contract.storage.tables[table];
135
+ if (!contractTable) {
136
+ errorUnknownTable(table);
137
+ }
138
+ const columnMeta = contractTable.columns[column];
139
+ if (columnMeta) {
140
+ codecId = columnMeta.codecId;
141
+ }
142
+ leftExpr = createColumnRef(table, column);
127
143
  } else {
128
- const colBuilder = where.left;
129
- const meta = colBuilder.columnMeta ?? {};
130
- descriptors.push({
131
- name: paramName,
132
- source: "dsl",
133
- refs: { table: colBuilder.table, column: colBuilder.column },
134
- ...typeof meta.type === "string" ? { type: meta.type } : {},
135
- ...typeof meta.nullable === "boolean" ? { nullable: meta.nullable } : {}
136
- });
137
- const contractTable = contract.storage.tables[colBuilder.table];
138
- const columnMeta = contractTable?.columns[colBuilder.column];
139
- codecId = columnMeta?.type;
140
- leftExpr = createColumnRef(colBuilder.table, colBuilder.column);
144
+ errorFailedToBuildWhereClause();
145
+ }
146
+ if (isParamPlaceholder(where.right)) {
147
+ const placeholder = where.right;
148
+ paramName = placeholder.name;
149
+ if (!Object.hasOwn(paramsMap, paramName)) {
150
+ errorMissingParameter(paramName);
151
+ }
152
+ const value = paramsMap[paramName];
153
+ const index = values.push(value);
154
+ if (isColumnBuilder(where.left)) {
155
+ const { table, column } = getColumnInfo(where.left);
156
+ const contractTable = contract.storage.tables[table];
157
+ const columnMeta = contractTable?.columns[column];
158
+ const builderColumnMeta = getColumnMeta(where.left);
159
+ descriptors.push({
160
+ name: paramName,
161
+ source: "dsl",
162
+ refs: { table, column },
163
+ ...typeof builderColumnMeta?.nullable === "boolean" ? { nullable: builderColumnMeta.nullable } : {}
164
+ });
165
+ augmentDescriptorWithColumnMeta(descriptors, columnMeta);
166
+ }
167
+ rightExpr = createParamRef(index, paramName);
168
+ } else if (isColumnBuilder(where.right)) {
169
+ const { table, column } = getColumnInfo(where.right);
170
+ const contractTable = contract.storage.tables[table];
171
+ if (!contractTable) {
172
+ errorUnknownTable(table);
173
+ }
174
+ rightExpr = createColumnRef(table, column);
175
+ paramName = "";
176
+ } else {
177
+ errorFailedToBuildWhereClause();
141
178
  }
142
179
  return {
143
- expr: createBinaryExpr("eq", leftExpr, createParamRef(index, paramName)),
180
+ expr: createBinaryExpr(where.op, leftExpr, rightExpr),
144
181
  ...codecId ? { codecId } : {},
145
182
  paramName
146
183
  };
@@ -216,7 +253,8 @@ function createParamDescriptor(args) {
216
253
  name: args.name,
217
254
  source: "dsl",
218
255
  refs: { table: args.table, column: args.column },
219
- ...args.type ? { type: args.type } : {},
256
+ ...args.codecId ? { codecId: args.codecId } : {},
257
+ ...args.nativeType ? { nativeType: args.nativeType } : {},
220
258
  nullable: args.nullable
221
259
  };
222
260
  }
@@ -273,8 +311,8 @@ function buildInsertPlan(context, modelName, data, options) {
273
311
  const paramName = placeholder.name;
274
312
  const value = assertParameterExists(paramsMap, paramName);
275
313
  const index = paramValues.push(value);
276
- const codecId = columnMeta.type;
277
- if (codecId && paramName) {
314
+ const codecId = columnMeta.codecId;
315
+ if (paramName) {
278
316
  paramCodecs[paramName] = codecId;
279
317
  }
280
318
  paramDescriptors.push(
@@ -282,7 +320,8 @@ function buildInsertPlan(context, modelName, data, options) {
282
320
  name: paramName,
283
321
  table: tableName,
284
322
  column: columnName,
285
- type: codecId,
323
+ codecId,
324
+ nativeType: columnMeta.nativeType,
286
325
  nullable: columnMeta.nullable
287
326
  })
288
327
  );
@@ -353,8 +392,8 @@ function buildUpdatePlan(context, modelName, where, getModelAccessor, data, opti
353
392
  const paramName = placeholder.name;
354
393
  const value = assertParameterExists(paramsMap, paramName);
355
394
  const index = paramValues.push(value);
356
- const codecId = columnMeta.type;
357
- if (codecId && paramName) {
395
+ const codecId = columnMeta.codecId;
396
+ if (paramName) {
358
397
  paramCodecs[paramName] = codecId;
359
398
  }
360
399
  paramDescriptors.push(
@@ -362,7 +401,8 @@ function buildUpdatePlan(context, modelName, where, getModelAccessor, data, opti
362
401
  name: paramName,
363
402
  table: tableName,
364
403
  column: columnName,
365
- type: codecId,
404
+ codecId,
405
+ nativeType: columnMeta.nativeType,
366
406
  nullable: columnMeta.nullable
367
407
  })
368
408
  );
@@ -584,43 +624,12 @@ var OrmRelationFilterBuilderImpl = class _OrmRelationFilterBuilderImpl {
584
624
  // src/plan/plan-assembly.ts
585
625
  import { planInvalid as planInvalid4 } from "@prisma-next/plan";
586
626
  import { compact } from "@prisma-next/sql-relational-core/ast";
587
-
588
- // src/utils/guards.ts
589
- function extractBaseColumnRef(expr) {
590
- if (expr.kind === "col") {
591
- return expr;
592
- }
593
- return extractBaseColumnRef(expr.self);
594
- }
595
- function collectColumnRefs(expr) {
596
- if (expr.kind === "col") {
597
- return [expr];
598
- }
599
- if (expr.kind === "operation") {
600
- const refs = collectColumnRefs(expr.self);
601
- for (const arg of expr.args) {
602
- refs.push(...collectColumnRefs(arg));
603
- }
604
- return refs;
605
- }
606
- return [];
607
- }
608
- function isOperationExpr(expr) {
609
- return typeof expr === "object" && expr !== null && "kind" in expr && expr.kind === "operation";
610
- }
611
- function getColumnInfo(expr) {
612
- if (isOperationExpr(expr)) {
613
- const baseCol = extractBaseColumnRef(expr);
614
- return { table: baseCol.table, column: baseCol.column };
615
- }
616
- const colBuilder = expr;
617
- return { table: colBuilder.table, column: colBuilder.column };
618
- }
619
- function isColumnBuilder(value) {
620
- return typeof value === "object" && value !== null && "kind" in value && value.kind === "column";
621
- }
622
-
623
- // src/plan/plan-assembly.ts
627
+ import {
628
+ collectColumnRefs,
629
+ getColumnInfo as getColumnInfo2,
630
+ getColumnMeta as getColumnMeta2,
631
+ isOperationExpr
632
+ } from "@prisma-next/sql-relational-core/utils/guards";
624
633
  function buildMeta(args) {
625
634
  const refsColumns = /* @__PURE__ */ new Map();
626
635
  const refsTables = /* @__PURE__ */ new Set([args.table.name]);
@@ -669,7 +678,7 @@ function buildMeta(args) {
669
678
  }
670
679
  }
671
680
  if (include.childWhere) {
672
- const colInfo = getColumnInfo(include.childWhere.left);
681
+ const colInfo = getColumnInfo2(include.childWhere.left);
673
682
  refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
674
683
  table: colInfo.table,
675
684
  column: colInfo.column
@@ -678,7 +687,7 @@ function buildMeta(args) {
678
687
  if (include.childOrderBy) {
679
688
  const orderBy = include.childOrderBy;
680
689
  if (orderBy.expr) {
681
- const colInfo = getColumnInfo(orderBy.expr);
690
+ const colInfo = getColumnInfo2(orderBy.expr);
682
691
  refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
683
692
  table: colInfo.table,
684
693
  column: colInfo.column
@@ -770,10 +779,10 @@ function buildMeta(args) {
770
779
  projectionTypes[alias] = operationExpr.returns.type;
771
780
  }
772
781
  } else {
773
- const colMeta = col;
774
- const columnMeta = colMeta.columnMeta;
775
- if (columnMeta?.type) {
776
- projectionTypes[alias] = columnMeta.type;
782
+ const columnMeta = getColumnMeta2(col);
783
+ const codecId = columnMeta?.codecId;
784
+ if (codecId) {
785
+ projectionTypes[alias] = codecId;
777
786
  }
778
787
  }
779
788
  }
@@ -793,10 +802,10 @@ function buildMeta(args) {
793
802
  projectionCodecs[alias] = operationExpr.returns.type;
794
803
  }
795
804
  } else {
796
- const col = column;
797
- const columnMeta = col.columnMeta;
798
- if (columnMeta?.type) {
799
- projectionCodecs[alias] = columnMeta.type;
805
+ const columnMeta = getColumnMeta2(column);
806
+ const codecId = columnMeta?.codecId;
807
+ if (codecId) {
808
+ projectionCodecs[alias] = codecId;
800
809
  }
801
810
  }
802
811
  }
@@ -848,13 +857,17 @@ function buildJoinOnExpr(parentTableName, parentColName, childTableName, childCo
848
857
  }
849
858
 
850
859
  // src/selection/ordering.ts
860
+ import {
861
+ extractBaseColumnRef,
862
+ isOperationExpr as isOperationExpr2
863
+ } from "@prisma-next/sql-relational-core/utils/guards";
851
864
  function buildOrderByClause(orderBy) {
852
865
  if (!orderBy) {
853
866
  return void 0;
854
867
  }
855
868
  const orderByBuilder = orderBy;
856
869
  const orderExpr = orderByBuilder.expr;
857
- const expr = isOperationExpr(orderExpr) ? orderExpr : (() => {
870
+ const expr = isOperationExpr2(orderExpr) ? orderExpr : (() => {
858
871
  const colBuilder = orderExpr;
859
872
  return createColumnRef(colBuilder.table, colBuilder.column);
860
873
  })();
@@ -867,7 +880,7 @@ function buildChildOrderByClause(orderBy) {
867
880
  const orderByBuilder = orderBy;
868
881
  const orderExpr = orderByBuilder.expr;
869
882
  const expr = (() => {
870
- if (isOperationExpr(orderExpr)) {
883
+ if (isOperationExpr2(orderExpr)) {
871
884
  const baseCol = extractBaseColumnRef(orderExpr);
872
885
  return createColumnRef(baseCol.table, baseCol.column);
873
886
  }
@@ -878,6 +891,7 @@ function buildChildOrderByClause(orderBy) {
878
891
  }
879
892
 
880
893
  // src/selection/projection.ts
894
+ import { isColumnBuilder as isColumnBuilder2 } from "@prisma-next/sql-relational-core/utils/guards";
881
895
  function generateAlias(path) {
882
896
  if (path.length === 0) {
883
897
  errorAliasPathEmpty();
@@ -909,7 +923,7 @@ function flattenProjection(projection, tracker, currentPath = []) {
909
923
  const columns = [];
910
924
  for (const [key, value] of Object.entries(projection)) {
911
925
  const path = [...currentPath, key];
912
- if (isColumnBuilder(value)) {
926
+ if (isColumnBuilder2(value)) {
913
927
  const alias = tracker.register(path);
914
928
  aliases.push(alias);
915
929
  columns.push(value);
@@ -938,9 +952,13 @@ function buildProjectionState(_table, projection, includes) {
938
952
  kind: "column",
939
953
  table: matchingInclude.table.name,
940
954
  column: "",
941
- columnMeta: { type: "core/json@1", nullable: true }
955
+ columnMeta: {
956
+ nativeType: "jsonb",
957
+ codecId: "core/json@1",
958
+ nullable: true
959
+ }
942
960
  });
943
- } else if (isColumnBuilder(value)) {
961
+ } else if (isColumnBuilder2(value)) {
944
962
  const alias = tracker.register([key]);
945
963
  aliases.push(alias);
946
964
  columns.push(value);
@@ -959,7 +977,17 @@ function buildProjectionState(_table, projection, includes) {
959
977
  }
960
978
 
961
979
  // src/relations/include-plan.ts
962
- function buildIncludeAsts(includes, contract, context, modelName, paramsMap, paramDescriptors, paramValues, paramCodecs) {
980
+ function buildIncludeAsts(input) {
981
+ const {
982
+ includes,
983
+ contract,
984
+ context,
985
+ modelName,
986
+ paramsMap,
987
+ paramDescriptors,
988
+ paramValues,
989
+ paramCodecs
990
+ } = input;
963
991
  const includesAst = [];
964
992
  const includesForMeta = [];
965
993
  for (const includeState of includes) {
@@ -1204,14 +1232,15 @@ function buildProjectionItems(projectionState, includesForMeta) {
1204
1232
  }
1205
1233
  return projectEntries;
1206
1234
  }
1207
- function buildSelectAst(table, projectEntries, includesAst, whereExpr, orderByClause, limit) {
1235
+ function buildSelectAst(params) {
1236
+ const { table, projectEntries, includesAst, whereExpr, orderByClause, limit } = params;
1208
1237
  return createSelectAst({
1209
1238
  from: createTableRef(table.name),
1210
1239
  project: projectEntries,
1211
- includes: includesAst,
1212
- where: whereExpr,
1213
- orderBy: orderByClause,
1214
- limit
1240
+ ...includesAst ? { includes: includesAst } : {},
1241
+ ...whereExpr ? { where: whereExpr } : {},
1242
+ ...orderByClause ? { orderBy: orderByClause } : {},
1243
+ ...limit !== void 0 ? { limit } : {}
1215
1244
  });
1216
1245
  }
1217
1246
 
@@ -1542,16 +1571,16 @@ var OrmModelBuilderImpl = class _OrmModelBuilderImpl {
1542
1571
  }
1543
1572
  return defaultProjection;
1544
1573
  })();
1545
- const { includesAst, includesForMeta } = buildIncludeAsts(
1546
- this.includes,
1547
- this.contract,
1548
- this.context,
1549
- this.modelName,
1574
+ const { includesAst, includesForMeta } = buildIncludeAsts({
1575
+ includes: this.includes,
1576
+ contract: this.contract,
1577
+ context: this.context,
1578
+ modelName: this.modelName,
1550
1579
  paramsMap,
1551
1580
  paramDescriptors,
1552
1581
  paramValues,
1553
1582
  paramCodecs
1554
- );
1583
+ });
1555
1584
  const projectionState = buildProjectionState(
1556
1585
  this.table,
1557
1586
  projectionInput,
@@ -1564,14 +1593,14 @@ var OrmModelBuilderImpl = class _OrmModelBuilderImpl {
1564
1593
  }
1565
1594
  const orderByClause = buildOrderByClause(this.orderByExpr);
1566
1595
  const projectEntries = buildProjectionItems(projectionState, includesForMeta);
1567
- const ast = buildSelectAst(
1568
- this.table,
1596
+ const ast = buildSelectAst({
1597
+ table: this.table,
1569
1598
  projectEntries,
1570
- includesAst.length > 0 ? includesAst : void 0,
1571
- whereExpr,
1572
- orderByClause,
1573
- this.limitValue
1574
- );
1599
+ ...includesAst.length > 0 ? { includesAst } : {},
1600
+ ...whereExpr ? { whereExpr } : {},
1601
+ ...orderByClause ? { orderByClause } : {},
1602
+ ...this.limitValue !== void 0 ? { limit: this.limitValue } : {}
1603
+ });
1575
1604
  const planMeta = buildMeta({
1576
1605
  contract: this.contract,
1577
1606
  table: createTableRef(this.table.name),
@@ -1704,4 +1733,4 @@ export {
1704
1733
  OrmModelBuilderImpl,
1705
1734
  orm
1706
1735
  };
1707
- //# sourceMappingURL=chunk-JOTSRS66.js.map
1736
+ //# sourceMappingURL=chunk-3DNKIXXB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orm/builder.ts","../src/selection/predicates.ts","../src/utils/ast.ts","../src/utils/errors.ts","../src/mutations/delete-builder.ts","../src/mutations/insert-builder.ts","../src/utils/param-descriptor.ts","../src/mutations/update-builder.ts","../src/orm-include-child.ts","../src/orm-relation-filter.ts","../src/plan/plan-assembly.ts","../src/relations/include-plan.ts","../src/orm/capabilities.ts","../src/selection/join.ts","../src/selection/ordering.ts","../src/selection/projection.ts","../src/selection/select-builder.ts","../src/orm/context.ts","../src/orm.ts"],"sourcesContent":["import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SelectAst, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { buildDeletePlan } from '../mutations/delete-builder';\nimport { buildInsertPlan } from '../mutations/insert-builder';\nimport { buildUpdatePlan } from '../mutations/update-builder';\nimport type { OrmIncludeChildBuilder } from '../orm-include-child';\nimport { OrmIncludeChildBuilderImpl } from '../orm-include-child';\nimport { OrmRelationFilterBuilderImpl } from '../orm-relation-filter';\nimport type {\n IncludeAccumulator,\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmIncludeAccessor,\n OrmModelBuilder,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from '../orm-types';\nimport { buildMeta, type MetaBuildArgs } from '../plan/plan-assembly';\nimport {\n buildExistsSubqueries,\n buildIncludeAsts,\n combineWhereClauses,\n} from '../relations/include-plan';\nimport { buildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { buildProjectionState, type ProjectionInput } from '../selection/projection';\nimport { buildProjectionItems, buildSelectAst } from '../selection/select-builder';\nimport { createTableRef } from '../utils/ast';\nimport { errorModelNotFound, errorTableNotFound, errorUnknownTable } from '../utils/errors';\nimport { createOrmContext } from './context';\nimport type { OrmIncludeState, RelationFilter } from './state';\n\nexport class OrmModelBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n ModelName extends string = string,\n Includes extends Record<string, unknown> = Record<string, never>,\n Row = unknown,\n> implements OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly modelName: ModelName;\n private table: TableRef;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private relationFilters: RelationFilter[] = [];\n private includes: OrmIncludeState[] = [];\n private orderByExpr: AnyOrderBuilder | undefined = undefined;\n private limitValue: number | undefined = undefined;\n private offsetValue: number | undefined = undefined;\n private projection: Record<string, AnyColumnBuilder | boolean | NestedProjection> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, modelName: ModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.modelName = modelName;\n\n const tableName = this.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n\n const schemaHandle = schema(options.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n this.table = table;\n }\n\n get where(): OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row> {\n const whereFn = (\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> => {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = fn(this._getModelAccessor());\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n };\n\n // Add related property using Proxy\n const related = this._createRelatedProxy();\n\n return Object.assign(whereFn, { related }) as OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >;\n }\n\n get include(): OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row> {\n return this._createIncludeProxy();\n }\n\n private _createIncludeProxy(): OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n > {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n\n return new Proxy({} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n\n const relationName = prop as keyof typeof modelRelations & string;\n\n const includeFn = (<ChildRow>(\n child: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName, ChildRow>,\n ) => {\n return self._applyInclude<typeof relationName, ChildRow>(\n relationName,\n childModelName,\n child,\n relationDef,\n );\n }) as OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >[typeof relationName];\n\n return includeFn;\n },\n });\n }\n\n private _applyInclude<RelationName extends string, ChildRow>(\n relationName: RelationName,\n childModelName: string,\n childBuilderFn: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, string, ChildRow>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n > {\n // Get child table\n const childTableName = this.contract.mappings.modelToTable?.[childModelName];\n if (!childTableName) {\n errorModelNotFound(childModelName);\n }\n const childTable: TableRef = { kind: 'table', name: childTableName };\n\n // Create child builder and apply callback\n const childBuilder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const builtChild = childBuilderFn(\n childBuilder as OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n );\n const childState = (\n builtChild as OrmIncludeChildBuilderImpl<TContract, CodecTypes, string, ChildRow>\n ).getState();\n\n // Store the include\n // Note: Child projection validation happens in findMany() when compiling to includeMany\n const includeState: OrmIncludeState = {\n relationName,\n childModelName,\n childTable,\n childWhere: childState.childWhere,\n childOrderBy: childState.childOrderBy,\n childLimit: childState.childLimit,\n childProjection: childState.childProjection,\n alias: relationName,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = [...this.includes, includeState];\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n private _createRelatedProxy(): OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >['related'] {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n\n return new Proxy(\n {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'],\n {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n const filterBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n // Expose model accessor directly on the builder for convenience\n const modelAccessor = filterBuilder.getModelAccessor();\n const builderWithAccessor = Object.assign(\n filterBuilder,\n modelAccessor,\n ) as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName> &\n ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>;\n\n return {\n some: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n // If result is a AnyBinaryBuilder, wrap it in a builder\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n none: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n every: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n };\n },\n },\n );\n }\n\n private _applyRelationFilter(\n relationName: string,\n childModelName: string,\n filterType: 'some' | 'none' | 'every',\n fn: (\n child: OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n ) => OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // Create a relation filter builder and apply the callback\n const filterBuilder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const appliedFilter = fn(\n filterBuilder as OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n );\n const childWhere = (\n appliedFilter as OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>\n ).getWherePredicate();\n\n // Store the relation filter\n const relationFilter: RelationFilter = {\n relationName,\n childModelName,\n filterType,\n childWhere,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = [...this.relationFilters, relationFilter];\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => OrderBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = fn(this._getModelAccessor());\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n take(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = n;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n skip(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // TODO: SQL lane doesn't support offset yet - this is a placeholder\n // When offset is added to SelectAst, implement it here\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = n;\n builder.projection = this.projection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => Projection,\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n > {\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = fn(this._getModelAccessor());\n return builder as OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >;\n }\n\n findMany(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[this.table.name];\n\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n // Build projection state\n const projectionInput: ProjectionInput =\n this.projection ??\n (() => {\n const modelAccessor = this._getModelAccessor();\n const defaultProjection: Record<string, AnyColumnBuilder> = {};\n for (const fieldName in modelAccessor) {\n defaultProjection[fieldName] = modelAccessor[fieldName];\n }\n return defaultProjection;\n })();\n\n // Build includes AST\n const { includesAst, includesForMeta } = buildIncludeAsts({\n includes: this.includes,\n contract: this.contract,\n context: this.context,\n modelName: this.modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n });\n\n // Build projection state\n const projectionState = buildProjectionState(\n this.table,\n projectionInput,\n includesForMeta.length > 0\n ? (includesForMeta as unknown as Parameters<typeof buildProjectionState>[2])\n : undefined,\n );\n\n // Build where clause\n const whereResult = this.wherePredicate\n ? buildWhereExpr(this.wherePredicate, this.contract, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n // Build orderBy clause\n const orderByClause = buildOrderByClause(this.orderByExpr);\n\n // Build main projection items\n const projectEntries = buildProjectionItems(projectionState, includesForMeta);\n\n // Build SELECT AST\n const ast = buildSelectAst({\n table: this.table,\n projectEntries,\n ...(includesAst.length > 0 ? { includesAst } : {}),\n ...(whereExpr ? { whereExpr } : {}),\n ...(orderByClause ? { orderByClause } : {}),\n ...(this.limitValue !== undefined ? { limit: this.limitValue } : {}),\n });\n\n // Build plan metadata\n const planMeta = buildMeta({\n contract: this.contract,\n table: createTableRef(this.table.name),\n projection: projectionState,\n includes: includesForMeta.length > 0 ? includesForMeta : undefined,\n paramDescriptors,\n paramCodecs: Object.keys(paramCodecs).length > 0 ? paramCodecs : undefined,\n where: this.wherePredicate as BinaryBuilder | undefined,\n orderBy: this.orderByExpr,\n } as MetaBuildArgs);\n\n // Compile relation filters to EXISTS subqueries and combine with main where clause\n if (this.relationFilters.length > 0) {\n const existsExprs = buildExistsSubqueries(\n this.relationFilters,\n this.contract,\n this.modelName,\n options,\n );\n if (existsExprs.length > 0) {\n const combinedWhere = combineWhereClauses(ast.where, existsExprs);\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n }\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n\n findFirst(options?: BuildOptions): SqlQueryPlan<Row> {\n const queryPlan = this.take(1).findMany(options);\n return queryPlan;\n }\n\n findUnique(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<Row> {\n return this.where(where).take(1).findMany(options);\n }\n\n create(data: Record<string, unknown>, options?: BuildOptions): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildInsertPlan(context, this.modelName, data, options);\n }\n\n update(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n data: Record<string, unknown>,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildUpdatePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n data,\n options,\n );\n }\n\n delete(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildDeletePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n options,\n );\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n errorModelNotFound(this.modelName);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.modelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ModelName>;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { augmentDescriptorWithColumnMeta } from '@prisma-next/sql-relational-core/plan';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnInfo,\n getColumnMeta,\n getOperationExpr,\n isColumnBuilder,\n isParamPlaceholder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createBinaryExpr, createColumnRef, createParamRef } from '../utils/ast';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownTable,\n} from '../utils/errors';\n\nexport function buildWhereExpr(\n where: BinaryBuilder,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): {\n expr: BinaryExpr;\n codecId?: string;\n paramName: string;\n} {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n const operationExpr = getOperationExpr(where.left);\n if (operationExpr) {\n leftExpr = operationExpr;\n } else if (isColumnBuilder(where.left)) {\n const { table, column } = getColumnInfo(where.left);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n // If column not found in contract, still build expression but without codecId\n // This allows flexibility when columnMeta is available on the column builder\n if (columnMeta) {\n codecId = columnMeta.codecId;\n }\n leftExpr = createColumnRef(table, column);\n } else {\n errorFailedToBuildWhereClause();\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyColumnBuilder\n if (isParamPlaceholder(where.right)) {\n // Handle param placeholder (existing logic)\n const placeholder: ParamPlaceholder = where.right;\n paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n // Construct descriptor if where.left is a ColumnBuilder\n if (isColumnBuilder(where.left)) {\n const { table, column } = getColumnInfo(where.left);\n const contractTable = contract.storage.tables[table];\n const columnMeta = contractTable?.columns[column];\n const builderColumnMeta = getColumnMeta(where.left);\n\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n ...(typeof builderColumnMeta?.nullable === 'boolean'\n ? { nullable: builderColumnMeta.nullable }\n : {}),\n });\n\n augmentDescriptorWithColumnMeta(descriptors, columnMeta);\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n // If column not found in contract, still build expression\n // This allows flexibility when columnMeta is available on the column builder\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n ...(codecId ? { codecId } : {}),\n paramName,\n };\n}\n","export {\n createBinaryExpr,\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createJoinOnExpr,\n createOrderByItem,\n createParamRef,\n createSelectAst,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\n","import { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\n\nexport function errorModelNotFound(modelName: string): never {\n throw planInvalid(`Model ${modelName} not found in mappings`);\n}\n\nexport function errorTableNotFound(tableName: string): never {\n throw planInvalid(`Table ${tableName} not found in schema`);\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorCreateRequiresFields(): never {\n throw planInvalid('create() requires at least one field');\n}\n\nexport function errorUpdateRequiresFields(): never {\n throw planInvalid('update() requires at least one field');\n}\n\nexport function errorIncludeRequiresCapabilities(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities');\n}\n\nexport function errorIncludeCapabilitiesNotTrue(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities to be true');\n}\n\nexport function errorMultiColumnJoinsNotSupported(): never {\n throw planInvalid('Multi-column joins in includes are not yet supported');\n}\n\nexport function errorJoinColumnsMustBeDefined(): never {\n throw planInvalid('Join columns must be defined');\n}\n\nexport function errorColumnNotFound(columnName: string, tableName: string): never {\n throw planInvalid(`Column ${columnName} not found in table ${tableName}`);\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty after filtering boolean values');\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorMissingColumn(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorInvalidColumn(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorRelationNotFound(relationName: string, modelName: string): never {\n throw planInvalid(`Relation ${relationName} not found on model ${modelName}`);\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function assertColumnExists(\n columnMeta: StorageColumn | undefined,\n columnName: string,\n tableName: string,\n): asserts columnMeta is StorageColumn {\n if (!columnMeta) {\n errorUnknownColumn(columnName, tableName);\n }\n}\n\nexport function assertParameterExists(\n paramsMap: Record<string, unknown>,\n paramName: string,\n): unknown {\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n return paramsMap[paramName];\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createDeleteAst, createTableRef } from '../utils/ast';\nimport { errorFailedToBuildWhereClause, errorModelNotFound } from '../utils/errors';\n\nexport function buildDeletePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createDeleteAst({\n table,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { param } from '@prisma-next/sql-relational-core/param';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { BuildOptions, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport { createInsertAst, createParamRef, createTableRef } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorCreateRequiresFields,\n errorModelNotFound,\n errorUnknownTable,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\n\nexport function convertModelFieldsToColumns<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n modelName: string,\n fields: Record<string, unknown>,\n): Record<string, ParamPlaceholder> {\n const model = contract.models[modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw new Error(`Model ${modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n const result: Record<string, ParamPlaceholder> = {};\n\n for (const fieldName in fields) {\n if (!Object.hasOwn(fields, fieldName)) {\n continue;\n }\n\n if (!Object.hasOwn(modelFields, fieldName)) {\n throw new Error(`Field ${fieldName} does not exist on model ${modelName}`);\n }\n\n const field = modelFields[fieldName];\n if (!field) {\n continue;\n }\n\n const columnName =\n contract.mappings.fieldToColumn?.[modelName]?.[fieldName] ?? field.column ?? fieldName;\n\n result[columnName] = param(fieldName);\n }\n\n return result;\n}\n\nexport function buildInsertPlan<TContract extends SqlContract<SqlStorage>>(\n context: OrmContext<TContract>,\n modelName: string,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorCreateRequiresFields();\n }\n\n const values = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const insertValues: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(values)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n insertValues[columnName] = createParamRef(index, paramName);\n }\n\n const ast = createInsertAst({\n table,\n values: insertValues,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\n\nexport function createParamDescriptor(args: {\n name: string;\n table: string;\n column: string;\n codecId?: string;\n nativeType?: string;\n nullable: boolean;\n}): ParamDescriptor {\n return {\n name: args.name,\n source: 'dsl',\n refs: { table: args.table, column: args.column },\n ...(args.codecId ? { codecId: args.codecId } : {}),\n ...(args.nativeType ? { nativeType: args.nativeType } : {}),\n nullable: args.nullable,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createParamRef, createTableRef, createUpdateAst } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorFailedToBuildWhereClause,\n errorModelNotFound,\n errorUnknownTable,\n errorUpdateRequiresFields,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\nimport { convertModelFieldsToColumns } from './insert-builder';\n\nexport function buildUpdatePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorUpdateRequiresFields();\n }\n\n const set = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const updateSet: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(set)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n updateSet[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createUpdateAst({\n table,\n set: updateSet,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n InferNestedProjectionRow,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions } from './orm-types';\n\nexport interface OrmIncludeChildBuilder<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> {\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >;\n}\n\nexport class OrmIncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> implements OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private childWhere: AnyBinaryBuilder | undefined;\n private childOrderBy: AnyOrderBuilder | undefined;\n private childLimit: number | undefined;\n private childProjection:\n | Record<string, AnyColumnBuilder | boolean | NestedProjection>\n | undefined = undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = fn(this._getModelAccessor());\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = fn(this._getModelAccessor());\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = n;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n > {\n const builder = new OrmIncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >({ context: this.context }, this.childModelName);\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = fn(this._getModelAccessor());\n return builder;\n }\n\n getState(): {\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n childProjection?: Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n } {\n return {\n ...(this.childWhere !== undefined ? { childWhere: this.childWhere } : {}),\n ...(this.childOrderBy !== undefined ? { childOrderBy: this.childOrderBy } : {}),\n ...(this.childLimit !== undefined ? { childLimit: this.childLimit } : {}),\n ...(this.childProjection !== undefined ? { childProjection: this.childProjection } : {}),\n };\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor = {} as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n // ModelColumnAccessor alignment is ensured by contract validation; cast for compatibility\n (accessor as Record<string, AnyColumnBuilder>)[fieldName] = column;\n }\n }\n\n return accessor;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type { AnyBinaryBuilder, AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions, OrmRelationFilterBuilder } from './orm-types';\n\nexport class OrmRelationFilterBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n> implements OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private modelAccessor: ModelColumnAccessor<TContract, CodecTypes, ChildModelName> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n this.modelAccessor = this._getModelAccessor();\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName> {\n const builder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, ChildModelName>(\n { context: this.context },\n this.childModelName,\n );\n builder.modelAccessor = this.modelAccessor;\n if (this.modelAccessor) {\n builder.wherePredicate = fn(this.modelAccessor);\n }\n return builder;\n }\n\n getWherePredicate(): AnyBinaryBuilder | undefined {\n return this.wherePredicate;\n }\n\n getChildModelName(): ChildModelName {\n return this.childModelName;\n }\n\n getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n if (!this.modelAccessor) {\n this.modelAccessor = this._getModelAccessor();\n }\n if (!this.modelAccessor) {\n throw planInvalid(`Failed to get model accessor for ${this.childModelName}`);\n }\n return this.modelAccessor;\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n }\n}\n","import type { ExecutionPlan, ParamDescriptor, PlanMeta } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ExistsExpr,\n LoweredStatement,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n getColumnInfo,\n getColumnMeta,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport type { IncludeState } from '../relations/include-plan';\nimport type { ProjectionState } from '../selection/projection';\n\nexport interface MetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly table: TableRef;\n readonly projection: ProjectionState;\n readonly includes?: ReadonlyArray<IncludeState>;\n readonly where?: BinaryBuilder;\n readonly orderBy?: AnyOrderBuilder;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramCodecs?: Record<string, string>;\n}\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const operationExpr = (whereLeft as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = whereLeft as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n throw planInvalid(`Missing column for alias ${alias} at index ${index}`);\n }\n const col = column as unknown as {\n table?: string;\n column?: string;\n _operationExpr?: OperationExpr;\n };\n if (!col.table || !col.column) {\n return [alias, `include:${alias}`];\n }\n const operationExpr = col._operationExpr;\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n return [alias, `${col.table}.${col.column}`];\n }),\n );\n\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const col = args.projection.columns[i];\n if (!col) {\n continue;\n }\n const operationExpr = (col as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionTypes[alias] = operationExpr.returns.type;\n } else if (operationExpr.returns.kind === 'builtin') {\n projectionTypes[alias] = operationExpr.returns.type;\n }\n } else {\n const columnMeta = getColumnMeta(col);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n const columnMeta = getColumnMeta(column);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n\nexport function createPlan<Row>(\n ast: SelectAst,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n return Object.freeze({\n ast,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n\nexport function createPlanWithExists<Row>(\n ast: SelectAst,\n combinedWhere: BinaryExpr | ExistsExpr | undefined,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IncludeAst,\n OperationExpr,\n ParamRef,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BuildOptions,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkIncludeCapabilities } from '../orm/capabilities';\nimport type { OrmIncludeState, RelationFilter } from '../orm/state';\nimport { buildJoinOnExpr } from '../selection/join';\nimport { buildChildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport {\n buildProjectionState,\n type ProjectionInput,\n type ProjectionState,\n} from '../selection/projection';\nimport { createColumnRef, createSelectAst } from '../utils/ast';\nimport {\n errorChildProjectionEmpty,\n errorChildProjectionMustBeSpecified,\n errorColumnNotFound,\n errorJoinColumnsMustBeDefined,\n errorMissingAlias,\n errorMissingColumn,\n errorModelNotFound,\n errorMultiColumnJoinsNotSupported,\n errorTableNotFound,\n} from '../utils/errors';\n\nexport interface IncludeState {\n readonly alias: string;\n readonly table: TableRef;\n readonly on: {\n kind: 'join-on';\n left: StorageColumn;\n right: StorageColumn;\n };\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n}\n\ninterface BuildIncludeAstsInput {\n readonly includes: OrmIncludeState[];\n readonly contract: SqlContract<SqlStorage>;\n readonly context: QueryLaneContext<SqlContract<SqlStorage>>;\n readonly modelName: string;\n readonly paramsMap: Record<string, unknown>;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramValues: unknown[];\n readonly paramCodecs: Record<string, string>;\n}\n\nexport function buildIncludeAsts(input: BuildIncludeAstsInput): {\n includesAst: IncludeAst[];\n includesForMeta: IncludeState[];\n} {\n const {\n includes,\n contract,\n context,\n modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n } = input;\n\n const includesAst: IncludeAst[] = [];\n const includesForMeta: IncludeState[] = [];\n\n for (const includeState of includes) {\n checkIncludeCapabilities(contract);\n\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const parentSchemaHandle = schema(context);\n const parentSchemaTable = parentSchemaHandle.tables[parentTableName];\n if (!parentSchemaTable) {\n errorTableNotFound(parentTableName);\n }\n const childSchemaHandle = schema(context);\n const childSchemaTable = childSchemaHandle.tables[includeState.childTable.name];\n if (!childSchemaTable) {\n errorTableNotFound(includeState.childTable.name);\n }\n\n if (\n includeState.relation.on.parentCols.length !== 1 ||\n includeState.relation.on.childCols.length !== 1\n ) {\n errorMultiColumnJoinsNotSupported();\n }\n const parentColName = includeState.relation.on.parentCols[0];\n const childColName = includeState.relation.on.childCols[0];\n if (!parentColName || !childColName) {\n errorJoinColumnsMustBeDefined();\n }\n const parentCol = parentSchemaTable.columns[parentColName];\n const childCol = childSchemaTable.columns[childColName];\n if (!parentCol) {\n errorColumnNotFound(parentColName, parentTableName);\n }\n if (!childCol) {\n errorColumnNotFound(childColName, includeState.childTable.name);\n }\n\n const onExpr = buildJoinOnExpr(\n parentTableName,\n parentColName,\n includeState.childTable.name,\n childColName,\n );\n\n if (!includeState.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const filteredProjection: Record<string, AnyColumnBuilder | NestedProjection> = {};\n for (const [key, value] of Object.entries(includeState.childProjection)) {\n if (value !== true && value !== false) {\n filteredProjection[key] = value as AnyColumnBuilder | NestedProjection;\n }\n }\n if (Object.keys(filteredProjection).length === 0) {\n errorChildProjectionEmpty();\n }\n const childProjectionState = buildProjectionState(\n includeState.childTable,\n filteredProjection as ProjectionInput,\n );\n\n let childWhere: BinaryExpr | undefined;\n if (includeState.childWhere) {\n const whereResult = buildWhereExpr(\n includeState.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n }\n\n const childOrderBy = buildChildOrderByClause(includeState.childOrderBy);\n\n const childProjectionItems: Array<{ alias: string; expr: ColumnRef | OperationExpr }> = [];\n for (let i = 0; i < childProjectionState.aliases.length; i++) {\n const alias = childProjectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = childProjectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n childProjectionItems.push({ alias, expr: operationExpr });\n } else {\n const col = column as { table: string; column: string };\n childProjectionItems.push({ alias, expr: createColumnRef(col.table, col.column) });\n }\n }\n\n const includeAst: IncludeAst = compact({\n kind: 'includeMany',\n alias: includeState.alias,\n child: compact({\n table: includeState.childTable,\n on: onExpr,\n project: childProjectionItems,\n where: childWhere,\n orderBy: childOrderBy,\n limit: includeState.childLimit,\n }),\n }) as IncludeAst;\n includesAst.push(includeAst);\n\n const includeForMeta: IncludeState = compact({\n alias: includeState.alias,\n table: includeState.childTable,\n on: {\n kind: 'join-on',\n left: parentCol as unknown as StorageColumn,\n right: childCol as unknown as StorageColumn,\n },\n childProjection: childProjectionState,\n childWhere: includeState.childWhere,\n childOrderBy: includeState.childOrderBy,\n childLimit: includeState.childLimit,\n }) as IncludeState;\n includesForMeta.push(includeForMeta);\n }\n\n return { includesAst, includesForMeta };\n}\n\nexport function buildExistsSubqueries(\n relationFilters: RelationFilter[],\n contract: SqlContract<SqlStorage>,\n modelName: string,\n options?: BuildOptions,\n): ExistsExpr[] {\n const existsExprs: ExistsExpr[] = [];\n\n for (const filter of relationFilters) {\n const childTableName = contract.mappings.modelToTable?.[filter.childModelName];\n if (!childTableName) {\n errorModelNotFound(filter.childModelName);\n }\n\n const childTable: TableRef = { kind: 'table', name: childTableName };\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const joinConditions: Array<{ left: ColumnRef; right: ColumnRef }> = [];\n for (let i = 0; i < filter.relation.on.parentCols.length; i++) {\n const parentCol = filter.relation.on.parentCols[i];\n const childCol = filter.relation.on.childCols[i];\n if (!parentCol || !childCol) {\n continue;\n }\n joinConditions.push({\n left: { kind: 'col', table: parentTableName, column: parentCol },\n right: { kind: 'col', table: childTableName, column: childCol },\n });\n }\n\n let childWhere: BinaryExpr | undefined;\n if (filter.childWhere) {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const whereResult = buildWhereExpr(\n filter.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n let subqueryWhere: BinaryExpr | undefined = childWhere;\n if (joinConditions.length > 0) {\n const firstJoinCondition = joinConditions[0];\n if (firstJoinCondition) {\n const joinWhere: BinaryExpr = {\n kind: 'bin',\n op: 'eq',\n left: firstJoinCondition.left,\n right: firstJoinCondition.right as unknown as ParamRef,\n };\n if (childWhere) {\n subqueryWhere = joinWhere;\n } else {\n subqueryWhere = joinWhere;\n }\n }\n }\n const projectionColumn = joinConditions[0]?.right ?? createColumnRef(childTableName, 'id');\n const subquery = createSelectAst({\n from: childTable,\n project: [{ alias: '_exists', expr: projectionColumn }],\n where: subqueryWhere,\n } as {\n from: TableRef;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef }>;\n where?: BinaryExpr | ExistsExpr;\n });\n\n const notExists = filter.filterType === 'none' || filter.filterType === 'every';\n\n const existsExpr: ExistsExpr = {\n kind: 'exists',\n subquery,\n not: notExists,\n };\n\n existsExprs.push(existsExpr);\n }\n\n return existsExprs;\n}\n\nexport function combineWhereClauses(\n mainWhere: BinaryExpr | ExistsExpr | undefined,\n existsExprs: ExistsExpr[],\n): BinaryExpr | ExistsExpr | undefined {\n if (existsExprs.length === 1) {\n return existsExprs[0];\n }\n if (mainWhere) {\n return mainWhere;\n }\n if (existsExprs.length > 0) {\n return existsExprs[0];\n }\n return undefined;\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { errorIncludeCapabilitiesNotTrue, errorIncludeRequiresCapabilities } from '../utils/errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorIncludeRequiresCapabilities();\n }\n const targetCapabilities = capabilities[target];\n if (capabilities[target]['lateral'] !== true || targetCapabilities['jsonAgg'] !== true) {\n errorIncludeCapabilitiesNotTrue();\n }\n}\n","import type { JoinOnExpr } from '@prisma-next/sql-relational-core/ast';\nimport { createColumnRef, createJoinOnExpr } from '../utils/ast';\n\nexport function buildJoinOnExpr(\n parentTableName: string,\n parentColName: string,\n childTableName: string,\n childColName: string,\n): JoinOnExpr {\n const leftCol = createColumnRef(parentTableName, parentColName);\n const rightCol = createColumnRef(childTableName, childColName);\n return createJoinOnExpr(leftCol, rightCol);\n}\n","import type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, Direction, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyOrderBuilder, OrderBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n extractBaseColumnRef,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createColumnRef, createOrderByItem } from '../utils/ast';\n\nexport function buildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = isOperationExpr(orderExpr)\n ? orderExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n\nexport function buildChildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n JoinOnPredicate,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { isColumnBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\n\nexport interface ProjectionState {\n readonly aliases: string[];\n readonly columns: AnyColumnBuilder[];\n}\n\nexport type ProjectionInput = Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n\nfunction generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: AnyColumnBuilder[] } {\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<{\n readonly alias: string;\n readonly table: TableRef;\n readonly on: JoinOnPredicate;\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n }>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n aliases.push(key);\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: {\n nativeType: 'jsonb',\n codecId: 'core/json@1',\n nullable: true,\n },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type {\n BinaryExpr,\n ColumnRef,\n Direction,\n ExistsExpr,\n IncludeAst,\n IncludeRef,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { IncludeState } from '../relations/include-plan';\nimport { createColumnRef, createSelectAst, createTableRef } from '../utils/ast';\nimport { errorInvalidColumn, errorMissingAlias, errorMissingColumn } from '../utils/errors';\nimport type { ProjectionState } from './projection';\n\nexport function buildProjectionItems(\n projectionState: ProjectionState,\n includesForMeta: ReadonlyArray<IncludeState>,\n): Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> {\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> = [];\n for (let i = 0; i < projectionState.aliases.length; i++) {\n const alias = projectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n\n const matchingInclude = includesForMeta.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n const col = column as { table: string; column: string };\n const tableName = col.table;\n const columnName = col.column;\n if (!tableName || !columnName) {\n errorInvalidColumn(alias, i);\n }\n projectEntries.push({\n alias,\n expr: createColumnRef(tableName, columnName),\n });\n }\n }\n }\n return projectEntries;\n}\n\nexport function buildSelectAst(params: {\n table: TableRef;\n projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n includesAst?: ReadonlyArray<IncludeAst>;\n whereExpr?: BinaryExpr | ExistsExpr;\n orderByClause?: ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>;\n limit?: number;\n}): SelectAst {\n const { table, projectEntries, includesAst, whereExpr, orderByClause, limit } = params;\n return createSelectAst({\n from: createTableRef(table.name),\n project: projectEntries,\n ...(includesAst ? { includes: includesAst } : {}),\n ...(whereExpr ? { where: whereExpr } : {}),\n ...(orderByClause ? { orderBy: orderByClause } : {}),\n ...(limit !== undefined ? { limit } : {}),\n });\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\n\nexport type OrmContext<TContract extends SqlContract<SqlStorage>> = QueryLaneContext<TContract>;\n\nexport function createOrmContext<TContract extends SqlContract<SqlStorage>>(\n context: QueryLaneContext<TContract>,\n): OrmContext<TContract> {\n return context;\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { ExtractCodecTypes, SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { OrmModelBuilderImpl } from './orm/builder';\nimport type { OrmBuilderOptions, OrmRegistry } from './orm-types';\n\ntype ModelName<TContract extends SqlContract<SqlStorage>> = keyof TContract['models'] & string;\n\nexport function orm<TContract extends SqlContract<SqlStorage>>(\n options: OrmBuilderOptions<TContract>,\n): OrmRegistry<TContract, ExtractCodecTypes<TContract>> {\n const contract = options.context.contract;\n type CodecTypes = ExtractCodecTypes<TContract>;\n\n return new Proxy({} as OrmRegistry<TContract, CodecTypes>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n if (\n !contract.models ||\n typeof contract.models !== 'object' ||\n !(modelName in contract.models)\n ) {\n throw planInvalid(`Model ${prop} (resolved to ${modelName}) not found in contract`);\n }\n\n return () =>\n new OrmModelBuilderImpl<TContract, CodecTypes, typeof modelName>(options, modelName);\n },\n has(_target, prop) {\n if (typeof prop !== 'string') {\n return false;\n }\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n return contract.models && typeof contract.models === 'object' && modelName in contract.models;\n },\n });\n}\n\n// Re-export types for convenience\nexport type {\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmModelBuilder,\n OrmRegistry,\n OrmRelationAccessor,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from './orm-types';\n"],"mappings":"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","names":["planInvalid","schema","planInvalid","planInvalid","schema","planInvalid","getColumnInfo","getColumnMeta","compact","schema","isOperationExpr","isOperationExpr","isColumnBuilder","isColumnBuilder","schema","compact","schema","planInvalid","planInvalid","planInvalid"]}
@@ -1,5 +1,5 @@
1
- export { M as ModelColumnAccessor, b as OrmBuilderOptions, O as OrmModelBuilder, e as OrmRegistry, f as OrmRelationAccessor, g as OrmRelationFilterBuilder, c as OrmWhereProperty, o as orm } from '../orm-C_3ipYf3.js';
2
- import '@prisma-next/contract/types';
1
+ export { M as ModelColumnAccessor, a as OrmBuilderOptions, O as OrmModelBuilder, d as OrmRegistry, e as OrmRelationAccessor, f as OrmRelationFilterBuilder, b as OrmWhereProperty, o as orm } from '../orm-DAnGd7z2.js';
2
+ import '@prisma-next/sql-contract/types';
3
3
  import '@prisma-next/sql-relational-core/plan';
4
4
  import '@prisma-next/sql-relational-core/query-lane-context';
5
5
  import '@prisma-next/sql-relational-core/types';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  orm
3
- } from "../chunk-JOTSRS66.js";
3
+ } from "../chunk-3DNKIXXB.js";
4
4
  export {
5
5
  orm
6
6
  };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { S as SqlContract, a as SqlStorage, O as OrmModelBuilder, b as OrmBuilderOptions, c as OrmWhereProperty, d as OrmIncludeAccessor, M as ModelColumnAccessor } from './orm-C_3ipYf3.js';
2
- export { e as OrmRegistry, f as OrmRelationAccessor, g as OrmRelationFilterBuilder, o as orm } from './orm-C_3ipYf3.js';
1
+ import { O as OrmModelBuilder, a as OrmBuilderOptions, b as OrmWhereProperty, c as OrmIncludeAccessor, M as ModelColumnAccessor } from './orm-DAnGd7z2.js';
2
+ export { d as OrmRegistry, e as OrmRelationAccessor, f as OrmRelationFilterBuilder, o as orm } from './orm-DAnGd7z2.js';
3
+ import { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';
3
4
  import { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';
4
5
  import { OrderBuilder, AnyColumnBuilder, NestedProjection, InferNestedProjectionRow, BuildOptions, AnyBinaryBuilder } from '@prisma-next/sql-relational-core/types';
5
- import '@prisma-next/contract/types';
6
6
  import '@prisma-next/sql-relational-core/query-lane-context';
7
7
 
8
8
  declare class OrmModelBuilderImpl<TContract extends SqlContract<SqlStorage>, CodecTypes extends Record<string, {
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  OrmModelBuilderImpl,
3
3
  orm
4
- } from "./chunk-JOTSRS66.js";
4
+ } from "./chunk-3DNKIXXB.js";
5
5
  export {
6
6
  OrmModelBuilderImpl,
7
7
  orm
@@ -1,62 +1,8 @@
1
- import { ContractBase } from '@prisma-next/contract/types';
1
+ import { SqlContract, SqlStorage, ExtractCodecTypes } from '@prisma-next/sql-contract/types';
2
2
  import { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';
3
3
  import { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';
4
4
  import { AnyBinaryBuilder, AnyOrderBuilder, AnyColumnBuilder, NestedProjection, InferNestedProjectionRow, ColumnBuilder, ComputeColumnJsType, BuildOptions } from '@prisma-next/sql-relational-core/types';
5
5
 
6
- type StorageColumn = {
7
- readonly type: string;
8
- readonly nullable: boolean;
9
- };
10
- type PrimaryKey = {
11
- readonly columns: readonly string[];
12
- readonly name?: string;
13
- };
14
- type UniqueConstraint = {
15
- readonly columns: readonly string[];
16
- readonly name?: string;
17
- };
18
- type Index = {
19
- readonly columns: readonly string[];
20
- readonly name?: string;
21
- };
22
- type ForeignKeyReferences = {
23
- readonly table: string;
24
- readonly columns: readonly string[];
25
- };
26
- type ForeignKey = {
27
- readonly columns: readonly string[];
28
- readonly references: ForeignKeyReferences;
29
- readonly name?: string;
30
- };
31
- type StorageTable = {
32
- readonly columns: Record<string, StorageColumn>;
33
- readonly primaryKey?: PrimaryKey;
34
- readonly uniques: ReadonlyArray<UniqueConstraint>;
35
- readonly indexes: ReadonlyArray<Index>;
36
- readonly foreignKeys: ReadonlyArray<ForeignKey>;
37
- };
38
- type SqlStorage = {
39
- readonly tables: Record<string, StorageTable>;
40
- };
41
- type SqlMappings = {
42
- readonly modelToTable?: Record<string, string>;
43
- readonly tableToModel?: Record<string, string>;
44
- readonly fieldToColumn?: Record<string, Record<string, string>>;
45
- readonly columnToField?: Record<string, Record<string, string>>;
46
- readonly codecTypes: Record<string, {
47
- readonly output: unknown;
48
- }>;
49
- readonly operationTypes: Record<string, Record<string, unknown>>;
50
- };
51
- type SqlContract<S extends SqlStorage = SqlStorage, M extends Record<string, unknown> = Record<string, unknown>, R extends Record<string, unknown> = Record<string, unknown>, Map extends SqlMappings = SqlMappings> = ContractBase & {
52
- readonly targetFamily: string;
53
- readonly storage: S;
54
- readonly models: M;
55
- readonly relations: R;
56
- readonly mappings: Map;
57
- };
58
- type ExtractCodecTypes<TContract extends SqlContract<SqlStorage>> = TContract['mappings']['codecTypes'];
59
-
60
6
  interface OrmIncludeChildBuilder<TContract extends SqlContract<SqlStorage>, CodecTypes extends Record<string, {
61
7
  output: unknown;
62
8
  }>, ChildModelName extends string, ChildRow = unknown> {
@@ -76,7 +22,8 @@ type ModelRelations<TContract extends SqlContract<SqlStorage>, ModelName extends
76
22
  to: string;
77
23
  }> ? TContract['relations'][ModelToTableName<TContract, ModelName>] : Record<string, never> : Record<string, never>;
78
24
  type ModelFieldToColumnMap<TContract extends SqlContract<SqlStorage>, ModelName extends string> = TContract['mappings']['fieldToColumn'] extends Record<string, Record<string, string>> ? ModelName extends keyof TContract['mappings']['fieldToColumn'] ? TContract['mappings']['fieldToColumn'][ModelName] : never : never;
79
- type FieldColumnName<TContract extends SqlContract<SqlStorage>, ModelName extends string, FieldName extends string> = ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string> ? FieldName extends keyof ModelFieldToColumnMap<TContract, ModelName> ? ModelFieldToColumnMap<TContract, ModelName>[FieldName] : FieldName : FieldName;
25
+ type FieldToColumnMapSafe<TContract extends SqlContract<SqlStorage>, ModelName extends string> = ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string> ? ModelFieldToColumnMap<TContract, ModelName> : never;
26
+ type FieldColumnName<TContract extends SqlContract<SqlStorage>, ModelName extends string, FieldName extends string> = (FieldToColumnMapSafe<TContract, ModelName> extends never ? FieldName : FieldName extends keyof FieldToColumnMapSafe<TContract, ModelName> ? FieldToColumnMapSafe<TContract, ModelName>[FieldName] : FieldName) & string;
80
27
  type ModelColumnMeta<TContract extends SqlContract<SqlStorage>, ModelName extends string, ColumnName extends string> = ModelToTableName<TContract, ModelName> extends infer TableName extends string ? TableName extends keyof TContract['storage']['tables'] ? ColumnName extends keyof TContract['storage']['tables'][TableName]['columns'] ? TContract['storage']['tables'][TableName]['columns'][ColumnName] : never : never : never;
81
28
  type _IndexKeys = string | number | symbol;
82
29
  type IncludeAccumulator<Includes extends Record<string, unknown>, Key extends string, Value> = {
@@ -147,4 +94,4 @@ type ModelColumnAccessor<TContract extends SqlContract<SqlStorage>, CodecTypes e
147
94
 
148
95
  declare function orm<TContract extends SqlContract<SqlStorage>>(options: OrmBuilderOptions<TContract>): OrmRegistry<TContract, ExtractCodecTypes<TContract>>;
149
96
 
150
- export { type ModelColumnAccessor as M, type OrmModelBuilder as O, type SqlContract as S, type SqlStorage as a, type OrmBuilderOptions as b, type OrmWhereProperty as c, type OrmIncludeAccessor as d, type OrmRegistry as e, type OrmRelationAccessor as f, type OrmRelationFilterBuilder as g, orm as o };
97
+ export { type ModelColumnAccessor as M, type OrmModelBuilder as O, type OrmBuilderOptions as a, type OrmWhereProperty as b, type OrmIncludeAccessor as c, type OrmRegistry as d, type OrmRelationAccessor as e, type OrmRelationFilterBuilder as f, orm as o };
package/package.json CHANGED
@@ -1,22 +1,24 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-orm-lane",
3
- "version": "0.0.1",
3
+ "version": "0.1.0-dev.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "ORM builder, include lowering, and relation filters for Prisma Next",
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.0.1",
9
- "@prisma-next/sql-lane": "0.0.1",
10
- "@prisma-next/plan": "0.0.1",
11
- "@prisma-next/sql-relational-core": "0.0.1"
8
+ "@prisma-next/contract": "0.1.0-dev.10",
9
+ "@prisma-next/plan": "0.1.0-dev.10",
10
+ "@prisma-next/sql-contract": "0.1.0-dev.10",
11
+ "@prisma-next/sql-lane": "0.1.0-dev.10",
12
+ "@prisma-next/sql-relational-core": "0.1.0-dev.10"
12
13
  },
13
14
  "devDependencies": {
14
15
  "tsup": "^8.3.0",
15
16
  "typescript": "^5.9.3",
16
17
  "vite-tsconfig-paths": "^5.1.4",
17
18
  "vitest": "^2.1.1",
18
- "@prisma-next/sql-contract-ts": "0.0.1",
19
- "@prisma-next/sql-runtime": "0.0.1",
19
+ "@prisma-next/operations": "0.1.0-dev.10",
20
+ "@prisma-next/sql-contract-ts": "0.1.0-dev.10",
21
+ "@prisma-next/sql-runtime": "0.1.0-dev.10",
20
22
  "@prisma-next/test-utils": "0.0.1"
21
23
  },
22
24
  "files": [
@@ -38,6 +40,8 @@
38
40
  "test:coverage": "vitest run --coverage",
39
41
  "typecheck": "tsc --project tsconfig.json --noEmit",
40
42
  "lint": "biome check . --config-path ../../../../biome.json --error-on-warnings",
43
+ "lint:fix": "biome check --write . --config-path ../../../../biome.json",
44
+ "lint:fix:unsafe": "biome check --write --unsafe . --config-path ../../../../biome.json",
41
45
  "clean": "node ../../../../scripts/clean.mjs"
42
46
  }
43
47
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/orm/builder.ts","../src/utils/ast.ts","../src/utils/errors.ts","../src/selection/predicates.ts","../src/mutations/delete-builder.ts","../src/mutations/insert-builder.ts","../src/utils/param-descriptor.ts","../src/mutations/update-builder.ts","../src/orm-include-child.ts","../src/orm-relation-filter.ts","../src/plan/plan-assembly.ts","../src/utils/guards.ts","../src/relations/include-plan.ts","../src/orm/capabilities.ts","../src/selection/join.ts","../src/selection/ordering.ts","../src/selection/projection.ts","../src/selection/select-builder.ts","../src/orm/context.ts","../src/orm.ts"],"sourcesContent":["import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SelectAst, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { buildDeletePlan } from '../mutations/delete-builder';\nimport { buildInsertPlan } from '../mutations/insert-builder';\nimport { buildUpdatePlan } from '../mutations/update-builder';\nimport type { OrmIncludeChildBuilder } from '../orm-include-child';\nimport { OrmIncludeChildBuilderImpl } from '../orm-include-child';\nimport { OrmRelationFilterBuilderImpl } from '../orm-relation-filter';\nimport type {\n IncludeAccumulator,\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmIncludeAccessor,\n OrmModelBuilder,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from '../orm-types';\nimport { buildMeta, type MetaBuildArgs } from '../plan/plan-assembly';\nimport {\n buildExistsSubqueries,\n buildIncludeAsts,\n combineWhereClauses,\n} from '../relations/include-plan';\nimport { buildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { buildProjectionState, type ProjectionInput } from '../selection/projection';\nimport { buildProjectionItems, buildSelectAst } from '../selection/select-builder';\nimport { createTableRef } from '../utils/ast';\nimport { errorModelNotFound, errorTableNotFound, errorUnknownTable } from '../utils/errors';\nimport { createOrmContext } from './context';\nimport type { OrmIncludeState, RelationFilter } from './state';\n\nexport class OrmModelBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n ModelName extends string = string,\n Includes extends Record<string, unknown> = Record<string, never>,\n Row = unknown,\n> implements OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly modelName: ModelName;\n private table: TableRef;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private relationFilters: RelationFilter[] = [];\n private includes: OrmIncludeState[] = [];\n private orderByExpr: AnyOrderBuilder | undefined = undefined;\n private limitValue: number | undefined = undefined;\n private offsetValue: number | undefined = undefined;\n private projection: Record<string, AnyColumnBuilder | boolean | NestedProjection> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, modelName: ModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.modelName = modelName;\n\n const tableName = this.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n\n const schemaHandle = schema(options.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n this.table = table;\n }\n\n get where(): OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row> {\n const whereFn = (\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> => {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = fn(this._getModelAccessor());\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n };\n\n // Add related property using Proxy\n const related = this._createRelatedProxy();\n\n return Object.assign(whereFn, { related }) as OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >;\n }\n\n get include(): OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row> {\n return this._createIncludeProxy();\n }\n\n private _createIncludeProxy(): OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n > {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n\n return new Proxy({} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n\n const relationName = prop as keyof typeof modelRelations & string;\n\n const includeFn = (<ChildRow>(\n child: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName, ChildRow>,\n ) => {\n return self._applyInclude<typeof relationName, ChildRow>(\n relationName,\n childModelName,\n child,\n relationDef,\n );\n }) as OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >[typeof relationName];\n\n return includeFn;\n },\n });\n }\n\n private _applyInclude<RelationName extends string, ChildRow>(\n relationName: RelationName,\n childModelName: string,\n childBuilderFn: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, string, ChildRow>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n > {\n // Get child table\n const childTableName = this.contract.mappings.modelToTable?.[childModelName];\n if (!childTableName) {\n errorModelNotFound(childModelName);\n }\n const childTable: TableRef = { kind: 'table', name: childTableName };\n\n // Create child builder and apply callback\n const childBuilder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const builtChild = childBuilderFn(\n childBuilder as OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n );\n const childState = (\n builtChild as OrmIncludeChildBuilderImpl<TContract, CodecTypes, string, ChildRow>\n ).getState();\n\n // Store the include\n // Note: Child projection validation happens in findMany() when compiling to includeMany\n const includeState: OrmIncludeState = {\n relationName,\n childModelName,\n childTable,\n childWhere: childState.childWhere,\n childOrderBy: childState.childOrderBy,\n childLimit: childState.childLimit,\n childProjection: childState.childProjection,\n alias: relationName,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = [...this.includes, includeState];\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n private _createRelatedProxy(): OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >['related'] {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n\n return new Proxy(\n {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'],\n {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n const filterBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n // Expose model accessor directly on the builder for convenience\n const modelAccessor = filterBuilder.getModelAccessor();\n const builderWithAccessor = Object.assign(\n filterBuilder,\n modelAccessor,\n ) as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName> &\n ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>;\n\n return {\n some: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n // If result is a AnyBinaryBuilder, wrap it in a builder\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n none: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n every: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n };\n },\n },\n );\n }\n\n private _applyRelationFilter(\n relationName: string,\n childModelName: string,\n filterType: 'some' | 'none' | 'every',\n fn: (\n child: OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n ) => OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // Create a relation filter builder and apply the callback\n const filterBuilder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const appliedFilter = fn(\n filterBuilder as OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n );\n const childWhere = (\n appliedFilter as OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>\n ).getWherePredicate();\n\n // Store the relation filter\n const relationFilter: RelationFilter = {\n relationName,\n childModelName,\n filterType,\n childWhere,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = [...this.relationFilters, relationFilter];\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => OrderBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = fn(this._getModelAccessor());\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n take(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = n;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n skip(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // TODO: SQL lane doesn't support offset yet - this is a placeholder\n // When offset is added to SelectAst, implement it here\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = n;\n builder.projection = this.projection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => Projection,\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n > {\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = fn(this._getModelAccessor());\n return builder as OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >;\n }\n\n findMany(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[this.table.name];\n\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n // Build projection state\n const projectionInput: ProjectionInput =\n this.projection ??\n (() => {\n const modelAccessor = this._getModelAccessor();\n const defaultProjection: Record<string, AnyColumnBuilder> = {};\n for (const fieldName in modelAccessor) {\n defaultProjection[fieldName] = modelAccessor[fieldName];\n }\n return defaultProjection;\n })();\n\n // Build includes AST\n const { includesAst, includesForMeta } = buildIncludeAsts(\n this.includes,\n this.contract,\n this.context,\n this.modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n );\n\n // Build projection state\n const projectionState = buildProjectionState(\n this.table,\n projectionInput,\n includesForMeta.length > 0\n ? (includesForMeta as unknown as Parameters<typeof buildProjectionState>[2])\n : undefined,\n );\n\n // Build where clause\n const whereResult = this.wherePredicate\n ? buildWhereExpr(this.wherePredicate, this.contract, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n // Build orderBy clause\n const orderByClause = buildOrderByClause(this.orderByExpr);\n\n // Build main projection items\n const projectEntries = buildProjectionItems(projectionState, includesForMeta);\n\n // Build SELECT AST\n const ast = buildSelectAst(\n this.table,\n projectEntries,\n includesAst.length > 0 ? includesAst : undefined,\n whereExpr,\n orderByClause,\n this.limitValue,\n );\n\n // Build plan metadata\n const planMeta = buildMeta({\n contract: this.contract,\n table: createTableRef(this.table.name),\n projection: projectionState,\n includes: includesForMeta.length > 0 ? includesForMeta : undefined,\n paramDescriptors,\n paramCodecs: Object.keys(paramCodecs).length > 0 ? paramCodecs : undefined,\n where: this.wherePredicate as BinaryBuilder | undefined,\n orderBy: this.orderByExpr,\n } as MetaBuildArgs);\n\n // Compile relation filters to EXISTS subqueries and combine with main where clause\n if (this.relationFilters.length > 0) {\n const existsExprs = buildExistsSubqueries(\n this.relationFilters,\n this.contract,\n this.modelName,\n options,\n );\n if (existsExprs.length > 0) {\n const combinedWhere = combineWhereClauses(ast.where, existsExprs);\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n }\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n\n findFirst(options?: BuildOptions): SqlQueryPlan<Row> {\n const queryPlan = this.take(1).findMany(options);\n return queryPlan;\n }\n\n findUnique(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<Row> {\n return this.where(where).take(1).findMany(options);\n }\n\n create(data: Record<string, unknown>, options?: BuildOptions): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildInsertPlan(context, this.modelName, data, options);\n }\n\n update(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n data: Record<string, unknown>,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildUpdatePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n data,\n options,\n );\n }\n\n delete(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildDeletePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n options,\n );\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n errorModelNotFound(this.modelName);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.modelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ModelName>;\n }\n}\n","export {\n createBinaryExpr,\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createJoinOnExpr,\n createOrderByItem,\n createParamRef,\n createSelectAst,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\n","import { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\n\nexport function errorModelNotFound(modelName: string): never {\n throw planInvalid(`Model ${modelName} not found in mappings`);\n}\n\nexport function errorTableNotFound(tableName: string): never {\n throw planInvalid(`Table ${tableName} not found in schema`);\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorCreateRequiresFields(): never {\n throw planInvalid('create() requires at least one field');\n}\n\nexport function errorUpdateRequiresFields(): never {\n throw planInvalid('update() requires at least one field');\n}\n\nexport function errorIncludeRequiresCapabilities(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities');\n}\n\nexport function errorIncludeCapabilitiesNotTrue(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities to be true');\n}\n\nexport function errorMultiColumnJoinsNotSupported(): never {\n throw planInvalid('Multi-column joins in includes are not yet supported');\n}\n\nexport function errorJoinColumnsMustBeDefined(): never {\n throw planInvalid('Join columns must be defined');\n}\n\nexport function errorColumnNotFound(columnName: string, tableName: string): never {\n throw planInvalid(`Column ${columnName} not found in table ${tableName}`);\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty after filtering boolean values');\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorMissingColumn(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias} at index ${index}`);\n}\n\nexport function errorInvalidColumn(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorRelationNotFound(relationName: string, modelName: string): never {\n throw planInvalid(`Relation ${relationName} not found on model ${modelName}`);\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function assertColumnExists(\n columnMeta: StorageColumn | undefined,\n columnName: string,\n tableName: string,\n): asserts columnMeta is StorageColumn {\n if (!columnMeta) {\n errorUnknownColumn(columnName, tableName);\n }\n}\n\nexport function assertParameterExists(\n paramsMap: Record<string, unknown>,\n paramName: string,\n): unknown {\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n return paramsMap[paramName];\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { BinaryExpr, ColumnRef, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder } from '@prisma-next/sql-relational-core/types';\nimport { createBinaryExpr, createColumnRef, createParamRef } from '../utils/ast';\nimport { errorMissingParameter } from '../utils/errors';\n\nexport function buildWhereExpr(\n where: BinaryBuilder,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): {\n expr: BinaryExpr;\n codecId?: string;\n paramName: string;\n} {\n const placeholder = where.right;\n const paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n\n const operationExpr = (where.left as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n leftExpr = operationExpr;\n } else {\n const colBuilder = where.left as unknown as {\n table: string;\n column: string;\n columnMeta?: { type?: string; nullable?: boolean };\n };\n const meta = (colBuilder.columnMeta ?? {}) as { type?: string; nullable?: boolean };\n\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: colBuilder.table, column: colBuilder.column },\n ...(typeof meta.type === 'string' ? { type: meta.type } : {}),\n ...(typeof meta.nullable === 'boolean' ? { nullable: meta.nullable } : {}),\n });\n\n const contractTable = contract.storage.tables[colBuilder.table];\n const columnMeta = contractTable?.columns[colBuilder.column];\n codecId = columnMeta?.type;\n\n leftExpr = createColumnRef(colBuilder.table, colBuilder.column);\n }\n\n return {\n expr: createBinaryExpr('eq', leftExpr, createParamRef(index, paramName)),\n ...(codecId ? { codecId } : {}),\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createDeleteAst, createTableRef } from '../utils/ast';\nimport { errorFailedToBuildWhereClause, errorModelNotFound } from '../utils/errors';\n\nexport function buildDeletePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createDeleteAst({\n table,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { param } from '@prisma-next/sql-relational-core/param';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { BuildOptions, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport { createInsertAst, createParamRef, createTableRef } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorCreateRequiresFields,\n errorModelNotFound,\n errorUnknownTable,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\n\nexport function convertModelFieldsToColumns<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n modelName: string,\n fields: Record<string, unknown>,\n): Record<string, ParamPlaceholder> {\n const model = contract.models[modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw new Error(`Model ${modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n const result: Record<string, ParamPlaceholder> = {};\n\n for (const fieldName in fields) {\n if (!Object.hasOwn(fields, fieldName)) {\n continue;\n }\n\n if (!Object.hasOwn(modelFields, fieldName)) {\n throw new Error(`Field ${fieldName} does not exist on model ${modelName}`);\n }\n\n const field = modelFields[fieldName];\n if (!field) {\n continue;\n }\n\n const columnName =\n contract.mappings.fieldToColumn?.[modelName]?.[fieldName] ?? field.column ?? fieldName;\n\n result[columnName] = param(fieldName);\n }\n\n return result;\n}\n\nexport function buildInsertPlan<TContract extends SqlContract<SqlStorage>>(\n context: OrmContext<TContract>,\n modelName: string,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorCreateRequiresFields();\n }\n\n const values = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const insertValues: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(values)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.type;\n if (codecId && paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n type: codecId,\n nullable: columnMeta.nullable,\n }),\n );\n\n insertValues[columnName] = createParamRef(index, paramName);\n }\n\n const ast = createInsertAst({\n table,\n values: insertValues,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\n\nexport function createParamDescriptor(args: {\n name: string;\n table: string;\n column: string;\n type?: string;\n nullable: boolean;\n}): ParamDescriptor {\n return {\n name: args.name,\n source: 'dsl',\n refs: { table: args.table, column: args.column },\n ...(args.type ? { type: args.type } : {}),\n nullable: args.nullable,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createParamRef, createTableRef, createUpdateAst } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorFailedToBuildWhereClause,\n errorModelNotFound,\n errorUnknownTable,\n errorUpdateRequiresFields,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\nimport { convertModelFieldsToColumns } from './insert-builder';\n\nexport function buildUpdatePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorUpdateRequiresFields();\n }\n\n const set = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const updateSet: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(set)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.type;\n if (codecId && paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n type: codecId,\n nullable: columnMeta.nullable,\n }),\n );\n\n updateSet[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createUpdateAst({\n table,\n set: updateSet,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n InferNestedProjectionRow,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions } from './orm-types';\n\nexport interface OrmIncludeChildBuilder<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> {\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >;\n}\n\nexport class OrmIncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> implements OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private childWhere: AnyBinaryBuilder | undefined;\n private childOrderBy: AnyOrderBuilder | undefined;\n private childLimit: number | undefined;\n private childProjection:\n | Record<string, AnyColumnBuilder | boolean | NestedProjection>\n | undefined = undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = fn(this._getModelAccessor());\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = fn(this._getModelAccessor());\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = n;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n > {\n const builder = new OrmIncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >({ context: this.context }, this.childModelName);\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = fn(this._getModelAccessor());\n return builder;\n }\n\n getState(): {\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n childProjection?: Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n } {\n return {\n ...(this.childWhere !== undefined ? { childWhere: this.childWhere } : {}),\n ...(this.childOrderBy !== undefined ? { childOrderBy: this.childOrderBy } : {}),\n ...(this.childLimit !== undefined ? { childLimit: this.childLimit } : {}),\n ...(this.childProjection !== undefined ? { childProjection: this.childProjection } : {}),\n };\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor = {} as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n // ModelColumnAccessor alignment is ensured by contract validation; cast for compatibility\n (accessor as Record<string, AnyColumnBuilder>)[fieldName] = column;\n }\n }\n\n return accessor;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type { AnyBinaryBuilder, AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions, OrmRelationFilterBuilder } from './orm-types';\n\nexport class OrmRelationFilterBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n> implements OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private modelAccessor: ModelColumnAccessor<TContract, CodecTypes, ChildModelName> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n this.modelAccessor = this._getModelAccessor();\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName> {\n const builder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, ChildModelName>(\n { context: this.context },\n this.childModelName,\n );\n builder.modelAccessor = this.modelAccessor;\n if (this.modelAccessor) {\n builder.wherePredicate = fn(this.modelAccessor);\n }\n return builder;\n }\n\n getWherePredicate(): AnyBinaryBuilder | undefined {\n return this.wherePredicate;\n }\n\n getChildModelName(): ChildModelName {\n return this.childModelName;\n }\n\n getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n if (!this.modelAccessor) {\n this.modelAccessor = this._getModelAccessor();\n }\n if (!this.modelAccessor) {\n throw planInvalid(`Failed to get model accessor for ${this.childModelName}`);\n }\n return this.modelAccessor;\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n }\n}\n","import type { ExecutionPlan, ParamDescriptor, PlanMeta } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ExistsExpr,\n LoweredStatement,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport type { IncludeState } from '../relations/include-plan';\nimport type { ProjectionState } from '../selection/projection';\nimport { collectColumnRefs, getColumnInfo, isOperationExpr } from '../utils/guards';\n\nexport interface MetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly table: TableRef;\n readonly projection: ProjectionState;\n readonly includes?: ReadonlyArray<IncludeState>;\n readonly where?: BinaryBuilder;\n readonly orderBy?: AnyOrderBuilder;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramCodecs?: Record<string, string>;\n}\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const operationExpr = (whereLeft as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = whereLeft as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n throw planInvalid(`Missing column for alias ${alias} at index ${index}`);\n }\n const col = column as unknown as {\n table?: string;\n column?: string;\n _operationExpr?: OperationExpr;\n };\n if (!col.table || !col.column) {\n return [alias, `include:${alias}`];\n }\n const operationExpr = col._operationExpr;\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n return [alias, `${col.table}.${col.column}`];\n }),\n );\n\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const col = args.projection.columns[i];\n if (!col) {\n continue;\n }\n const operationExpr = (col as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionTypes[alias] = operationExpr.returns.type;\n } else if (operationExpr.returns.kind === 'builtin') {\n projectionTypes[alias] = operationExpr.returns.type;\n }\n } else {\n const colMeta = col as unknown as { columnMeta?: { type?: string } };\n const columnMeta = colMeta.columnMeta;\n if (columnMeta?.type) {\n projectionTypes[alias] = columnMeta.type;\n }\n }\n }\n\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n const col = column as unknown as { columnMeta?: { type?: string } };\n const columnMeta = col.columnMeta;\n if (columnMeta?.type) {\n projectionCodecs[alias] = columnMeta.type;\n }\n }\n }\n\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n\nexport function createPlan<Row>(\n ast: SelectAst,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n return Object.freeze({\n ast,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n\nexport function createPlanWithExists<Row>(\n ast: SelectAst,\n combinedWhere: BinaryExpr | ExistsExpr | undefined,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n","import type {\n ColumnRef,\n LiteralExpr,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\n\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\nexport function isOperationExpr(expr: AnyColumnBuilder | OperationExpr): expr is OperationExpr {\n return typeof expr === 'object' && expr !== null && 'kind' in expr && expr.kind === 'operation';\n}\n\nexport function getColumnInfo(expr: AnyColumnBuilder | OperationExpr): {\n table: string;\n column: string;\n} {\n if (isOperationExpr(expr)) {\n const baseCol = extractBaseColumnRef(expr);\n return { table: baseCol.table, column: baseCol.column };\n }\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IncludeAst,\n OperationExpr,\n ParamRef,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BuildOptions,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkIncludeCapabilities } from '../orm/capabilities';\nimport type { OrmIncludeState, RelationFilter } from '../orm/state';\nimport { buildJoinOnExpr } from '../selection/join';\nimport { buildChildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport {\n buildProjectionState,\n type ProjectionInput,\n type ProjectionState,\n} from '../selection/projection';\nimport { createColumnRef, createSelectAst } from '../utils/ast';\nimport {\n errorChildProjectionEmpty,\n errorChildProjectionMustBeSpecified,\n errorColumnNotFound,\n errorJoinColumnsMustBeDefined,\n errorMissingAlias,\n errorMissingColumn,\n errorModelNotFound,\n errorMultiColumnJoinsNotSupported,\n errorTableNotFound,\n} from '../utils/errors';\n\nexport interface IncludeState {\n readonly alias: string;\n readonly table: TableRef;\n readonly on: {\n kind: 'join-on';\n left: StorageColumn;\n right: StorageColumn;\n };\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n}\n\nexport function buildIncludeAsts(\n includes: OrmIncludeState[],\n contract: SqlContract<SqlStorage>,\n context: QueryLaneContext<SqlContract<SqlStorage>>,\n modelName: string,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n paramCodecs: Record<string, string>,\n): {\n includesAst: IncludeAst[];\n includesForMeta: IncludeState[];\n} {\n const includesAst: IncludeAst[] = [];\n const includesForMeta: IncludeState[] = [];\n\n for (const includeState of includes) {\n checkIncludeCapabilities(contract);\n\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const parentSchemaHandle = schema(context);\n const parentSchemaTable = parentSchemaHandle.tables[parentTableName];\n if (!parentSchemaTable) {\n errorTableNotFound(parentTableName);\n }\n const childSchemaHandle = schema(context);\n const childSchemaTable = childSchemaHandle.tables[includeState.childTable.name];\n if (!childSchemaTable) {\n errorTableNotFound(includeState.childTable.name);\n }\n\n if (\n includeState.relation.on.parentCols.length !== 1 ||\n includeState.relation.on.childCols.length !== 1\n ) {\n errorMultiColumnJoinsNotSupported();\n }\n const parentColName = includeState.relation.on.parentCols[0];\n const childColName = includeState.relation.on.childCols[0];\n if (!parentColName || !childColName) {\n errorJoinColumnsMustBeDefined();\n }\n const parentCol = parentSchemaTable.columns[parentColName];\n const childCol = childSchemaTable.columns[childColName];\n if (!parentCol) {\n errorColumnNotFound(parentColName, parentTableName);\n }\n if (!childCol) {\n errorColumnNotFound(childColName, includeState.childTable.name);\n }\n\n const onExpr = buildJoinOnExpr(\n parentTableName,\n parentColName,\n includeState.childTable.name,\n childColName,\n );\n\n if (!includeState.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const filteredProjection: Record<string, AnyColumnBuilder | NestedProjection> = {};\n for (const [key, value] of Object.entries(includeState.childProjection)) {\n if (value !== true && value !== false) {\n filteredProjection[key] = value as AnyColumnBuilder | NestedProjection;\n }\n }\n if (Object.keys(filteredProjection).length === 0) {\n errorChildProjectionEmpty();\n }\n const childProjectionState = buildProjectionState(\n includeState.childTable,\n filteredProjection as ProjectionInput,\n );\n\n let childWhere: BinaryExpr | undefined;\n if (includeState.childWhere) {\n const whereResult = buildWhereExpr(\n includeState.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n }\n\n const childOrderBy = buildChildOrderByClause(includeState.childOrderBy);\n\n const childProjectionItems: Array<{ alias: string; expr: ColumnRef | OperationExpr }> = [];\n for (let i = 0; i < childProjectionState.aliases.length; i++) {\n const alias = childProjectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = childProjectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n childProjectionItems.push({ alias, expr: operationExpr });\n } else {\n const col = column as { table: string; column: string };\n childProjectionItems.push({ alias, expr: createColumnRef(col.table, col.column) });\n }\n }\n\n const includeAst: IncludeAst = compact({\n kind: 'includeMany',\n alias: includeState.alias,\n child: compact({\n table: includeState.childTable,\n on: onExpr,\n project: childProjectionItems,\n where: childWhere,\n orderBy: childOrderBy,\n limit: includeState.childLimit,\n }),\n }) as IncludeAst;\n includesAst.push(includeAst);\n\n const includeForMeta: IncludeState = compact({\n alias: includeState.alias,\n table: includeState.childTable,\n on: {\n kind: 'join-on',\n left: parentCol as unknown as StorageColumn,\n right: childCol as unknown as StorageColumn,\n },\n childProjection: childProjectionState,\n childWhere: includeState.childWhere,\n childOrderBy: includeState.childOrderBy,\n childLimit: includeState.childLimit,\n }) as IncludeState;\n includesForMeta.push(includeForMeta);\n }\n\n return { includesAst, includesForMeta };\n}\n\nexport function buildExistsSubqueries(\n relationFilters: RelationFilter[],\n contract: SqlContract<SqlStorage>,\n modelName: string,\n options?: BuildOptions,\n): ExistsExpr[] {\n const existsExprs: ExistsExpr[] = [];\n\n for (const filter of relationFilters) {\n const childTableName = contract.mappings.modelToTable?.[filter.childModelName];\n if (!childTableName) {\n errorModelNotFound(filter.childModelName);\n }\n\n const childTable: TableRef = { kind: 'table', name: childTableName };\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const joinConditions: Array<{ left: ColumnRef; right: ColumnRef }> = [];\n for (let i = 0; i < filter.relation.on.parentCols.length; i++) {\n const parentCol = filter.relation.on.parentCols[i];\n const childCol = filter.relation.on.childCols[i];\n if (!parentCol || !childCol) {\n continue;\n }\n joinConditions.push({\n left: { kind: 'col', table: parentTableName, column: parentCol },\n right: { kind: 'col', table: childTableName, column: childCol },\n });\n }\n\n let childWhere: BinaryExpr | undefined;\n if (filter.childWhere) {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const whereResult = buildWhereExpr(\n filter.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n let subqueryWhere: BinaryExpr | undefined = childWhere;\n if (joinConditions.length > 0) {\n const firstJoinCondition = joinConditions[0];\n if (firstJoinCondition) {\n const joinWhere: BinaryExpr = {\n kind: 'bin',\n op: 'eq',\n left: firstJoinCondition.left,\n right: firstJoinCondition.right as unknown as ParamRef,\n };\n if (childWhere) {\n subqueryWhere = joinWhere;\n } else {\n subqueryWhere = joinWhere;\n }\n }\n }\n const projectionColumn = joinConditions[0]?.right ?? createColumnRef(childTableName, 'id');\n const subquery = createSelectAst({\n from: childTable,\n project: [{ alias: '_exists', expr: projectionColumn }],\n where: subqueryWhere,\n } as {\n from: TableRef;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef }>;\n where?: BinaryExpr | ExistsExpr;\n });\n\n const notExists = filter.filterType === 'none' || filter.filterType === 'every';\n\n const existsExpr: ExistsExpr = {\n kind: 'exists',\n subquery,\n not: notExists,\n };\n\n existsExprs.push(existsExpr);\n }\n\n return existsExprs;\n}\n\nexport function combineWhereClauses(\n mainWhere: BinaryExpr | ExistsExpr | undefined,\n existsExprs: ExistsExpr[],\n): BinaryExpr | ExistsExpr | undefined {\n if (existsExprs.length === 1) {\n return existsExprs[0];\n }\n if (mainWhere) {\n return mainWhere;\n }\n if (existsExprs.length > 0) {\n return existsExprs[0];\n }\n return undefined;\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { errorIncludeCapabilitiesNotTrue, errorIncludeRequiresCapabilities } from '../utils/errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorIncludeRequiresCapabilities();\n }\n const targetCapabilities = capabilities[target];\n if (capabilities[target]['lateral'] !== true || targetCapabilities['jsonAgg'] !== true) {\n errorIncludeCapabilitiesNotTrue();\n }\n}\n","import type { JoinOnExpr } from '@prisma-next/sql-relational-core/ast';\nimport { createColumnRef, createJoinOnExpr } from '../utils/ast';\n\nexport function buildJoinOnExpr(\n parentTableName: string,\n parentColName: string,\n childTableName: string,\n childColName: string,\n): JoinOnExpr {\n const leftCol = createColumnRef(parentTableName, parentColName);\n const rightCol = createColumnRef(childTableName, childColName);\n return createJoinOnExpr(leftCol, rightCol);\n}\n","import type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, Direction, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyOrderBuilder, OrderBuilder } from '@prisma-next/sql-relational-core/types';\nimport { createColumnRef, createOrderByItem } from '../utils/ast';\nimport { extractBaseColumnRef, isOperationExpr } from '../utils/guards';\n\nexport function buildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = isOperationExpr(orderExpr)\n ? orderExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n\nexport function buildChildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n JoinOnPredicate,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport { isColumnBuilder } from '../utils/guards';\n\nexport interface ProjectionState {\n readonly aliases: string[];\n readonly columns: AnyColumnBuilder[];\n}\n\nexport type ProjectionInput = Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n\nfunction generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: AnyColumnBuilder[] } {\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<{\n readonly alias: string;\n readonly table: TableRef;\n readonly on: JoinOnPredicate;\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n }>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n aliases.push(key);\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { type: 'core/json@1', nullable: true },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type {\n BinaryExpr,\n ColumnRef,\n Direction,\n ExistsExpr,\n IncludeAst,\n IncludeRef,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { IncludeState } from '../relations/include-plan';\nimport { createColumnRef, createSelectAst, createTableRef } from '../utils/ast';\nimport { errorInvalidColumn, errorMissingAlias, errorMissingColumn } from '../utils/errors';\nimport type { ProjectionState } from './projection';\n\nexport function buildProjectionItems(\n projectionState: ProjectionState,\n includesForMeta: ReadonlyArray<IncludeState>,\n): Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> {\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> = [];\n for (let i = 0; i < projectionState.aliases.length; i++) {\n const alias = projectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n\n const matchingInclude = includesForMeta.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n const col = column as { table: string; column: string };\n const tableName = col.table;\n const columnName = col.column;\n if (!tableName || !columnName) {\n errorInvalidColumn(alias, i);\n }\n projectEntries.push({\n alias,\n expr: createColumnRef(tableName, columnName),\n });\n }\n }\n }\n return projectEntries;\n}\n\nexport function buildSelectAst(\n table: TableRef,\n projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>,\n includesAst: ReadonlyArray<IncludeAst> | undefined,\n whereExpr: BinaryExpr | ExistsExpr | undefined,\n orderByClause:\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined,\n limit: number | undefined,\n): SelectAst {\n return createSelectAst({\n from: createTableRef(table.name),\n project: projectEntries,\n includes: includesAst,\n where: whereExpr,\n orderBy: orderByClause,\n limit,\n } as {\n from: TableRef;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n includes?: ReadonlyArray<IncludeAst>;\n where?: BinaryExpr | ExistsExpr;\n orderBy?: ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>;\n limit?: number;\n });\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\n\nexport type OrmContext<TContract extends SqlContract<SqlStorage>> = QueryLaneContext<TContract>;\n\nexport function createOrmContext<TContract extends SqlContract<SqlStorage>>(\n context: QueryLaneContext<TContract>,\n): OrmContext<TContract> {\n return context;\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { ExtractCodecTypes, SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { OrmModelBuilderImpl } from './orm/builder';\nimport type { OrmBuilderOptions, OrmRegistry } from './orm-types';\n\ntype ModelName<TContract extends SqlContract<SqlStorage>> = keyof TContract['models'] & string;\n\nexport function orm<TContract extends SqlContract<SqlStorage>>(\n options: OrmBuilderOptions<TContract>,\n): OrmRegistry<TContract, ExtractCodecTypes<TContract>> {\n const contract = options.context.contract;\n type CodecTypes = ExtractCodecTypes<TContract>;\n\n return new Proxy({} as OrmRegistry<TContract, CodecTypes>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n if (\n !contract.models ||\n typeof contract.models !== 'object' ||\n !(modelName in contract.models)\n ) {\n throw planInvalid(`Model ${prop} (resolved to ${modelName}) not found in contract`);\n }\n\n return () =>\n new OrmModelBuilderImpl<TContract, CodecTypes, typeof modelName>(options, modelName);\n },\n has(_target, prop) {\n if (typeof prop !== 'string') {\n return false;\n }\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n return contract.models && typeof contract.models === 'object' && modelName in contract.models;\n },\n });\n}\n\n// Re-export types for convenience\nexport type {\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmModelBuilder,\n OrmRegistry,\n OrmRelationAccessor,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from './orm-types';\n"],"mappings":"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","names":["planInvalid","schema","planInvalid","planInvalid","schema","planInvalid","planInvalid","compact","schema","schema","compact","schema","planInvalid","planInvalid","planInvalid"]}