@prisma-next/sql-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.
@@ -242,9 +242,6 @@ function errorMissingColumnForAlias(alias, index) {
242
242
  function errorMissingAlias(index) {
243
243
  throw planInvalid2(`Missing alias at index ${index}`);
244
244
  }
245
- function errorInvalidColumnForAlias(alias, index) {
246
- throw planInvalid2(`Invalid column for alias ${alias} at index ${index}`);
247
- }
248
245
  function errorFromMustBeCalled() {
249
246
  throw planInvalid2("from() must be called before building a query");
250
247
  }
@@ -345,40 +342,21 @@ function checkReturningCapability(contract) {
345
342
 
346
343
  // src/sql/plan.ts
347
344
  import { compact } from "@prisma-next/sql-relational-core/ast";
345
+ import {
346
+ collectColumnRefs,
347
+ getColumnInfo,
348
+ getOperationExpr,
349
+ isColumnBuilder,
350
+ isOperationExpr
351
+ } from "@prisma-next/sql-relational-core/utils/guards";
348
352
 
349
- // src/utils/guards.ts
350
- function extractBaseColumnRef(expr) {
351
- if (expr.kind === "col") {
352
- return expr;
353
- }
354
- return extractBaseColumnRef(expr.self);
355
- }
356
- function collectColumnRefs(expr) {
357
- if (expr.kind === "col") {
358
- return [expr];
359
- }
360
- if (expr.kind === "operation") {
361
- const refs = collectColumnRefs(expr.self);
362
- for (const arg of expr.args) {
363
- refs.push(...collectColumnRefs(arg));
364
- }
365
- return refs;
366
- }
367
- return [];
368
- }
369
- function isOperationExpr(expr) {
370
- return typeof expr === "object" && expr !== null && "kind" in expr && expr.kind === "operation";
371
- }
372
- function getColumnInfo(expr) {
373
- if (isOperationExpr(expr)) {
374
- const baseCol = extractBaseColumnRef(expr);
375
- return { table: baseCol.table, column: baseCol.column };
353
+ // src/utils/assertions.ts
354
+ import { planInvalid as planInvalid3 } from "@prisma-next/plan";
355
+ function assertColumnBuilder(col, context) {
356
+ if (typeof col === "object" && col !== null && "table" in col && "column" in col && typeof col.table === "string" && typeof col.column === "string") {
357
+ return col;
376
358
  }
377
- const colBuilder = expr;
378
- return { table: colBuilder.table, column: colBuilder.column };
379
- }
380
- function isColumnBuilder(value) {
381
- return typeof value === "object" && value !== null && "kind" in value && value.kind === "column";
359
+ throw planInvalid3(`ColumnBuilder missing table/column in ${context}`);
382
360
  }
383
361
 
384
362
  // src/sql/plan.ts
@@ -386,7 +364,10 @@ function buildMeta(args) {
386
364
  const refsColumns = /* @__PURE__ */ new Map();
387
365
  const refsTables = /* @__PURE__ */ new Set([args.table.name]);
388
366
  for (const column of args.projection.columns) {
389
- const operationExpr = column._operationExpr;
367
+ if (!column) {
368
+ continue;
369
+ }
370
+ const operationExpr = getOperationExpr(column);
390
371
  if (operationExpr) {
391
372
  const allRefs = collectColumnRefs(operationExpr);
392
373
  for (const ref of allRefs) {
@@ -396,20 +377,17 @@ function buildMeta(args) {
396
377
  });
397
378
  }
398
379
  } else {
399
- const col = column;
400
- if (col.table && col.column) {
401
- refsColumns.set(`${col.table}.${col.column}`, {
402
- table: col.table,
403
- column: col.column
404
- });
405
- }
380
+ refsColumns.set(`${column.table}.${column.column}`, {
381
+ table: column.table,
382
+ column: column.column
383
+ });
406
384
  }
407
385
  }
408
386
  if (args.joins) {
409
387
  for (const join of args.joins) {
410
388
  refsTables.add(join.table.name);
411
- const onLeft = join.on.left;
412
- const onRight = join.on.right;
389
+ const onLeft = assertColumnBuilder(join.on.left, "join ON left");
390
+ const onRight = assertColumnBuilder(join.on.right, "join ON right");
413
391
  refsColumns.set(`${onLeft.table}.${onLeft.column}`, {
414
392
  table: onLeft.table,
415
393
  column: onLeft.column
@@ -423,26 +401,22 @@ function buildMeta(args) {
423
401
  if (args.includes) {
424
402
  for (const include of args.includes) {
425
403
  refsTables.add(include.table.name);
426
- const onLeft = include.on.left;
427
- const onRight = include.on.right;
428
- if (onLeft.table && onLeft.column && onRight.table && onRight.column) {
429
- refsColumns.set(`${onLeft.table}.${onLeft.column}`, {
430
- table: onLeft.table,
431
- column: onLeft.column
432
- });
433
- refsColumns.set(`${onRight.table}.${onRight.column}`, {
434
- table: onRight.table,
435
- column: onRight.column
436
- });
437
- }
404
+ const leftCol = assertColumnBuilder(include.on.left, "include ON left");
405
+ const rightCol = assertColumnBuilder(include.on.right, "include ON right");
406
+ refsColumns.set(`${leftCol.table}.${leftCol.column}`, {
407
+ table: leftCol.table,
408
+ column: leftCol.column
409
+ });
410
+ refsColumns.set(`${rightCol.table}.${rightCol.column}`, {
411
+ table: rightCol.table,
412
+ column: rightCol.column
413
+ });
438
414
  for (const column of include.childProjection.columns) {
439
- const col = column;
440
- if (col.table && col.column) {
441
- refsColumns.set(`${col.table}.${col.column}`, {
442
- table: col.table,
443
- column: col.column
444
- });
445
- }
415
+ const col = assertColumnBuilder(column, "include child projection column");
416
+ refsColumns.set(`${col.table}.${col.column}`, {
417
+ table: col.table,
418
+ column: col.column
419
+ });
446
420
  }
447
421
  if (include.childWhere) {
448
422
  const colInfo = getColumnInfo(include.childWhere.left);
@@ -450,6 +424,14 @@ function buildMeta(args) {
450
424
  table: colInfo.table,
451
425
  column: colInfo.column
452
426
  });
427
+ const childWhereRight = include.childWhere.right;
428
+ if (isColumnBuilder(childWhereRight)) {
429
+ const rightColInfo = getColumnInfo(childWhereRight);
430
+ refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {
431
+ table: rightColInfo.table,
432
+ column: rightColInfo.column
433
+ });
434
+ }
453
435
  }
454
436
  if (include.childOrderBy) {
455
437
  const orderBy = include.childOrderBy;
@@ -465,9 +447,8 @@ function buildMeta(args) {
465
447
  }
466
448
  if (args.where) {
467
449
  const whereLeft = args.where.left;
468
- const operationExpr = whereLeft._operationExpr;
469
- if (operationExpr) {
470
- const allRefs = collectColumnRefs(operationExpr);
450
+ if (isOperationExpr(whereLeft)) {
451
+ const allRefs = collectColumnRefs(whereLeft);
471
452
  for (const ref of allRefs) {
472
453
  refsColumns.set(`${ref.table}.${ref.column}`, {
473
454
  table: ref.table,
@@ -475,14 +456,31 @@ function buildMeta(args) {
475
456
  });
476
457
  }
477
458
  } else {
478
- const colBuilder = whereLeft;
479
- if (colBuilder.table && colBuilder.column) {
459
+ const operationExpr = whereLeft._operationExpr;
460
+ if (operationExpr) {
461
+ const allRefs = collectColumnRefs(operationExpr);
462
+ for (const ref of allRefs) {
463
+ refsColumns.set(`${ref.table}.${ref.column}`, {
464
+ table: ref.table,
465
+ column: ref.column
466
+ });
467
+ }
468
+ } else {
469
+ const colBuilder = assertColumnBuilder(whereLeft, "where clause must be a ColumnBuilder");
480
470
  refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
481
471
  table: colBuilder.table,
482
472
  column: colBuilder.column
483
473
  });
484
474
  }
485
475
  }
476
+ const whereRight = args.where.right;
477
+ if (isColumnBuilder(whereRight)) {
478
+ const colInfo = getColumnInfo(whereRight);
479
+ refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
480
+ table: colInfo.table,
481
+ column: colInfo.column
482
+ });
483
+ }
486
484
  }
487
485
  if (args.orderBy) {
488
486
  const orderBy = args.orderBy;
@@ -497,13 +495,10 @@ function buildMeta(args) {
497
495
  });
498
496
  }
499
497
  } else {
500
- const colBuilder = orderByExpr;
501
- if (colBuilder.table && colBuilder.column) {
502
- refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
503
- table: colBuilder.table,
504
- column: colBuilder.column
505
- });
506
- }
498
+ refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {
499
+ table: orderByExpr.table,
500
+ column: orderByExpr.column
501
+ });
507
502
  }
508
503
  }
509
504
  }
@@ -517,15 +512,11 @@ function buildMeta(args) {
517
512
  if (!column) {
518
513
  errorMissingColumnForAlias(alias, index);
519
514
  }
520
- const col = column;
521
- if (!col.table || !col.column) {
522
- return [alias, `include:${alias}`];
523
- }
524
- const operationExpr = col._operationExpr;
515
+ const operationExpr = getOperationExpr(column);
525
516
  if (operationExpr) {
526
517
  return [alias, `operation:${operationExpr.method}`];
527
518
  }
528
- return [alias, `${col.table}.${col.column}`];
519
+ return [alias, `${column.table}.${column.column}`];
529
520
  })
530
521
  );
