@prisma-next/sql-lane 0.1.0-pr.49.1 → 0.1.0-pr.50.2
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.
|
@@ -167,7 +167,7 @@ import { createJoinOnBuilder as createJoinOnBuilder2 } from "@prisma-next/sql-re
|
|
|
167
167
|
|
|
168
168
|
// src/sql/mutation-builder.ts
|
|
169
169
|
import {
|
|
170
|
-
createColumnRef,
|
|
170
|
+
createColumnRef as createColumnRef2,
|
|
171
171
|
createDeleteAst,
|
|
172
172
|
createInsertAst,
|
|
173
173
|
createParamRef as createParamRef2,
|
|
@@ -203,7 +203,7 @@ function errorIncludeRequiresCapabilities(target) {
|
|
|
203
203
|
[
|
|
204
204
|
"docs/Architecture Overview.md",
|
|
205
205
|
"docs/reference/extensions-glossary.md",
|
|
206
|
-
"packages/targets/
|
|
206
|
+
"packages/3-targets/6-adapters/postgres/README.md"
|
|
207
207
|
]
|
|
208
208
|
);
|
|
209
209
|
}
|
|
@@ -218,7 +218,7 @@ function errorIncludeCapabilitiesNotTrue(target, values) {
|
|
|
218
218
|
[
|
|
219
219
|
"docs/Architecture Overview.md",
|
|
220
220
|
"docs/reference/extensions-glossary.md",
|
|
221
|
-
"packages/targets/
|
|
221
|
+
"packages/3-targets/6-adapters/postgres/README.md"
|
|
222
222
|
]
|
|
223
223
|
);
|
|
224
224
|
}
|
|
@@ -253,7 +253,7 @@ function errorMissingParameter(paramName) {
|
|
|
253
253
|
}
|
|
254
254
|
function errorInvalidProjectionValue(path) {
|
|
255
255
|
throw planInvalid2(
|
|
256
|
-
`Invalid projection value at path ${path.join(".")}: expected
|
|
256
|
+
`Invalid projection value at path ${path.join(".")}: expected ColumnBuilder or nested object`
|
|
257
257
|
);
|
|
258
258
|
}
|
|
259
259
|
function errorIncludeAliasNotFound(alias) {
|
|
@@ -281,7 +281,7 @@ function errorReturningRequiresCapability(target) {
|
|
|
281
281
|
[
|
|
282
282
|
"docs/Architecture Overview.md",
|
|
283
283
|
"docs/reference/extensions-glossary.md",
|
|
284
|
-
"packages/targets/
|
|
284
|
+
"packages/3-targets/6-adapters/postgres/README.md"
|
|
285
285
|
]
|
|
286
286
|
);
|
|
287
287
|
}
|
|
@@ -296,7 +296,7 @@ function errorReturningCapabilityNotTrue(target, value) {
|
|
|
296
296
|
[
|
|
297
297
|
"docs/Architecture Overview.md",
|
|
298
298
|
"docs/reference/extensions-glossary.md",
|
|
299
|
-
"packages/targets/
|
|
299
|
+
"packages/3-targets/6-adapters/postgres/README.md"
|
|
300
300
|
]
|
|
301
301
|
);
|
|
302
302
|
}
|
|
@@ -344,8 +344,9 @@ function checkReturningCapability(contract) {
|
|
|
344
344
|
import { compact } from "@prisma-next/sql-relational-core/ast";
|
|
345
345
|
import {
|
|
346
346
|
collectColumnRefs,
|
|
347
|
+
getColumnInfo,
|
|
348
|
+
getOperationExpr,
|
|
347
349
|
isColumnBuilder,
|
|
348
|
-
isExpressionBuilder,
|
|
349
350
|
isOperationExpr
|
|
350
351
|
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
351
352
|
|
|
@@ -359,44 +360,28 @@ function assertColumnBuilder(col, context) {
|
|
|
359
360
|
}
|
|
360
361
|
|
|
361
362
|
// src/sql/plan.ts
|
|
362
|
-
function collectRefsFromExpressionSource(source, refsColumns) {
|
|
363
|
-
if (isExpressionBuilder(source)) {
|
|
364
|
-
const allRefs = collectColumnRefs(source.expr);
|
|
365
|
-
for (const ref of allRefs) {
|
|
366
|
-
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
367
|
-
table: ref.table,
|
|
368
|
-
column: ref.column
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
} else if (isColumnBuilder(source)) {
|
|
372
|
-
const col = source;
|
|
373
|
-
refsColumns.set(`${col.table}.${col.column}`, {
|
|
374
|
-
table: col.table,
|
|
375
|
-
column: col.column
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
function collectRefsFromExpression(expr, refsColumns) {
|
|
380
|
-
if (isOperationExpr(expr)) {
|
|
381
|
-
const allRefs = collectColumnRefs(expr);
|
|
382
|
-
for (const ref of allRefs) {
|
|
383
|
-
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
384
|
-
table: ref.table,
|
|
385
|
-
column: ref.column
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
} else if (expr.kind === "col") {
|
|
389
|
-
refsColumns.set(`${expr.table}.${expr.column}`, {
|
|
390
|
-
table: expr.table,
|
|
391
|
-
column: expr.column
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
363
|
function buildMeta(args) {
|
|
396
364
|
const refsColumns = /* @__PURE__ */ new Map();
|
|
397
365
|
const refsTables = /* @__PURE__ */ new Set([args.table.name]);
|
|
398
366
|
for (const column of args.projection.columns) {
|
|
399
|
-
|
|
367
|
+
if (!column) {
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
const operationExpr = getOperationExpr(column);
|
|
371
|
+
if (operationExpr) {
|
|
372
|
+
const allRefs = collectColumnRefs(operationExpr);
|
|
373
|
+
for (const ref of allRefs) {
|
|
374
|
+
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
375
|
+
table: ref.table,
|
|
376
|
+
column: ref.column
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
} else {
|
|
380
|
+
refsColumns.set(`${column.table}.${column.column}`, {
|
|
381
|
+
table: column.table,
|
|
382
|
+
column: column.column
|
|
383
|
+
});
|
|
384
|
+
}
|
|
400
385
|
}
|
|
401
386
|
if (args.joins) {
|
|
402
387
|
for (const join of args.joins) {
|
|
@@ -434,21 +419,36 @@ function buildMeta(args) {
|
|
|
434
419
|
});
|
|
435
420
|
}
|
|
436
421
|
if (include.childWhere) {
|
|
437
|
-
|
|
422
|
+
const colInfo = getColumnInfo(include.childWhere.left);
|
|
423
|
+
refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
|
|
424
|
+
table: colInfo.table,
|
|
425
|
+
column: colInfo.column
|
|
426
|
+
});
|
|
438
427
|
const childWhereRight = include.childWhere.right;
|
|
439
|
-
if (isColumnBuilder(childWhereRight)
|
|
440
|
-
|
|
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
|
+
});
|
|
441
434
|
}
|
|
442
435
|
}
|
|
443
436
|
if (include.childOrderBy) {
|
|
444
|
-
|
|
437
|
+
const orderBy = include.childOrderBy;
|
|
438
|
+
if (orderBy.expr) {
|
|
439
|
+
const colInfo = getColumnInfo(orderBy.expr);
|
|
440
|
+
refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
|
|
441
|
+
table: colInfo.table,
|
|
442
|
+
column: colInfo.column
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
if (args.where) {
|
|
449
|
-
const
|
|
450
|
-
if (isOperationExpr(
|
|
451
|
-
const allRefs = collectColumnRefs(
|
|
449
|
+
const whereLeft = args.where.left;
|
|
450
|
+
if (isOperationExpr(whereLeft)) {
|
|
451
|
+
const allRefs = collectColumnRefs(whereLeft);
|
|
452
452
|
for (const ref of allRefs) {
|
|
453
453
|
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
454
454
|
table: ref.table,
|
|
@@ -456,31 +456,50 @@ function buildMeta(args) {
|
|
|
456
456
|
});
|
|
457
457
|
}
|
|
458
458
|
} else {
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
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");
|
|
470
|
+
refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
|
|
471
|
+
table: colBuilder.table,
|
|
472
|
+
column: colBuilder.column
|
|
473
|
+
});
|
|
474
|
+
}
|
|
463
475
|
}
|
|
464
476
|
const whereRight = args.where.right;
|
|
465
|
-
if (isColumnBuilder(whereRight)
|
|
466
|
-
|
|
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
|
+
});
|
|
467
483
|
}
|
|
468
484
|
}
|
|
469
485
|
if (args.orderBy) {
|
|
470
|
-
const
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
486
|
+
const orderBy = args.orderBy;
|
|
487
|
+
const orderByExpr = orderBy.expr;
|
|
488
|
+
if (orderByExpr) {
|
|
489
|
+
if (isOperationExpr(orderByExpr)) {
|
|
490
|
+
const allRefs = collectColumnRefs(orderByExpr);
|
|
491
|
+
for (const ref of allRefs) {
|
|
492
|
+
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
493
|
+
table: ref.table,
|
|
494
|
+
column: ref.column
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
} else {
|
|
498
|
+
refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {
|
|
499
|
+
table: orderByExpr.table,
|
|
500
|
+
column: orderByExpr.column
|
|
477
501
|
});
|
|
478
502
|
}
|
|
479
|
-
} else {
|
|
480
|
-
refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {
|
|
481
|
-
table: orderByExpr.table,
|
|
482
|
-
column: orderByExpr.column
|
|
483
|
-
});
|
|
484
503
|
}
|
|
485
504
|
}
|
|
486
505
|
const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);
|
|
@@ -493,12 +512,9 @@ function buildMeta(args) {
|
|
|
493
512
|
if (!column) {
|
|
494
513
|
errorMissingColumnForAlias(alias, index);
|
|
495
514
|
}
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
const col = column;
|
|
500
|
-
if (!col.table || !col.column) {
|
|
501
|
-
return [alias, `include:${alias}`];
|
|
515
|
+
const operationExpr = getOperationExpr(column);
|
|
516
|
+
if (operationExpr) {
|
|
517
|
+
return [alias, `operation:${operationExpr.method}`];
|
|
502
518
|
}
|
|
503
519
|
return [alias, `${column.table}.${column.column}`];
|
|
504
520
|
})
|
|
@@ -513,8 +529,8 @@ function buildMeta(args) {
|
|
|
513
529
|
if (!column) {
|
|
514
530
|
continue;
|
|
515
531
|
}
|
|
516
|
-
|
|
517
|
-
|
|
532
|
+
const operationExpr = column._operationExpr;
|
|
533
|
+
if (operationExpr) {
|
|
518
534
|
if (operationExpr.returns.kind === "typeId") {
|
|
519
535
|
projectionTypes[alias] = operationExpr.returns.type;
|
|
520
536
|
} else if (operationExpr.returns.kind === "builtin") {
|
|
@@ -539,8 +555,8 @@ function buildMeta(args) {
|
|
|
539
555
|
if (!column) {
|
|
540
556
|
continue;
|
|
541
557
|
}
|
|
542
|
-
|
|
543
|
-
|
|
558
|
+
const operationExpr = column._operationExpr;
|
|
559
|
+
if (operationExpr) {
|
|
544
560
|
if (operationExpr.returns.kind === "typeId") {
|
|
545
561
|
projectionCodecs[alias] = operationExpr.returns.type;
|
|
546
562
|
}
|
|
@@ -577,10 +593,15 @@ function buildMeta(args) {
|
|
|
577
593
|
}
|
|
578
594
|
|
|
579
595
|
// src/sql/predicate-builder.ts
|
|
580
|
-
import { createBinaryExpr, createParamRef } from "@prisma-next/sql-relational-core/ast";
|
|
581
596
|
import {
|
|
597
|
+
createBinaryExpr,
|
|
598
|
+
createColumnRef,
|
|
599
|
+
createParamRef
|
|
600
|
+
} from "@prisma-next/sql-relational-core/ast";
|
|
601
|
+
import {
|
|
602
|
+
getColumnInfo as getColumnInfo2,
|
|
603
|
+
getOperationExpr as getOperationExpr2,
|
|
582
604
|
isColumnBuilder as isColumnBuilder2,
|
|
583
|
-
isExpressionBuilder as isExpressionBuilder2,
|
|
584
605
|
isParamPlaceholder
|
|
585
606
|
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
586
607
|
function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
|
|
@@ -588,13 +609,11 @@ function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
|
|
|
588
609
|
let codecId;
|
|
589
610
|
let rightExpr;
|
|
590
611
|
let paramName;
|
|
591
|
-
const
|
|
592
|
-
if (
|
|
593
|
-
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
if (leftExpr.kind === "col") {
|
|
597
|
-
const { table, column } = leftExpr;
|
|
612
|
+
const operationExpr = getOperationExpr2(where.left);
|
|
613
|
+
if (operationExpr) {
|
|
614
|
+
leftExpr = operationExpr;
|
|
615
|
+
} else if (isColumnBuilder2(where.left)) {
|
|
616
|
+
const { table, column } = getColumnInfo2(where.left);
|
|
598
617
|
const contractTable = contract.storage.tables[table];
|
|
599
618
|
if (!contractTable) {
|
|
600
619
|
errorUnknownTable(table);
|
|
@@ -604,6 +623,9 @@ function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
|
|
|
604
623
|
errorUnknownColumn(column, table);
|
|
605
624
|
}
|
|
606
625
|
codecId = columnMeta.codecId;
|
|
626
|
+
leftExpr = createColumnRef(table, column);
|
|
627
|
+
} else {
|
|
628
|
+
errorFailedToBuildWhereClause();
|
|
607
629
|
}
|
|
608
630
|
if (isParamPlaceholder(where.right)) {
|
|
609
631
|
const placeholder = where.right;
|
|
@@ -613,8 +635,8 @@ function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
|
|
|
613
635
|
}
|
|
614
636
|
const value = paramsMap[paramName];
|
|
615
637
|
const index = values.push(value);
|
|
616
|
-
if (
|
|
617
|
-
const { table, column } =
|
|
638
|
+
if (isColumnBuilder2(where.left)) {
|
|
639
|
+
const { table, column } = getColumnInfo2(where.left);
|
|
618
640
|
const contractTable = contract.storage.tables[table];
|
|
619
641
|
const columnMeta = contractTable?.columns[column];
|
|
620
642
|
if (columnMeta) {
|
|
@@ -629,19 +651,17 @@ function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
|
|
|
629
651
|
}
|
|
630
652
|
}
|
|
631
653
|
rightExpr = createParamRef(index, paramName);
|
|
632
|
-
} else if (isColumnBuilder2(where.right)
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
if (!contractTable) {
|
|
638
|
-
errorUnknownTable(table);
|
|
639
|
-
}
|
|
640
|
-
const columnMeta = contractTable.columns[column];
|
|
641
|
-
if (!columnMeta) {
|
|
642
|
-
errorUnknownColumn(column, table);
|
|
643
|
-
}
|
|
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);
|
|
644
659
|
}
|
|
660
|
+
const columnMeta = contractTable.columns[column];
|
|
661
|
+
if (!columnMeta) {
|
|
662
|
+
errorUnknownColumn(column, table);
|
|
663
|
+
}
|
|
664
|
+
rightExpr = createColumnRef(table, column);
|
|
645
665
|
paramName = "";
|
|
646
666
|
} else {
|
|
647
667
|
errorFailedToBuildWhereClause();
|
|
@@ -715,7 +735,7 @@ var InsertBuilderImpl = class _InsertBuilderImpl {
|
|
|
715
735
|
}
|
|
716
736
|
const returning = this.returningColumns.map((col) => {
|
|
717
737
|
const c = col;
|
|
718
|
-
return
|
|
738
|
+
return createColumnRef2(c.table, c.column);
|
|
719
739
|
});
|
|
720
740
|
const ast = createInsertAst({
|
|
721
741
|
table: createTableRef(this.table.name),
|
|
@@ -846,7 +866,7 @@ var UpdateBuilderImpl = class _UpdateBuilderImpl {
|
|
|
846
866
|
}
|
|
847
867
|
const returning = this.returningColumns.map((col) => {
|
|
848
868
|
const c = col;
|
|
849
|
-
return
|
|
869
|
+
return createColumnRef2(c.table, c.column);
|
|
850
870
|
});
|
|
851
871
|
const ast = createUpdateAst({
|
|
852
872
|
table: createTableRef(this.table.name),
|
|
@@ -950,7 +970,7 @@ var DeleteBuilderImpl = class _DeleteBuilderImpl {
|
|
|
950
970
|
}
|
|
951
971
|
const returning = this.returningColumns.map((col) => {
|
|
952
972
|
const c = col;
|
|
953
|
-
return
|
|
973
|
+
return createColumnRef2(c.table, c.column);
|
|
954
974
|
});
|
|
955
975
|
const ast = createDeleteAst({
|
|
956
976
|
table: createTableRef(this.table.name),
|
|
@@ -992,16 +1012,17 @@ var DeleteBuilderImpl = class _DeleteBuilderImpl {
|
|
|
992
1012
|
|
|
993
1013
|
// src/sql/select-builder.ts
|
|
994
1014
|
import {
|
|
1015
|
+
createColumnRef as createColumnRef5,
|
|
995
1016
|
createJoinOnBuilder,
|
|
996
1017
|
createOrderByItem as createOrderByItem2,
|
|
997
1018
|
createSelectAst,
|
|
998
1019
|
createTableRef as createTableRef4
|
|
999
1020
|
} from "@prisma-next/sql-relational-core/ast";
|
|
1000
|
-
import {
|
|
1021
|
+
import { getOperationExpr as getOperationExpr3 } from "@prisma-next/sql-relational-core/utils/guards";
|
|
1001
1022
|
|
|
1002
1023
|
// src/sql/include-builder.ts
|
|
1003
1024
|
import {
|
|
1004
|
-
createColumnRef as
|
|
1025
|
+
createColumnRef as createColumnRef3,
|
|
1005
1026
|
createJoinOnExpr,
|
|
1006
1027
|
createOrderByItem,
|
|
1007
1028
|
createTableRef as createTableRef2
|
|
@@ -1012,7 +1033,7 @@ import {
|
|
|
1012
1033
|
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
1013
1034
|
|
|
1014
1035
|
// src/sql/projection.ts
|
|
1015
|
-
import {
|
|
1036
|
+
import { isColumnBuilder as isColumnBuilder3 } from "@prisma-next/sql-relational-core/utils/guards";
|
|
1016
1037
|
function generateAlias(path) {
|
|
1017
1038
|
if (path.length === 0) {
|
|
1018
1039
|
errorAliasPathEmpty();
|
|
@@ -1044,7 +1065,7 @@ function flattenProjection(projection, tracker, currentPath = []) {
|
|
|
1044
1065
|
const columns = [];
|
|
1045
1066
|
for (const [key, value] of Object.entries(projection)) {
|
|
1046
1067
|
const path = [...currentPath, key];
|
|
1047
|
-
if (
|
|
1068
|
+
if (isColumnBuilder3(value)) {
|
|
1048
1069
|
const alias = tracker.register(path);
|
|
1049
1070
|
aliases.push(alias);
|
|
1050
1071
|
columns.push(value);
|
|
@@ -1069,14 +1090,8 @@ function buildProjectionState(_table, projection, includes) {
|
|
|
1069
1090
|
errorIncludeAliasNotFound(key);
|
|
1070
1091
|
}
|
|
1071
1092
|
aliases.push(key);
|
|
1072
|
-
columns.push(
|
|
1073
|
-
|
|
1074
|
-
table: matchingInclude.table.name,
|
|
1075
|
-
column: "",
|
|
1076
|
-
columnMeta: { nativeType: "jsonb", codecId: "core/json@1", nullable: true },
|
|
1077
|
-
toExpr: () => ({ kind: "col", table: matchingInclude.table.name, column: "" })
|
|
1078
|
-
});
|
|
1079
|
-
} else if (isExpressionSource(value)) {
|
|
1093
|
+
columns.push(null);
|
|
1094
|
+
} else if (isColumnBuilder3(value)) {
|
|
1080
1095
|
const alias = tracker.register([key]);
|
|
1081
1096
|
aliases.push(alias);
|
|
1082
1097
|
columns.push(value);
|
|
@@ -1206,10 +1221,10 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
|
|
|
1206
1221
|
const expr = (() => {
|
|
1207
1222
|
if (isOperationExpr2(orderExpr)) {
|
|
1208
1223
|
const baseCol = extractBaseColumnRef(orderExpr);
|
|
1209
|
-
return
|
|
1224
|
+
return createColumnRef3(baseCol.table, baseCol.column);
|
|
1210
1225
|
}
|
|
1211
1226
|
const colBuilder = orderExpr;
|
|
1212
|
-
return
|
|
1227
|
+
return createColumnRef3(colBuilder.table, colBuilder.column);
|
|
1213
1228
|
})();
|
|
1214
1229
|
return [createOrderByItem(expr, orderBy.dir)];
|
|
1215
1230
|
})() : void 0;
|
|
@@ -1226,8 +1241,8 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
|
|
|
1226
1241
|
}
|
|
1227
1242
|
const onLeft = include.on.left;
|
|
1228
1243
|
const onRight = include.on.right;
|
|
1229
|
-
const leftCol =
|
|
1230
|
-
const rightCol =
|
|
1244
|
+
const leftCol = createColumnRef3(onLeft.table, onLeft.column);
|
|
1245
|
+
const rightCol = createColumnRef3(onRight.table, onRight.column);
|
|
1231
1246
|
const onExpr = createJoinOnExpr(leftCol, rightCol);
|
|
1232
1247
|
return {
|
|
1233
1248
|
kind: "includeMany",
|
|
@@ -1245,7 +1260,7 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
|
|
|
1245
1260
|
}
|
|
1246
1261
|
return {
|
|
1247
1262
|
alias,
|
|
1248
|
-
expr: column.
|
|
1263
|
+
expr: createColumnRef3(column.table, column.column)
|
|
1249
1264
|
};
|
|
1250
1265
|
})
|
|
1251
1266
|
}
|
|
@@ -1254,7 +1269,7 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
|
|
|
1254
1269
|
|
|
1255
1270
|
// src/sql/join-builder.ts
|
|
1256
1271
|
import {
|
|
1257
|
-
createColumnRef as
|
|
1272
|
+
createColumnRef as createColumnRef4,
|
|
1258
1273
|
createJoin,
|
|
1259
1274
|
createJoinOnExpr as createJoinOnExpr2,
|
|
1260
1275
|
createTableRef as createTableRef3
|
|
@@ -1262,8 +1277,8 @@ import {
|
|
|
1262
1277
|
function buildJoinAst(join) {
|
|
1263
1278
|
const onLeft = join.on.left;
|
|
1264
1279
|
const onRight = join.on.right;
|
|
1265
|
-
const leftCol =
|
|
1266
|
-
const rightCol =
|
|
1280
|
+
const leftCol = createColumnRef4(onLeft.table, onLeft.column);
|
|
1281
|
+
const rightCol = createColumnRef4(onRight.table, onRight.column);
|
|
1267
1282
|
const onExpr = createJoinOnExpr2(leftCol, rightCol);
|
|
1268
1283
|
return createJoin(join.joinType, createTableRef3(join.table.name), onExpr);
|
|
1269
1284
|
}
|
|
@@ -1432,7 +1447,13 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
|
|
|
1432
1447
|
}
|
|
1433
1448
|
const orderByClause = this.state.orderBy ? (() => {
|
|
1434
1449
|
const orderBy = this.state.orderBy;
|
|
1435
|
-
|
|
1450
|
+
const orderExpr = orderBy.expr;
|
|
1451
|
+
const operationExpr = getOperationExpr3(orderExpr);
|
|
1452
|
+
const expr = operationExpr ? operationExpr : (() => {
|
|
1453
|
+
const colBuilder = orderExpr;
|
|
1454
|
+
return createColumnRef5(colBuilder.table, colBuilder.column);
|
|
1455
|
+
})();
|
|
1456
|
+
return [createOrderByItem2(expr, orderBy.dir)];
|
|
1436
1457
|
})() : void 0;
|
|
1437
1458
|
const joins = this.state.joins?.map((join) => buildJoinAst(join));
|
|
1438
1459
|
const includes = this.state.includes?.map(
|
|
@@ -1451,17 +1472,24 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
|
|
|
1451
1472
|
alias,
|
|
1452
1473
|
expr: { kind: "includeRef", alias }
|
|
1453
1474
|
});
|
|
1454
|
-
} else
|
|
1455
|
-
|
|
1456
|
-
alias,
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
}
|
|
1475
|
+
} else {
|
|
1476
|
+
if (!column) {
|
|
1477
|
+
errorMissingColumnForAlias(alias, i);
|
|
1478
|
+
}
|
|
1479
|
+
const operationExpr = column._operationExpr;
|
|
1480
|
+
if (operationExpr) {
|
|
1481
|
+
projectEntries.push({
|
|
1482
|
+
alias,
|
|
1483
|
+
expr: operationExpr
|
|
1484
|
+
});
|
|
1485
|
+
} else {
|
|
1486
|
+
const col = column;
|
|
1487
|
+
assertColumnBuilder(col, "projection column");
|
|
1488
|
+
projectEntries.push({
|
|
1489
|
+
alias,
|
|
1490
|
+
expr: createColumnRef5(col.table, col.column)
|
|
1491
|
+
});
|
|
1492
|
+
}
|
|
1465
1493
|
}
|
|
1466
1494
|
}
|
|
1467
1495
|
const ast = createSelectAst({
|
|
@@ -1545,4 +1573,4 @@ export {
|
|
|
1545
1573
|
createJoinOnBuilder2 as createJoinOnBuilder,
|
|
1546
1574
|
sql
|
|
1547
1575
|
};
|
|
1548
|
-
//# sourceMappingURL=chunk-
|
|
1576
|
+
//# sourceMappingURL=chunk-HKDFH7HG.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/3-targets/6-adapters/postgres/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/3-targets/6-adapters/postgres/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/3-targets/6-adapters/postgres/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/3-targets/6-adapters/postgres/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"]}
|
package/dist/exports/sql.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RawTemplateOptions, AnyColumnBuilder, InferReturningRow, BuildOptions, BinaryBuilder, JoinOnPredicate,
|
|
1
|
+
import { RawTemplateOptions, AnyColumnBuilder, InferReturningRow, BuildOptions, BinaryBuilder, JoinOnPredicate, AnyBinaryBuilder, AnyOrderBuilder, NestedProjection, InferNestedProjectionRow, SqlBuilderOptions, JoinOnBuilder, RawFactory, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';
|
|
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';
|
|
@@ -35,7 +35,7 @@ interface DeleteBuilder<TContract extends SqlContract<SqlStorage> = SqlContract<
|
|
|
35
35
|
|
|
36
36
|
interface ProjectionState {
|
|
37
37
|
readonly aliases: string[];
|
|
38
|
-
readonly columns:
|
|
38
|
+
readonly columns: (AnyColumnBuilder | null)[];
|
|
39
39
|
}
|
|
40
40
|
interface JoinState {
|
|
41
41
|
readonly joinType: 'inner' | 'left' | 'right' | 'full';
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-lane",
|
|
3
|
-
"version": "0.1.0-pr.
|
|
3
|
+
"version": "0.1.0-pr.50.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "Relational DSL and raw SQL helpers for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@prisma-next/contract": "0.1.0-pr.
|
|
9
|
-
"@prisma-next/plan": "0.1.0-pr.
|
|
10
|
-
"@prisma-next/sql-contract": "0.1.0-pr.
|
|
11
|
-
"@prisma-next/sql-relational-core": "0.1.0-pr.
|
|
8
|
+
"@prisma-next/contract": "0.1.0-pr.50.2",
|
|
9
|
+
"@prisma-next/plan": "0.1.0-pr.50.2",
|
|
10
|
+
"@prisma-next/sql-contract": "0.1.0-pr.50.2",
|
|
11
|
+
"@prisma-next/sql-relational-core": "0.1.0-pr.50.2"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@types/pg": "^8.11.10",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"typescript": "^5.9.3",
|
|
18
18
|
"vite-tsconfig-paths": "^5.1.4",
|
|
19
19
|
"vitest": "^2.1.1",
|
|
20
|
-
"@prisma-next/sql-contract-ts": "0.1.0-pr.
|
|
21
|
-
"@prisma-next/sql-runtime": "0.1.0-pr.
|
|
20
|
+
"@prisma-next/sql-contract-ts": "0.1.0-pr.50.2",
|
|
21
|
+
"@prisma-next/sql-runtime": "0.1.0-pr.50.2",
|
|
22
22
|
"@prisma-next/test-utils": "0.0.1"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
@@ -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/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 ExpressionSource (ColumnBuilder or ExpressionBuilder) 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 { Expression } from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyExpressionSource } from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n isColumnBuilder,\n isExpressionBuilder,\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\n/**\n * Extracts column references from an ExpressionSource (ColumnBuilder or ExpressionBuilder).\n */\nfunction collectRefsFromExpressionSource(\n source: AnyExpressionSource,\n refsColumns: Map<string, { table: string; column: string }>,\n): void {\n if (isExpressionBuilder(source)) {\n // ExpressionBuilder has an OperationExpr - collect all column refs\n const allRefs = collectColumnRefs(source.expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else if (isColumnBuilder(source)) {\n // ColumnBuilder - use table and column directly\n const col = source as unknown as { table: string; column: string };\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n}\n\n/**\n * Extracts column references from an Expression (AST node).\n */\nfunction collectRefsFromExpression(\n expr: Expression,\n refsColumns: Map<string, { table: string; column: string }>,\n): void {\n if (isOperationExpr(expr)) {\n const allRefs = collectColumnRefs(expr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else if (expr.kind === 'col') {\n refsColumns.set(`${expr.table}.${expr.column}`, {\n table: expr.table,\n column: expr.column,\n });\n }\n}\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n collectRefsFromExpressionSource(column, refsColumns);\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 // childWhere.left is Expression (already converted at builder creation time)\n collectRefsFromExpression(include.childWhere.left, refsColumns);\n // Handle right side of child WHERE clause - can be ParamPlaceholder or ExpressionSource\n const childWhereRight = include.childWhere.right;\n if (isColumnBuilder(childWhereRight) || isExpressionBuilder(childWhereRight)) {\n collectRefsFromExpressionSource(childWhereRight, refsColumns);\n }\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n // childOrderBy.expr is Expression (already converted at builder creation time)\n collectRefsFromExpression(include.childOrderBy.expr, refsColumns);\n }\n }\n }\n\n if (args.where) {\n // args.where.left is Expression (already converted at builder creation time)\n const leftExpr: Expression = args.where.left;\n if (isOperationExpr(leftExpr)) {\n const allRefs = collectColumnRefs(leftExpr);\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 // leftExpr is ColumnRef\n refsColumns.set(`${leftExpr.table}.${leftExpr.column}`, {\n table: leftExpr.table,\n column: leftExpr.column,\n });\n }\n\n // Handle right side of WHERE clause - can be ParamPlaceholder or AnyExpressionSource\n const whereRight = args.where.right;\n if (isColumnBuilder(whereRight) || isExpressionBuilder(whereRight)) {\n collectRefsFromExpressionSource(whereRight, refsColumns);\n }\n }\n\n if (args.orderBy) {\n // args.orderBy.expr is Expression (already converted at builder creation time)\n const orderByExpr: Expression = args.orderBy.expr;\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 ColumnRef\n refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {\n table: orderByExpr.table,\n column: orderByExpr.column,\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 // Check if column is an ExpressionBuilder (operation result)\n if (isExpressionBuilder(column)) {\n return [alias, `operation:${column.expr.method}`];\n }\n // column is ColumnBuilder\n const col = column as unknown as { table?: string; column?: string };\n if (!col.table || !col.column) {\n // This is a placeholder column for an include - skip it\n return [alias, `include:${alias}`];\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 if (isExpressionBuilder(column)) {\n const operationExpr = column.expr;\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 // column is ColumnBuilder\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 if (isExpressionBuilder(column)) {\n const operationExpr = column.expr;\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 // column is ColumnBuilder\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 { BinaryExpr, Expression, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { createBinaryExpr, createParamRef } from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n isColumnBuilder,\n isExpressionBuilder,\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: Expression;\n let codecId: string | undefined;\n let rightExpr: Expression | ParamRef;\n let paramName: string;\n\n // Validate where.left is a valid Expression (col, operation, literal, param)\n const validExpressionKinds = ['col', 'operation', 'literal', 'param'];\n if (\n !where.left ||\n typeof where.left !== 'object' ||\n !validExpressionKinds.includes((where.left as { kind?: string }).kind ?? '')\n ) {\n errorFailedToBuildWhereClause();\n }\n\n // where.left is an Expression (already converted at builder creation time)\n // It could be a ColumnRef or OperationExpr\n leftExpr = where.left;\n\n // If the left expression is a column reference, extract codecId for param descriptors\n if (leftExpr.kind === 'col') {\n const { table, column } = leftExpr;\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 }\n\n // Handle where.right - can be ParamPlaceholder or ExpressionSource\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 if left is a column\n if (leftExpr.kind === 'col') {\n const { table, column } = leftExpr;\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) || isExpressionBuilder(where.right)) {\n // Handle ExpressionSource (ColumnBuilder or ExpressionBuilder) on the right\n rightExpr = where.right.toExpr();\n\n // Validate column exists in contract if it's a ColumnRef\n if (rightExpr.kind === 'col') {\n const { table, column } = rightExpr;\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\n // Use a placeholder paramName for expression references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ExpressionSource - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n 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 { isExpressionBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { ProjectionInput } from '../types/internal';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\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 // orderBy.expr is already an Expression (ColumnRef or OperationExpr)\n return [createOrderByItem(orderBy.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 if (column && isExpressionBuilder(column)) {\n // This is an ExpressionBuilder (operation result) - use its expr\n projectEntries.push({\n alias,\n expr: column.expr,\n });\n } else if (column) {\n // This is a regular ColumnBuilder - use toExpr() to get ColumnRef\n const columnRef = column.toExpr();\n projectEntries.push({\n alias,\n expr: columnRef,\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: column.toExpr(),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyExpressionSource, NestedProjection } from '@prisma-next/sql-relational-core/types';\nimport { isExpressionSource } 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: AnyExpressionSource[] } {\n const aliases: string[] = [];\n const columns: AnyExpressionSource[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isExpressionSource(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: AnyExpressionSource[] = [];\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 object\n // The actual handling happens in AST building where we create includeRef\n aliases.push(key);\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { nativeType: 'jsonb', codecId: 'core/json@1', nullable: true },\n toExpr: () => ({ kind: 'col', table: matchingInclude.table.name, column: '' }),\n } as AnyExpressionSource);\n } else if (isExpressionSource(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","createParamRef","planInvalid","planInvalid","planInvalid","isColumnBuilder","isExpressionBuilder","isColumnBuilder","isExpressionBuilder","createParamRef","createOrderByItem","createTableRef","isExpressionBuilder","createColumnRef","createTableRef","isOperationExpr","isOperationExpr","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","createOrderByItem","isExpressionBuilder","createTableRef"]}
|