531
522
  const projectionTypes = {};
@@ -548,8 +539,9 @@ function buildMeta(args) {
548
539
  } else {
549
540
  const col = column;
550
541
  const columnMeta = col.columnMeta;
551
- if (columnMeta?.type) {
552
- projectionTypes[alias] = columnMeta.type;
542
+ const codecId = columnMeta?.codecId;
543
+ if (codecId) {
544
+ projectionTypes[alias] = codecId;
553
545
  }
554
546
  }
555
547
  }
@@ -571,8 +563,9 @@ function buildMeta(args) {
571
563
  } else {
572
564
  const col = column;
573
565
  const columnMeta = col.columnMeta;
574
- if (columnMeta?.type) {
575
- projectionCodecs[alias] = columnMeta.type;
566
+ const codecId = columnMeta?.codecId;
567
+ if (codecId) {
568
+ projectionCodecs[alias] = codecId;
576
569
  }
577
570
  }
578
571
  }
@@ -605,38 +598,77 @@ import {
605
598
  createColumnRef,
606
599
  createParamRef
607
600
  } from "@prisma-next/sql-relational-core/ast";
601
+ import {
602
+ getColumnInfo as getColumnInfo2,
603
+ getOperationExpr as getOperationExpr2,
604
+ isColumnBuilder as isColumnBuilder2,
605
+ isParamPlaceholder
606
+ } from "@prisma-next/sql-relational-core/utils/guards";
608
607
  function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
609
- const placeholder = where.right;
610
- const paramName = placeholder.name;
611
- if (!Object.hasOwn(paramsMap, paramName)) {
612
- errorMissingParameter(paramName);
613
- }
614
- const value = paramsMap[paramName];
615
- const index = values.push(value);
616
608
  let leftExpr;
617
609
  let codecId;
618
- const operationExpr = where.left._operationExpr;
610
+ let rightExpr;
611
+ let paramName;
612
+ const operationExpr = getOperationExpr2(where.left);
619
613
  if (operationExpr) {
620
614
  leftExpr = operationExpr;
615
+ } else if (isColumnBuilder2(where.left)) {
616
+ const { table, column } = getColumnInfo2(where.left);
617
+ const contractTable = contract.storage.tables[table];
618
+ if (!contractTable) {
619
+ errorUnknownTable(table);
620
+ }
621
+ const columnMeta = contractTable.columns[column];
622
+ if (!columnMeta) {
623
+ errorUnknownColumn(column, table);
624
+ }
625
+ codecId = columnMeta.codecId;
626
+ leftExpr = createColumnRef(table, column);
621
627
  } else {
622
- const colBuilder = where.left;
623
- const meta = colBuilder.columnMeta ?? {};
624
- descriptors.push({
625
- name: paramName,
626
- source: "dsl",
627
- refs: { table: colBuilder.table, column: colBuilder.column },
628
- ...typeof meta.type === "string" ? { type: meta.type } : {},
629
- ...typeof meta.nullable === "boolean" ? { nullable: meta.nullable } : {}
630
- });
631
- const contractTable = contract.storage.tables[colBuilder.table];
632
- const columnMeta = contractTable?.columns[colBuilder.column];
633
- codecId = columnMeta?.type;
634
- leftExpr = createColumnRef(colBuilder.table, colBuilder.column);
628
+ errorFailedToBuildWhereClause();
629
+ }
630
+ if (isParamPlaceholder(where.right)) {
631
+ const placeholder = where.right;
632
+ paramName = placeholder.name;
633
+ if (!Object.hasOwn(paramsMap, paramName)) {
634
+ errorMissingParameter(paramName);
635
+ }
636
+ const value = paramsMap[paramName];
637
+ const index = values.push(value);
638
+ if (isColumnBuilder2(where.left)) {
639
+ const { table, column } = getColumnInfo2(where.left);
640
+ const contractTable = contract.storage.tables[table];
641
+ const columnMeta = contractTable?.columns[column];
642
+ if (columnMeta) {
643
+ descriptors.push({
644
+ name: paramName,
645
+ source: "dsl",
646
+ refs: { table, column },
647
+ nullable: columnMeta.nullable,
648
+ codecId: columnMeta.codecId,
649
+ nativeType: columnMeta.nativeType
650
+ });
651
+ }
652
+ }
653
+ rightExpr = createParamRef(index, paramName);
654
+ } else if (isColumnBuilder2(where.right)) {
655
+ const { table, column } = getColumnInfo2(where.right);
656
+ const contractTable = contract.storage.tables[table];
657
+ if (!contractTable) {
658
+ errorUnknownTable(table);
659
+ }
660
+ const columnMeta = contractTable.columns[column];
661
+ if (!columnMeta) {
662
+ errorUnknownColumn(column, table);
663
+ }
664
+ rightExpr = createColumnRef(table, column);
665
+ paramName = "";
666
+ } else {
667
+ errorFailedToBuildWhereClause();
635
668
  }
636
- const rightParam = createParamRef(index, paramName);
637
669
  return {
638
- expr: createBinaryExpr("eq", leftExpr, rightParam),
639
- ...codecId ? { codecId } : {},
670
+ expr: createBinaryExpr(where.op, leftExpr, rightExpr),
671
+ codecId,
640
672
  paramName
641
673
  };
642
674
  }
@@ -687,15 +719,16 @@ var InsertBuilderImpl = class _InsertBuilderImpl {
687
719
  const value = paramsMap[paramName];
688
720
  const index = paramValues.push(value);
689
721
  const columnMeta = contractTable.columns[columnName];
690
- const codecId = columnMeta?.type;
691
- if (codecId && paramName) {
722
+ const codecId = columnMeta?.codecId;
723
+ if (paramName && codecId) {
692
724
  paramCodecs[paramName] = codecId;
693
725
  }
694
726
  paramDescriptors.push({
695
727
  name: paramName,
696
728
  source: "dsl",
697
729
  refs: { table: this.table.name, column: columnName },
698
- ...codecId ? { type: codecId } : {},
730
+ ...codecId ? { codecId } : {},
731
+ ...columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {},
699
732
  ...columnMeta?.nullable !== void 0 ? { nullable: columnMeta.nullable } : {}
700
733
  });
701
734
  values[columnName] = createParamRef2(index, paramName);
@@ -803,15 +836,16 @@ var UpdateBuilderImpl = class _UpdateBuilderImpl {
803
836
  const value = paramsMap[paramName];
804
837
  const index = paramValues.push(value);
805
838
  const columnMeta = contractTable.columns[columnName];
806
- const codecId = columnMeta?.type;
807
- if (codecId && paramName) {
839
+ const codecId = columnMeta?.codecId;
840
+ if (paramName && codecId) {
808
841
  paramCodecs[paramName] = codecId;
809
842
  }
810
843
  paramDescriptors.push({
811
844
  name: paramName,
812
845
  source: "dsl",
813
846
  refs: { table: this.table.name, column: columnName },
814
- ...codecId ? { type: codecId } : {},
847
+ ...codecId ? { codecId } : {},
848
+ ...columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {},
815
849
  ...columnMeta?.nullable !== void 0 ? { nullable: columnMeta.nullable } : {}
816
850
  });
817
851
  set[columnName] = createParamRef2(index, paramName);
@@ -984,6 +1018,7 @@ import {
984
1018
  createSelectAst,
985
1019
  createTableRef as createTableRef4
986
1020
  } from "@prisma-next/sql-relational-core/ast";
1021
+ import { getOperationExpr as getOperationExpr3 } from "@prisma-next/sql-relational-core/utils/guards";
987
1022
 
988
1023
  // src/sql/include-builder.ts
989
1024
  import {
@@ -992,8 +1027,13 @@ import {
992
1027
  createOrderByItem,
993
1028
  createTableRef as createTableRef2
994
1029
  } from "@prisma-next/sql-relational-core/ast";
1030
+ import {
1031
+ extractBaseColumnRef,
1032
+ isOperationExpr as isOperationExpr2
1033
+ } from "@prisma-next/sql-relational-core/utils/guards";
995
1034
 
996
1035
  // src/sql/projection.ts
1036
+ import { isColumnBuilder as isColumnBuilder3 } from "@prisma-next/sql-relational-core/utils/guards";
997
1037
  function generateAlias(path) {
998
1038
  if (path.length === 0) {
999
1039
  errorAliasPathEmpty();
@@ -1025,7 +1065,7 @@ function flattenProjection(projection, tracker, currentPath = []) {
1025
1065
  const columns = [];
1026
1066
  for (const [key, value] of Object.entries(projection)) {
1027
1067
  const path = [...currentPath, key];
1028
- if (isColumnBuilder(value)) {
1068
+ if (isColumnBuilder3(value)) {
1029
1069
  const alias = tracker.register(path);
1030
1070
  aliases.push(alias);
1031
1071
  columns.push(value);
@@ -1050,13 +1090,8 @@ function buildProjectionState(_table, projection, includes) {
1050
1090
  errorIncludeAliasNotFound(key);
1051
1091
  }
1052
1092
  aliases.push(key);
1053
- columns.push({
1054
- kind: "column",
1055
- table: matchingInclude.table.name,
1056
- column: "",
1057
- columnMeta: { type: "core/json@1", nullable: true }
1058
- });
1059
- } else if (isColumnBuilder(value)) {
1093
+ columns.push(null);
1094
+ } else if (isColumnBuilder3(value)) {
1060
1095
  const alias = tracker.register([key]);
1061
1096
  aliases.push(alias);
1062
1097
  columns.push(value);
@@ -1184,7 +1219,7 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
1184
1219
  const orderBy = include.childOrderBy;
1185
1220
  const orderExpr = orderBy.expr;
1186
1221
  const expr = (() => {
1187
- if (isOperationExpr(orderExpr)) {
1222
+ if (isOperationExpr2(orderExpr)) {
1188
1223
  const baseCol = extractBaseColumnRef(orderExpr);
1189
1224
  return createColumnRef3(baseCol.table, baseCol.column);
1190
1225
  }
@@ -1223,10 +1258,9 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
1223
1258
  if (!column || !alias) {
1224
1259
  errorMissingColumnForAlias(alias ?? "unknown", idx);
1225
1260
  }
1226
- const col = column;
1227
1261
  return {
1228
1262
  alias,
1229
- expr: createColumnRef3(col.table, col.column)
1263
+ expr: createColumnRef3(column.table, column.column)
1230
1264
  };
1231
1265
  })
1232
1266
  }
@@ -1414,7 +1448,8 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1414
1448
  const orderByClause = this.state.orderBy ? (() => {
1415
1449
  const orderBy = this.state.orderBy;
1416
1450
  const orderExpr = orderBy.expr;
1417
- const expr = isOperationExpr(orderExpr) ? orderExpr : (() => {
1451
+ const operationExpr = getOperationExpr3(orderExpr);
1452
+ const expr = operationExpr ? operationExpr : (() => {
1418
1453
  const colBuilder = orderExpr;
1419
1454
  return createColumnRef5(colBuilder.table, colBuilder.column);
1420
1455
  })();
@@ -1431,9 +1466,6 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1431
1466
  errorMissingAlias(i);
1432
1467
  }
1433
1468
  const column = projection.columns[i];
1434
- if (!column) {
1435
- errorMissingColumnForAlias(alias, i);
1436
- }
1437
1469
  const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);
1438
1470
  if (matchingInclude) {
1439
1471
  projectEntries.push({
@@ -1441,6 +1473,9 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1441
1473
  expr: { kind: "includeRef", alias }
1442
1474
  });
1443
1475
  } else {
1476
+ if (!column) {
1477
+ errorMissingColumnForAlias(alias, i);
1478
+ }
1444
1479
  const operationExpr = column._operationExpr;
1445
1480
  if (operationExpr) {
1446
1481
  projectEntries.push({
@@ -1449,14 +1484,10 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1449
1484
  });
1450
1485
  } else {
1451
1486
  const col = column;
1452
- const tableName = col.table;
1453
- const columnName = col.column;
1454
- if (!tableName || !columnName) {
1455
- errorInvalidColumnForAlias(alias, i);
1456
- }
1487
+ assertColumnBuilder(col, "projection column");
1457
1488
  projectEntries.push({
1458
1489
  alias,
1459
- expr: createColumnRef5(tableName, columnName)
1490
+ expr: createColumnRef5(col.table, col.column)
1460
1491
  });
1461
1492
  }
1462
1493
  }
@@ -1542,4 +1573,4 @@ export {
1542
1573
  createJoinOnBuilder2 as createJoinOnBuilder,
1543
1574
  sql
1544
1575
  };
1545
- //# sourceMappingURL=chunk-5OSV5CZC.js.map
1576
+ //# sourceMappingURL=chunk-VDWKYULI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/assertions.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst POSTGRES_TARGET = 'postgres';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n if (contract.target !== POSTGRES_TARGET) {\n throw planInvalid('Raw lane currently supports only postgres target', {\n expectedTarget: POSTGRES_TARGET,\n actualTarget: contract.target,\n });\n }\n\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: POSTGRES_TARGET,\n ...(contract.targetFamily ? { targetFamily: contract.targetFamily } : {}),\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n getColumnInfo,\n getOperationExpr,\n isColumnBuilder,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { assertColumnBuilder } from '../utils/assertions';\nimport { errorMissingColumnForAlias } from '../utils/errors';\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 // Skip null columns (include placeholders)\n if (!column) {\n continue;\n }\n const operationExpr = getOperationExpr(column);\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 refsColumns.set(`${column.table}.${column.column}`, {\n table: column.table,\n column: column.column,\n });\n }\n }\n\n if (args.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n const onLeft = assertColumnBuilder(join.on.left, 'join ON left');\n const onRight = assertColumnBuilder(join.on.right, 'join ON right');\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const leftCol = assertColumnBuilder(include.on.left, 'include ON left');\n const rightCol = assertColumnBuilder(include.on.right, 'include ON right');\n refsColumns.set(`${leftCol.table}.${leftCol.column}`, {\n table: leftCol.table,\n column: leftCol.column,\n });\n refsColumns.set(`${rightCol.table}.${rightCol.column}`, {\n table: rightCol.table,\n column: rightCol.column,\n });\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = assertColumnBuilder(column, 'include child projection column');\n\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n // Handle right side of child WHERE clause\n const childWhereRight = include.childWhere.right;\n if (isColumnBuilder(childWhereRight)) {\n const rightColInfo = getColumnInfo(childWhereRight);\n refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {\n table: rightColInfo.table,\n column: rightColInfo.column,\n });\n }\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n // Check if whereLeft is an OperationExpr directly (not wrapped in ColumnBuilder)\n if (isOperationExpr(whereLeft)) {\n const allRefs = collectColumnRefs(whereLeft);\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 // Check if whereLeft is a ColumnBuilder with an _operationExpr property\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 = assertColumnBuilder(whereLeft, 'where clause must be a ColumnBuilder');\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n\n // Handle right side of WHERE clause - can be ParamPlaceholder or AnyColumnBuilder\n const whereRight = args.where.right;\n if (isColumnBuilder(whereRight)) {\n const colInfo = getColumnInfo(whereRight);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {\n table: orderByExpr.table,\n column: orderByExpr.column,\n });\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n // Null column means this is an include placeholder, but alias doesn't match includes\n // This shouldn't happen if projection building is correct, but handle gracefully\n errorMissingColumnForAlias(alias, index);\n }\n\n const operationExpr = getOperationExpr(column);\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n\n return [alias, `${column.table}.${column.column}`];\n }),\n );\n\n // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column 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 // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const 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 // Use columnMeta.codecId directly as typeId (already canonicalized)\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\n\n/**\n * Asserts that a ColumnBuilder has table and column properties.\n */\nexport function assertColumnBuilder(col: unknown, context: string): AnyColumnBuilder {\n if (\n typeof col === 'object' &&\n col !== null &&\n 'table' in col &&\n 'column' in col &&\n typeof (col as { table: unknown }).table === 'string' &&\n typeof (col as { column: unknown }).column === 'string'\n ) {\n return col as AnyColumnBuilder;\n }\n throw planInvalid(`ColumnBuilder missing table/column in ${context}`);\n}\n\n/**\n * Asserts that a JoinOnPredicate has valid left and right columns.\n */\nexport function assertJoinOnPredicate(on: {\n left?: { table?: string; column?: string };\n right?: { table?: string; column?: string };\n}): asserts on is {\n left: { table: string; column: string };\n right: { table: string; column: string };\n} {\n if (!on.left?.table || !on.left?.column || !on.right?.table || !on.right?.column) {\n throw planInvalid('JoinOnPredicate missing required table/column properties');\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 {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnInfo,\n getOperationExpr,\n isColumnBuilder,\n isParamPlaceholder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n} from '../utils/errors';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId: string | undefined;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n // Check if where.left is an OperationExpr directly (from operation.eq())\n // or a ColumnBuilder with _operationExpr property\n const operationExpr = getOperationExpr(where.left);\n if (operationExpr) {\n leftExpr = operationExpr;\n } else if (isColumnBuilder(where.left)) {\n // where.left is a ColumnBuilder - use proper type narrowing\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 (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n codecId = columnMeta.codecId;\n leftExpr = createColumnRef(table, column);\n } else {\n // where.left is neither OperationExpr nor ColumnBuilder - invalid state\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 directly from validated StorageColumn\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 if (columnMeta) {\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n nullable: columnMeta.nullable,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n });\n }\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { getOperationExpr } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { ProjectionInput } from '../types/internal';\nimport { assertColumnBuilder } from '../utils/assertions';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const operationExpr = getOperationExpr(orderExpr);\n const expr: ColumnRef | OperationExpr = operationExpr\n ? operationExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n\n // Check if this alias matches an include alias first\n // Include placeholders have null columns\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference - column can be null for placeholders\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Not an include - column must not be null\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n // Check if this column has an operation expression\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n // This is a regular column\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n assertColumnBuilder(col, 'projection column');\n projectEntries.push({\n alias,\n expr: createColumnRef(col.table, col.column),\n });\n }\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n extractBaseColumnRef,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // orderExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n\n return {\n alias,\n expr: createColumnRef(column.table, column.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder, NestedProjection } from '@prisma-next/sql-relational-core/types';\nimport { isColumnBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: 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<IncludeState>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: (AnyColumnBuilder | null)[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use null as placeholder\n // The actual handling happens in AST building where we create includeRef\n // Using null instead of invalid ColumnBuilder avoids code smell\n aliases.push(key);\n columns.push(null);\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 { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":"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","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","planInvalid","planInvalid","getColumnInfo","getOperationExpr","isColumnBuilder","getOperationExpr","isColumnBuilder","getColumnInfo","createParamRef","createColumnRef","createColumnRef","createOrderByItem","createTableRef","getOperationExpr","createColumnRef","createTableRef","isOperationExpr","isColumnBuilder","isColumnBuilder","isOperationExpr","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","getOperationExpr","createColumnRef","createOrderByItem","createTableRef"]}
@@ -1,5 +1,5 @@
1
1
  export { ColumnsOf, RawFactory, RawFunctionOptions, RawTemplateOptions, SqlBuilderOptions, TableKey, TablesOf } from '@prisma-next/sql-relational-core/types';
2
2
  export { SelectBuilder, rawOptions, sql } from '../index.js';
3
3
  export { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';
4
- import '@prisma-next/contract/types';
4
+ import '@prisma-next/sql-contract/types';
5
5
  import '@prisma-next/sql-relational-core/plan';
@@ -2,7 +2,7 @@ import {
2
2
  createJoinOnBuilder,
3
3
  rawOptions,
4
4
  sql
5
- } from "../chunk-5OSV5CZC.js";
5
+ } from "../chunk-VDWKYULI.js";
6
6
  export {
7
7
  createJoinOnBuilder,
8
8
  rawOptions,
package/dist/index.d.ts CHANGED
@@ -2,64 +2,9 @@ import { RawTemplateOptions, AnyColumnBuilder, InferReturningRow, BuildOptions,
2
2
  export { ColumnsOf, JoinOnBuilder, RawFactory, RawFunctionOptions, RawTemplateOptions, SqlBuilderOptions, TableKey, TablesOf } from '@prisma-next/sql-relational-core/types';
3
3
  import { TableRef } from '@prisma-next/sql-relational-core/ast';
4
4
  export { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';
5
- import { ContractBase } from '@prisma-next/contract/types';
5
+ import { SqlContract, SqlStorage, ExtractCodecTypes, ExtractOperationTypes } from '@prisma-next/sql-contract/types';
6
6
  import { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';
7
7
 
8
- type StorageColumn = {
9
- readonly type: string;
10
- readonly nullable: boolean;
11
- };
12
- type PrimaryKey = {
13
- readonly columns: readonly string[];
14
- readonly name?: string;
15
- };
16
- type UniqueConstraint = {
17
- readonly columns: readonly string[];
18
- readonly name?: string;
19
- };
20
- type Index = {
21
- readonly columns: readonly string[];
22
- readonly name?: string;
23
- };
24
- type ForeignKeyReferences = {
25
- readonly table: string;
26
- readonly columns: readonly string[];
27
- };
28
- type ForeignKey = {
29
- readonly columns: readonly string[];
30
- readonly references: ForeignKeyReferences;
31
- readonly name?: string;
32
- };
33
- type StorageTable = {
34
- readonly columns: Record<string, StorageColumn>;
35
- readonly primaryKey?: PrimaryKey;
36
- readonly uniques: ReadonlyArray<UniqueConstraint>;
37
- readonly indexes: ReadonlyArray<Index>;
38
- readonly foreignKeys: ReadonlyArray<ForeignKey>;
39
- };
40
- type SqlStorage = {
41
- readonly tables: Record<string, StorageTable>;
42
- };
43
- type SqlMappings = {
44
- readonly modelToTable?: Record<string, string>;
45
- readonly tableToModel?: Record<string, string>;
46
- readonly fieldToColumn?: Record<string, Record<string, string>>;
47
- readonly columnToField?: Record<string, Record<string, string>>;
48
- readonly codecTypes: Record<string, {
49
- readonly output: unknown;
50
- }>;
51
- readonly operationTypes: Record<string, Record<string, unknown>>;
52
- };
53
- 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 & {
54
- readonly targetFamily: string;
55
- readonly storage: S;
56
- readonly models: M;
57
- readonly relations: R;
58
- readonly mappings: Map;
59
- };
60
- type ExtractCodecTypes<TContract extends SqlContract<SqlStorage>> = TContract['mappings']['codecTypes'];
61
- type ExtractOperationTypes<TContract extends SqlContract<SqlStorage>> = TContract['mappings']['operationTypes'];
62
-
63
8
  declare const RAW_OPTIONS_SENTINEL: unique symbol;
64
9
  interface RawTemplateOptionsSentinel {
65
10
  readonly [RAW_OPTIONS_SENTINEL]: true;
@@ -90,7 +35,7 @@ interface DeleteBuilder<TContract extends SqlContract<SqlStorage> = SqlContract<
90
35
 
91
36
  interface ProjectionState {
92
37
  readonly aliases: string[];
93
- readonly columns: AnyColumnBuilder[];
38
+ readonly columns: (AnyColumnBuilder | null)[];
94
39
  }
95
40
  interface JoinState {
96
41
  readonly joinType: 'inner' | 'left' | 'right' | 'full';
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  createJoinOnBuilder,
3
3
  rawOptions,
4
4
  sql
5
- } from "./chunk-5OSV5CZC.js";
5
+ } from "./chunk-VDWKYULI.js";
6
6
  export {
7
7
  createJoinOnBuilder,
8
8
  rawOptions,
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-lane",
3
- "version": "0.0.1",
3
+ "version": "0.1.0-dev.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Relational DSL and raw SQL helpers for Prisma Next",
7
7
  "dependencies": {
8
- "@prisma-next/plan": "0.0.1",
9
- "@prisma-next/contract": "0.0.1",
10
- "@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-relational-core": "0.1.0-dev.10"
11
12
  },
12
13
  "devDependencies": {
13
14
  "@types/pg": "^8.11.10",
@@ -16,9 +17,9 @@
16
17
  "typescript": "^5.9.3",
17
18
  "vite-tsconfig-paths": "^5.1.4",
18
19
  "vitest": "^2.1.1",
19
- "@prisma-next/test-utils": "0.0.1",
20
- "@prisma-next/sql-runtime": "0.0.1",
21
- "@prisma-next/sql-contract-ts": "0.0.1"
20
+ "@prisma-next/sql-contract-ts": "0.1.0-dev.10",
21
+ "@prisma-next/sql-runtime": "0.1.0-dev.10",
22
+ "@prisma-next/test-utils": "0.0.1"
22
23
  },
23
24
  "files": [
24
25
  "dist"
@@ -39,6 +40,8 @@
39
40
  "test:coverage": "vitest run --coverage",
40
41
  "typecheck": "tsc --project tsconfig.json --noEmit",
41
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",
42
45
  "clean": "node ../../../../scripts/clean.mjs"
43
46
  }
44
47
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/guards.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst POSTGRES_TARGET = 'postgres';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n if (contract.target !== POSTGRES_TARGET) {\n throw planInvalid('Raw lane currently supports only postgres target', {\n expectedTarget: POSTGRES_TARGET,\n actualTarget: contract.target,\n });\n }\n\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: POSTGRES_TARGET,\n ...(contract.targetFamily ? { targetFamily: contract.targetFamily } : {}),\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.type;\n if (codecId && paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { type: codecId } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.type;\n if (codecId && paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { type: codecId } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { errorMissingColumnForAlias } from '../utils/errors';\nimport { collectColumnRefs, getColumnInfo, isOperationExpr } from '../utils/guards';\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const 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 // column is ColumnBuilder - TypeScript can't narrow properly\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.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n // TypeScript can't narrow ColumnBuilder properly\n const onLeft = join.on.left as unknown as { table: string; column: string };\n const onRight = join.on.right as unknown as { table: string; column: string };\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const 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 // whereLeft is ColumnBuilder - TypeScript can't narrow properly\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 // orderByExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n errorMissingColumnForAlias(alias, index);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as {\n table?: string;\n column?: string;\n _operationExpr?: OperationExpr;\n };\n if (!col.table || !col.column) {\n // This is a placeholder column for an include - skip it\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 // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column 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 // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { type?: string } };\n const columnMeta = col.columnMeta;\n if (columnMeta?.type) {\n projectionTypes[alias] = columnMeta.type;\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const 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 // Use columnMeta.type directly as typeId (already canonicalized)\n // TypeScript can't narrow ColumnBuilder properly\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 // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import type {\n ColumnRef,\n LiteralExpr,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\n\n/**\n * Recursively extracts the base ColumnRef from an OperationExpr.\n * If the expression is already a ColumnRef, it is returned directly.\n */\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\n/**\n * Recursively collects all ColumnRef nodes from an expression tree.\n * Handles nested OperationExpr structures by traversing both self and args.\n */\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\n/**\n * Type predicate to check if an expression is an OperationExpr.\n */\nexport function isOperationExpr(expr: AnyColumnBuilder | OperationExpr): expr is OperationExpr {\n return typeof expr === 'object' && expr !== null && 'kind' in expr && expr.kind === 'operation';\n}\n\n/**\n * Helper to extract table and column from a ColumnBuilder or OperationExpr.\n * For OperationExpr, recursively unwraps to find the base ColumnRef.\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 // expr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\n/**\n * Type predicate to check if a value is a ColumnBuilder.\n */\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n","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 {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder } from '@prisma-next/sql-relational-core/types';\nimport { errorMissingParameter } from '../utils/errors';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId?: string;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n 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 // where.left is ColumnBuilder - TypeScript can't narrow properly\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 const rightParam = createParamRef(index, paramName);\n return {\n expr: createBinaryExpr('eq', leftExpr, rightParam),\n ...(codecId ? { codecId } : {}),\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorInvalidColumnForAlias,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport { isOperationExpr } from '../utils/guards';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n 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, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n\n // Check if this alias matches an include alias\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Check if this column has an operation expression\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n // This is a regular column\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n const tableName = col.table;\n const columnName = col.column;\n if (!tableName || !columnName) {\n errorInvalidColumnForAlias(alias, i);\n }\n projectEntries.push({\n alias,\n expr: createColumnRef(tableName, columnName),\n });\n }\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport { extractBaseColumnRef, isOperationExpr } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // orderExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n return {\n alias,\n expr: createColumnRef(col.table, col.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder, NestedProjection } from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport { isColumnBuilder } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: 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<IncludeState>,\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 // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use a placeholder column\n // The actual handling happens in AST building where we create includeRef\n aliases.push(key);\n // Use a placeholder column - this won't be used for includes, but we need\n // to maintain the same array length for aliases and columns\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { 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 { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":"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","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","createParamRef","createColumnRef","createColumnRef","createOrderByItem","createTableRef","createColumnRef","createTableRef","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","createColumnRef","createOrderByItem","createTableRef"]}