@prisma-next/sql-orm-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.
|
@@ -5,8 +5,10 @@ import { schema as schema4 } from "@prisma-next/sql-relational-core/schema";
|
|
|
5
5
|
// src/selection/predicates.ts
|
|
6
6
|
import { augmentDescriptorWithColumnMeta } from "@prisma-next/sql-relational-core/plan";
|
|
7
7
|
import {
|
|
8
|
+
getColumnInfo,
|
|
9
|
+
getColumnMeta,
|
|
10
|
+
getOperationExpr,
|
|
8
11
|
isColumnBuilder,
|
|
9
|
-
isExpressionBuilder,
|
|
10
12
|
isParamPlaceholder
|
|
11
13
|
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
12
14
|
|
|
@@ -124,9 +126,11 @@ function buildWhereExpr(where, contract, paramsMap, descriptors, values) {
|
|
|
124
126
|
let codecId;
|
|
125
127
|
let rightExpr;
|
|
126
128
|
let paramName;
|
|
127
|
-
|
|
128
|
-
if (
|
|
129
|
-
|
|
129
|
+
const operationExpr = getOperationExpr(where.left);
|
|
130
|
+
if (operationExpr) {
|
|
131
|
+
leftExpr = operationExpr;
|
|
132
|
+
} else if (isColumnBuilder(where.left)) {
|
|
133
|
+
const { table, column } = getColumnInfo(where.left);
|
|
130
134
|
const contractTable = contract.storage.tables[table];
|
|
131
135
|
if (!contractTable) {
|
|
132
136
|
errorUnknownTable(table);
|
|
@@ -135,6 +139,9 @@ function buildWhereExpr(where, contract, paramsMap, descriptors, values) {
|
|
|
135
139
|
if (columnMeta) {
|
|
136
140
|
codecId = columnMeta.codecId;
|
|
137
141
|
}
|
|
142
|
+
leftExpr = createColumnRef(table, column);
|
|
143
|
+
} else {
|
|
144
|
+
errorFailedToBuildWhereClause();
|
|
138
145
|
}
|
|
139
146
|
if (isParamPlaceholder(where.right)) {
|
|
140
147
|
const placeholder = where.right;
|
|
@@ -144,21 +151,27 @@ function buildWhereExpr(where, contract, paramsMap, descriptors, values) {
|
|
|
144
151
|
}
|
|
145
152
|
const value = paramsMap[paramName];
|
|
146
153
|
const index = values.push(value);
|
|
147
|
-
if (
|
|
148
|
-
const { table, column } =
|
|
154
|
+
if (isColumnBuilder(where.left)) {
|
|
155
|
+
const { table, column } = getColumnInfo(where.left);
|
|
149
156
|
const contractTable = contract.storage.tables[table];
|
|
150
157
|
const columnMeta = contractTable?.columns[column];
|
|
158
|
+
const builderColumnMeta = getColumnMeta(where.left);
|
|
151
159
|
descriptors.push({
|
|
152
160
|
name: paramName,
|
|
153
161
|
source: "dsl",
|
|
154
162
|
refs: { table, column },
|
|
155
|
-
...
|
|
163
|
+
...typeof builderColumnMeta?.nullable === "boolean" ? { nullable: builderColumnMeta.nullable } : {}
|
|
156
164
|
});
|
|
157
165
|
augmentDescriptorWithColumnMeta(descriptors, columnMeta);
|
|
158
166
|
}
|
|
159
167
|
rightExpr = createParamRef(index, paramName);
|
|
160
|
-
} else if (isColumnBuilder(where.right)
|
|
161
|
-
|
|
168
|
+
} else if (isColumnBuilder(where.right)) {
|
|
169
|
+
const { table, column } = getColumnInfo(where.right);
|
|
170
|
+
const contractTable = contract.storage.tables[table];
|
|
171
|
+
if (!contractTable) {
|
|
172
|
+
errorUnknownTable(table);
|
|
173
|
+
}
|
|
174
|
+
rightExpr = createColumnRef(table, column);
|
|
162
175
|
paramName = "";
|
|
163
176
|
} else {
|
|
164
177
|
errorFailedToBuildWhereClause();
|
|
@@ -613,53 +626,32 @@ import { planInvalid as planInvalid4 } from "@prisma-next/plan";
|
|
|
613
626
|
import { compact } from "@prisma-next/sql-relational-core/ast";
|
|
614
627
|
import {
|
|
615
628
|
collectColumnRefs,
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
isExpressionBuilder as isExpressionBuilder2,
|
|
629
|
+
getColumnInfo as getColumnInfo2,
|
|
630
|
+
getColumnMeta as getColumnMeta2,
|
|
619
631
|
isOperationExpr
|
|
620
632
|
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
621
|
-
function
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
633
|
+
function buildMeta(args) {
|
|
634
|
+
const refsColumns = /* @__PURE__ */ new Map();
|
|
635
|
+
const refsTables = /* @__PURE__ */ new Set([args.table.name]);
|
|
636
|
+
for (const column of args.projection.columns) {
|
|
637
|
+
const operationExpr = column._operationExpr;
|
|
638
|
+
if (operationExpr) {
|
|
639
|
+
const allRefs = collectColumnRefs(operationExpr);
|
|
640
|
+
for (const ref of allRefs) {
|
|
626
641
|
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
627
642
|
table: ref.table,
|
|
628
643
|
column: ref.column
|
|
629
644
|
});
|
|
630
645
|
}
|
|
646
|
+
} else {
|
|
647
|
+
const col = column;
|
|
648
|
+
if (col.table && col.column) {
|
|
649
|
+
refsColumns.set(`${col.table}.${col.column}`, {
|
|
650
|
+
table: col.table,
|
|
651
|
+
column: col.column
|
|
652
|
+
});
|
|
653
|
+
}
|
|
631
654
|
}
|
|
632
|
-
} else if (isColumnBuilder2(source)) {
|
|
633
|
-
const col = source;
|
|
634
|
-
if (col.table && col.column) {
|
|
635
|
-
refsColumns.set(`${col.table}.${col.column}`, {
|
|
636
|
-
table: col.table,
|
|
637
|
-
column: col.column
|
|
638
|
-
});
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
function collectRefsFromExpression(expr, refsColumns) {
|
|
643
|
-
if (isOperationExpr(expr)) {
|
|
644
|
-
const allRefs = collectColumnRefs(expr);
|
|
645
|
-
for (const ref of allRefs) {
|
|
646
|
-
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
647
|
-
table: ref.table,
|
|
648
|
-
column: ref.column
|
|
649
|
-
});
|
|
650
|
-
}
|
|
651
|
-
} else if (expr.kind === "col") {
|
|
652
|
-
refsColumns.set(`${expr.table}.${expr.column}`, {
|
|
653
|
-
table: expr.table,
|
|
654
|
-
column: expr.column
|
|
655
|
-
});
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
function buildMeta(args) {
|
|
659
|
-
const refsColumns = /* @__PURE__ */ new Map();
|
|
660
|
-
const refsTables = /* @__PURE__ */ new Set([args.table.name]);
|
|
661
|
-
for (const column of args.projection.columns) {
|
|
662
|
-
collectRefsFromExpressionSource(column, refsColumns);
|
|
663
655
|
}
|
|
664
656
|
if (args.includes) {
|
|
665
657
|
for (const include of args.includes) {
|
|
@@ -686,17 +678,29 @@ function buildMeta(args) {
|
|
|
686
678
|
}
|
|
687
679
|
}
|
|
688
680
|
if (include.childWhere) {
|
|
689
|
-
|
|
681
|
+
const colInfo = getColumnInfo2(include.childWhere.left);
|
|
682
|
+
refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
|
|
683
|
+
table: colInfo.table,
|
|
684
|
+
column: colInfo.column
|
|
685
|
+
});
|
|
690
686
|
}
|
|
691
687
|
if (include.childOrderBy) {
|
|
692
|
-
|
|
688
|
+
const orderBy = include.childOrderBy;
|
|
689
|
+
if (orderBy.expr) {
|
|
690
|
+
const colInfo = getColumnInfo2(orderBy.expr);
|
|
691
|
+
refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
|
|
692
|
+
table: colInfo.table,
|
|
693
|
+
column: colInfo.column
|
|
694
|
+
});
|
|
695
|
+
}
|
|
693
696
|
}
|
|
694
697
|
}
|
|
695
698
|
}
|
|
696
699
|
if (args.where) {
|
|
697
|
-
const
|
|
698
|
-
|
|
699
|
-
|
|
700
|
+
const whereLeft = args.where.left;
|
|
701
|
+
const operationExpr = whereLeft._operationExpr;
|
|
702
|
+
if (operationExpr) {
|
|
703
|
+
const allRefs = collectColumnRefs(operationExpr);
|
|
700
704
|
for (const ref of allRefs) {
|
|
701
705
|
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
702
706
|
table: ref.table,
|
|
@@ -704,27 +708,36 @@ function buildMeta(args) {
|
|
|
704
708
|
});
|
|
705
709
|
}
|
|
706
710
|
} else {
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
column
|
|
710
|
-
|
|
711
|
+
const colBuilder = whereLeft;
|
|
712
|
+
if (colBuilder.table && colBuilder.column) {
|
|
713
|
+
refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
|
|
714
|
+
table: colBuilder.table,
|
|
715
|
+
column: colBuilder.column
|
|
716
|
+
});
|
|
717
|
+
}
|
|
711
718
|
}
|
|
712
719
|
}
|
|
713
720
|
if (args.orderBy) {
|
|
714
|
-
const
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
721
|
+
const orderBy = args.orderBy;
|
|
722
|
+
const orderByExpr = orderBy.expr;
|
|
723
|
+
if (orderByExpr) {
|
|
724
|
+
if (isOperationExpr(orderByExpr)) {
|
|
725
|
+
const allRefs = collectColumnRefs(orderByExpr);
|
|
726
|
+
for (const ref of allRefs) {
|
|
727
|
+
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
728
|
+
table: ref.table,
|
|
729
|
+
column: ref.column
|
|
730
|
+
});
|
|
731
|
+
}
|
|
732
|
+
} else {
|
|
733
|
+
const colBuilder = orderByExpr;
|
|
734
|
+
if (colBuilder.table && colBuilder.column) {
|
|
735
|
+
refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
|
|
736
|
+
table: colBuilder.table,
|
|
737
|
+
column: colBuilder.column
|
|
738
|
+
});
|
|
739
|
+
}
|
|
722
740
|
}
|
|
723
|
-
} else {
|
|
724
|
-
refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {
|
|
725
|
-
table: orderByExpr.table,
|
|
726
|
-
column: orderByExpr.column
|
|
727
|
-
});
|
|
728
741
|
}
|
|
729
742
|
}
|
|
730
743
|
const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);
|
|
@@ -737,13 +750,14 @@ function buildMeta(args) {
|
|
|
737
750
|
if (!column) {
|
|
738
751
|
throw planInvalid4(`Missing column for alias ${alias} at index ${index}`);
|
|
739
752
|
}
|
|
740
|
-
if (isExpressionBuilder2(column)) {
|
|
741
|
-
return [alias, `operation:${column.expr.method}`];
|
|
742
|
-
}
|
|
743
753
|
const col = column;
|
|
744
754
|
if (!col.table || !col.column) {
|
|
745
755
|
return [alias, `include:${alias}`];
|
|
746
756
|
}
|
|
757
|
+
const operationExpr = col._operationExpr;
|
|
758
|
+
if (operationExpr) {
|
|
759
|
+
return [alias, `operation:${operationExpr.method}`];
|
|
760
|
+
}
|
|
747
761
|
return [alias, `${col.table}.${col.column}`];
|
|
748
762
|
})
|
|
749
763
|
);
|
|
@@ -757,15 +771,15 @@ function buildMeta(args) {
|
|
|
757
771
|
if (!col) {
|
|
758
772
|
continue;
|
|
759
773
|
}
|
|
760
|
-
|
|
761
|
-
|
|
774
|
+
const operationExpr = col._operationExpr;
|
|
775
|
+
if (operationExpr) {
|
|
762
776
|
if (operationExpr.returns.kind === "typeId") {
|
|
763
777
|
projectionTypes[alias] = operationExpr.returns.type;
|
|
764
778
|
} else if (operationExpr.returns.kind === "builtin") {
|
|
765
779
|
projectionTypes[alias] = operationExpr.returns.type;
|
|
766
780
|
}
|
|
767
781
|
} else {
|
|
768
|
-
const columnMeta =
|
|
782
|
+
const columnMeta = getColumnMeta2(col);
|
|
769
783
|
const codecId = columnMeta?.codecId;
|
|
770
784
|
if (codecId) {
|
|
771
785
|
projectionTypes[alias] = codecId;
|
|
@@ -782,13 +796,13 @@ function buildMeta(args) {
|
|
|
782
796
|
if (!column) {
|
|
783
797
|
continue;
|
|
784
798
|
}
|
|
785
|
-
|
|
786
|
-
|
|
799
|
+
const operationExpr = column._operationExpr;
|
|
800
|
+
if (operationExpr) {
|
|
787
801
|
if (operationExpr.returns.kind === "typeId") {
|
|
788
802
|
projectionCodecs[alias] = operationExpr.returns.type;
|
|
789
803
|
}
|
|
790
804
|
} else {
|
|
791
|
-
const columnMeta =
|
|
805
|
+
const columnMeta = getColumnMeta2(column);
|
|
792
806
|
const codecId = columnMeta?.codecId;
|
|
793
807
|
if (codecId) {
|
|
794
808
|
projectionCodecs[alias] = codecId;
|
|
@@ -821,7 +835,6 @@ function buildMeta(args) {
|
|
|
821
835
|
// src/relations/include-plan.ts
|
|
822
836
|
import { compact as compact2 } from "@prisma-next/sql-relational-core/ast";
|
|
823
837
|
import { schema as schema3 } from "@prisma-next/sql-relational-core/schema";
|
|
824
|
-
import { isExpressionBuilder as isExpressionBuilder4 } from "@prisma-next/sql-relational-core/utils/guards";
|
|
825
838
|
|
|
826
839
|
// src/orm/capabilities.ts
|
|
827
840
|
function checkIncludeCapabilities(contract) {
|
|
@@ -878,10 +891,7 @@ function buildChildOrderByClause(orderBy) {
|
|
|
878
891
|
}
|
|
879
892
|
|
|
880
893
|
// src/selection/projection.ts
|
|
881
|
-
import {
|
|
882
|
-
isColumnBuilder as isColumnBuilder3,
|
|
883
|
-
isExpressionBuilder as isExpressionBuilder3
|
|
884
|
-
} from "@prisma-next/sql-relational-core/utils/guards";
|
|
894
|
+
import { isColumnBuilder as isColumnBuilder2 } from "@prisma-next/sql-relational-core/utils/guards";
|
|
885
895
|
function generateAlias(path) {
|
|
886
896
|
if (path.length === 0) {
|
|
887
897
|
errorAliasPathEmpty();
|
|
@@ -913,7 +923,7 @@ function flattenProjection(projection, tracker, currentPath = []) {
|
|
|
913
923
|
const columns = [];
|
|
914
924
|
for (const [key, value] of Object.entries(projection)) {
|
|
915
925
|
const path = [...currentPath, key];
|
|
916
|
-
if (
|
|
926
|
+
if (isColumnBuilder2(value)) {
|
|
917
927
|
const alias = tracker.register(path);
|
|
918
928
|
aliases.push(alias);
|
|
919
929
|
columns.push(value);
|
|
@@ -946,12 +956,9 @@ function buildProjectionState(_table, projection, includes) {
|
|
|
946
956
|
nativeType: "jsonb",
|
|
947
957
|
codecId: "core/json@1",
|
|
948
958
|
nullable: true
|
|
949
|
-
},
|
|
950
|
-
toExpr() {
|
|
951
|
-
return { kind: "col", table: matchingInclude.table.name, column: "" };
|
|
952
959
|
}
|
|
953
960
|
});
|
|
954
|
-
} else if (
|
|
961
|
+
} else if (isColumnBuilder2(value)) {
|
|
955
962
|
const alias = tracker.register([key]);
|
|
956
963
|
aliases.push(alias);
|
|
957
964
|
columns.push(value);
|
|
@@ -970,7 +977,17 @@ function buildProjectionState(_table, projection, includes) {
|
|
|
970
977
|
}
|
|
971
978
|
|
|
972
979
|
// src/relations/include-plan.ts
|
|
973
|
-
function buildIncludeAsts(
|
|
980
|
+
function buildIncludeAsts(input) {
|
|
981
|
+
const {
|
|
982
|
+
includes,
|
|
983
|
+
contract,
|
|
984
|
+
context,
|
|
985
|
+
modelName,
|
|
986
|
+
paramsMap,
|
|
987
|
+
paramDescriptors,
|
|
988
|
+
paramValues,
|
|
989
|
+
paramCodecs
|
|
990
|
+
} = input;
|
|
974
991
|
const includesAst = [];
|
|
975
992
|
const includesForMeta = [];
|
|
976
993
|
for (const includeState of includes) {
|
|
@@ -1052,10 +1069,12 @@ function buildIncludeAsts(includes, contract, context, modelName, paramsMap, par
|
|
|
1052
1069
|
if (!column) {
|
|
1053
1070
|
errorMissingColumn(alias, i);
|
|
1054
1071
|
}
|
|
1055
|
-
|
|
1056
|
-
|
|
1072
|
+
const operationExpr = column._operationExpr;
|
|
1073
|
+
if (operationExpr) {
|
|
1074
|
+
childProjectionItems.push({ alias, expr: operationExpr });
|
|
1057
1075
|
} else {
|
|
1058
|
-
|
|
1076
|
+
const col = column;
|
|
1077
|
+
childProjectionItems.push({ alias, expr: createColumnRef(col.table, col.column) });
|
|
1059
1078
|
}
|
|
1060
1079
|
}
|
|
1061
1080
|
const includeAst = compact2({
|
|
@@ -1173,7 +1192,6 @@ function combineWhereClauses(mainWhere, existsExprs) {
|
|
|
1173
1192
|
}
|
|
1174
1193
|
|
|
1175
1194
|
// src/selection/select-builder.ts
|
|
1176
|
-
import { isExpressionBuilder as isExpressionBuilder5 } from "@prisma-next/sql-relational-core/utils/guards";
|
|
1177
1195
|
function buildProjectionItems(projectionState, includesForMeta) {
|
|
1178
1196
|
const projectEntries = [];
|
|
1179
1197
|
for (let i = 0; i < projectionState.aliases.length; i++) {
|
|
@@ -1191,20 +1209,25 @@ function buildProjectionItems(projectionState, includesForMeta) {
|
|
|
1191
1209
|
alias,
|
|
1192
1210
|
expr: { kind: "includeRef", alias }
|
|
1193
1211
|
});
|
|
1194
|
-
} else if (isExpressionBuilder5(column)) {
|
|
1195
|
-
projectEntries.push({
|
|
1196
|
-
alias,
|
|
1197
|
-
expr: column.expr
|
|
1198
|
-
});
|
|
1199
1212
|
} else {
|
|
1200
|
-
const
|
|
1201
|
-
if (
|
|
1202
|
-
|
|
1213
|
+
const operationExpr = column._operationExpr;
|
|
1214
|
+
if (operationExpr) {
|
|
1215
|
+
projectEntries.push({
|
|
1216
|
+
alias,
|
|
1217
|
+
expr: operationExpr
|
|
1218
|
+
});
|
|
1219
|
+
} else {
|
|
1220
|
+
const col = column;
|
|
1221
|
+
const tableName = col.table;
|
|
1222
|
+
const columnName = col.column;
|
|
1223
|
+
if (!tableName || !columnName) {
|
|
1224
|
+
errorInvalidColumn(alias, i);
|
|
1225
|
+
}
|
|
1226
|
+
projectEntries.push({
|
|
1227
|
+
alias,
|
|
1228
|
+
expr: createColumnRef(tableName, columnName)
|
|
1229
|
+
});
|
|
1203
1230
|
}
|
|
1204
|
-
projectEntries.push({
|
|
1205
|
-
alias,
|
|
1206
|
-
expr
|
|
1207
|
-
});
|
|
1208
1231
|
}
|
|
1209
1232
|
}
|
|
1210
1233
|
return projectEntries;
|
|
@@ -1548,16 +1571,16 @@ var OrmModelBuilderImpl = class _OrmModelBuilderImpl {
|
|
|
1548
1571
|
}
|
|
1549
1572
|
return defaultProjection;
|
|
1550
1573
|
})();
|
|
1551
|
-
const { includesAst, includesForMeta } = buildIncludeAsts(
|
|
1552
|
-
this.includes,
|
|
1553
|
-
this.contract,
|
|
1554
|
-
this.context,
|
|
1555
|
-
this.modelName,
|
|
1574
|
+
const { includesAst, includesForMeta } = buildIncludeAsts({
|
|
1575
|
+
includes: this.includes,
|
|
1576
|
+
contract: this.contract,
|
|
1577
|
+
context: this.context,
|
|
1578
|
+
modelName: this.modelName,
|
|
1556
1579
|
paramsMap,
|
|
1557
1580
|
paramDescriptors,
|
|
1558
1581
|
paramValues,
|
|
1559
1582
|
paramCodecs
|
|
1560
|
-
);
|
|
1583
|
+
});
|
|
1561
1584
|
const projectionState = buildProjectionState(
|
|
1562
1585
|
this.table,
|
|
1563
1586
|
projectionInput,
|
|
@@ -1710,4 +1733,4 @@ export {
|
|
|
1710
1733
|
OrmModelBuilderImpl,
|
|
1711
1734
|
orm
|
|
1712
1735
|
};
|
|
1713
|
-
//# sourceMappingURL=chunk-
|
|
1736
|
+
//# sourceMappingURL=chunk-3DNKIXXB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/orm/builder.ts","../src/selection/predicates.ts","../src/utils/ast.ts","../src/utils/errors.ts","../src/mutations/delete-builder.ts","../src/mutations/insert-builder.ts","../src/utils/param-descriptor.ts","../src/mutations/update-builder.ts","../src/orm-include-child.ts","../src/orm-relation-filter.ts","../src/plan/plan-assembly.ts","../src/relations/include-plan.ts","../src/orm/capabilities.ts","../src/selection/join.ts","../src/selection/ordering.ts","../src/selection/projection.ts","../src/selection/select-builder.ts","../src/orm/context.ts","../src/orm.ts"],"sourcesContent":["import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SelectAst, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { buildDeletePlan } from '../mutations/delete-builder';\nimport { buildInsertPlan } from '../mutations/insert-builder';\nimport { buildUpdatePlan } from '../mutations/update-builder';\nimport type { OrmIncludeChildBuilder } from '../orm-include-child';\nimport { OrmIncludeChildBuilderImpl } from '../orm-include-child';\nimport { OrmRelationFilterBuilderImpl } from '../orm-relation-filter';\nimport type {\n IncludeAccumulator,\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmIncludeAccessor,\n OrmModelBuilder,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from '../orm-types';\nimport { buildMeta, type MetaBuildArgs } from '../plan/plan-assembly';\nimport {\n buildExistsSubqueries,\n buildIncludeAsts,\n combineWhereClauses,\n} from '../relations/include-plan';\nimport { buildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { buildProjectionState, type ProjectionInput } from '../selection/projection';\nimport { buildProjectionItems, buildSelectAst } from '../selection/select-builder';\nimport { createTableRef } from '../utils/ast';\nimport { errorModelNotFound, errorTableNotFound, errorUnknownTable } from '../utils/errors';\nimport { createOrmContext } from './context';\nimport type { OrmIncludeState, RelationFilter } from './state';\n\nexport class OrmModelBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n ModelName extends string = string,\n Includes extends Record<string, unknown> = Record<string, never>,\n Row = unknown,\n> implements OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly modelName: ModelName;\n private table: TableRef;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private relationFilters: RelationFilter[] = [];\n private includes: OrmIncludeState[] = [];\n private orderByExpr: AnyOrderBuilder | undefined = undefined;\n private limitValue: number | undefined = undefined;\n private offsetValue: number | undefined = undefined;\n private projection: Record<string, AnyColumnBuilder | boolean | NestedProjection> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, modelName: ModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.modelName = modelName;\n\n const tableName = this.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n\n const schemaHandle = schema(options.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n this.table = table;\n }\n\n get where(): OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row> {\n const whereFn = (\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> => {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = fn(this._getModelAccessor());\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n };\n\n // Add related property using Proxy\n const related = this._createRelatedProxy();\n\n return Object.assign(whereFn, { related }) as OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >;\n }\n\n get include(): OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row> {\n return this._createIncludeProxy();\n }\n\n private _createIncludeProxy(): OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n > {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n\n return new Proxy({} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n\n const relationName = prop as keyof typeof modelRelations & string;\n\n const includeFn = (<ChildRow>(\n child: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName, ChildRow>,\n ) => {\n return self._applyInclude<typeof relationName, ChildRow>(\n relationName,\n childModelName,\n child,\n relationDef,\n );\n }) as OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >[typeof relationName];\n\n return includeFn;\n },\n });\n }\n\n private _applyInclude<RelationName extends string, ChildRow>(\n relationName: RelationName,\n childModelName: string,\n childBuilderFn: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, string, ChildRow>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n > {\n // Get child table\n const childTableName = this.contract.mappings.modelToTable?.[childModelName];\n if (!childTableName) {\n errorModelNotFound(childModelName);\n }\n const childTable: TableRef = { kind: 'table', name: childTableName };\n\n // Create child builder and apply callback\n const childBuilder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const builtChild = childBuilderFn(\n childBuilder as OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n );\n const childState = (\n builtChild as OrmIncludeChildBuilderImpl<TContract, CodecTypes, string, ChildRow>\n ).getState();\n\n // Store the include\n // Note: Child projection validation happens in findMany() when compiling to includeMany\n const includeState: OrmIncludeState = {\n relationName,\n childModelName,\n childTable,\n childWhere: childState.childWhere,\n childOrderBy: childState.childOrderBy,\n childLimit: childState.childLimit,\n childProjection: childState.childProjection,\n alias: relationName,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = [...this.includes, includeState];\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n private _createRelatedProxy(): OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >['related'] {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n\n return new Proxy(\n {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'],\n {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n const filterBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n // Expose model accessor directly on the builder for convenience\n const modelAccessor = filterBuilder.getModelAccessor();\n const builderWithAccessor = Object.assign(\n filterBuilder,\n modelAccessor,\n ) as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName> &\n ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>;\n\n return {\n some: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n // If result is a AnyBinaryBuilder, wrap it in a builder\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n none: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n every: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n };\n },\n },\n );\n }\n\n private _applyRelationFilter(\n relationName: string,\n childModelName: string,\n filterType: 'some' | 'none' | 'every',\n fn: (\n child: OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n ) => OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // Create a relation filter builder and apply the callback\n const filterBuilder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const appliedFilter = fn(\n filterBuilder as OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n );\n const childWhere = (\n appliedFilter as OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>\n ).getWherePredicate();\n\n // Store the relation filter\n const relationFilter: RelationFilter = {\n relationName,\n childModelName,\n filterType,\n childWhere,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = [...this.relationFilters, relationFilter];\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => OrderBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = fn(this._getModelAccessor());\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n take(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = n;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n skip(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // TODO: SQL lane doesn't support offset yet - this is a placeholder\n // When offset is added to SelectAst, implement it here\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = n;\n builder.projection = this.projection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => Projection,\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n > {\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = fn(this._getModelAccessor());\n return builder as OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >;\n }\n\n findMany(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[this.table.name];\n\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n // Build projection state\n const projectionInput: ProjectionInput =\n this.projection ??\n (() => {\n const modelAccessor = this._getModelAccessor();\n const defaultProjection: Record<string, AnyColumnBuilder> = {};\n for (const fieldName in modelAccessor) {\n defaultProjection[fieldName] = modelAccessor[fieldName];\n }\n return defaultProjection;\n })();\n\n // Build includes AST\n const { includesAst, includesForMeta } = buildIncludeAsts({\n includes: this.includes,\n contract: this.contract,\n context: this.context,\n modelName: this.modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n });\n\n // Build projection state\n const projectionState = buildProjectionState(\n this.table,\n projectionInput,\n includesForMeta.length > 0\n ? (includesForMeta as unknown as Parameters<typeof buildProjectionState>[2])\n : undefined,\n );\n\n // Build where clause\n const whereResult = this.wherePredicate\n ? buildWhereExpr(this.wherePredicate, this.contract, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n // Build orderBy clause\n const orderByClause = buildOrderByClause(this.orderByExpr);\n\n // Build main projection items\n const projectEntries = buildProjectionItems(projectionState, includesForMeta);\n\n // Build SELECT AST\n const ast = buildSelectAst({\n table: this.table,\n projectEntries,\n ...(includesAst.length > 0 ? { includesAst } : {}),\n ...(whereExpr ? { whereExpr } : {}),\n ...(orderByClause ? { orderByClause } : {}),\n ...(this.limitValue !== undefined ? { limit: this.limitValue } : {}),\n });\n\n // Build plan metadata\n const planMeta = buildMeta({\n contract: this.contract,\n table: createTableRef(this.table.name),\n projection: projectionState,\n includes: includesForMeta.length > 0 ? includesForMeta : undefined,\n paramDescriptors,\n paramCodecs: Object.keys(paramCodecs).length > 0 ? paramCodecs : undefined,\n where: this.wherePredicate as BinaryBuilder | undefined,\n orderBy: this.orderByExpr,\n } as MetaBuildArgs);\n\n // Compile relation filters to EXISTS subqueries and combine with main where clause\n if (this.relationFilters.length > 0) {\n const existsExprs = buildExistsSubqueries(\n this.relationFilters,\n this.contract,\n this.modelName,\n options,\n );\n if (existsExprs.length > 0) {\n const combinedWhere = combineWhereClauses(ast.where, existsExprs);\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n }\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n\n findFirst(options?: BuildOptions): SqlQueryPlan<Row> {\n const queryPlan = this.take(1).findMany(options);\n return queryPlan;\n }\n\n findUnique(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<Row> {\n return this.where(where).take(1).findMany(options);\n }\n\n create(data: Record<string, unknown>, options?: BuildOptions): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildInsertPlan(context, this.modelName, data, options);\n }\n\n update(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n data: Record<string, unknown>,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildUpdatePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n data,\n options,\n );\n }\n\n delete(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildDeletePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n options,\n );\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n errorModelNotFound(this.modelName);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.modelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ModelName>;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { augmentDescriptorWithColumnMeta } from '@prisma-next/sql-relational-core/plan';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnInfo,\n getColumnMeta,\n getOperationExpr,\n isColumnBuilder,\n isParamPlaceholder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createBinaryExpr, createColumnRef, createParamRef } from '../utils/ast';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownTable,\n} from '../utils/errors';\n\nexport function buildWhereExpr(\n where: BinaryBuilder,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): {\n expr: BinaryExpr;\n codecId?: string;\n paramName: string;\n} {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n const operationExpr = getOperationExpr(where.left);\n if (operationExpr) {\n leftExpr = operationExpr;\n } else if (isColumnBuilder(where.left)) {\n const { table, column } = getColumnInfo(where.left);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n // If column not found in contract, still build expression but without codecId\n // This allows flexibility when columnMeta is available on the column builder\n if (columnMeta) {\n codecId = columnMeta.codecId;\n }\n leftExpr = createColumnRef(table, column);\n } else {\n errorFailedToBuildWhereClause();\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyColumnBuilder\n if (isParamPlaceholder(where.right)) {\n // Handle param placeholder (existing logic)\n const placeholder: ParamPlaceholder = where.right;\n paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n // Construct descriptor if where.left is a ColumnBuilder\n if (isColumnBuilder(where.left)) {\n const { table, column } = getColumnInfo(where.left);\n const contractTable = contract.storage.tables[table];\n const columnMeta = contractTable?.columns[column];\n const builderColumnMeta = getColumnMeta(where.left);\n\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n ...(typeof builderColumnMeta?.nullable === 'boolean'\n ? { nullable: builderColumnMeta.nullable }\n : {}),\n });\n\n augmentDescriptorWithColumnMeta(descriptors, columnMeta);\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n // If column not found in contract, still build expression\n // This allows flexibility when columnMeta is available on the column builder\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n ...(codecId ? { codecId } : {}),\n paramName,\n };\n}\n","export {\n createBinaryExpr,\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createJoinOnExpr,\n createOrderByItem,\n createParamRef,\n createSelectAst,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\n","import { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\n\nexport function errorModelNotFound(modelName: string): never {\n throw planInvalid(`Model ${modelName} not found in mappings`);\n}\n\nexport function errorTableNotFound(tableName: string): never {\n throw planInvalid(`Table ${tableName} not found in schema`);\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorCreateRequiresFields(): never {\n throw planInvalid('create() requires at least one field');\n}\n\nexport function errorUpdateRequiresFields(): never {\n throw planInvalid('update() requires at least one field');\n}\n\nexport function errorIncludeRequiresCapabilities(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities');\n}\n\nexport function errorIncludeCapabilitiesNotTrue(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities to be true');\n}\n\nexport function errorMultiColumnJoinsNotSupported(): never {\n throw planInvalid('Multi-column joins in includes are not yet supported');\n}\n\nexport function errorJoinColumnsMustBeDefined(): never {\n throw planInvalid('Join columns must be defined');\n}\n\nexport function errorColumnNotFound(columnName: string, tableName: string): never {\n throw planInvalid(`Column ${columnName} not found in table ${tableName}`);\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty after filtering boolean values');\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorMissingColumn(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorInvalidColumn(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorRelationNotFound(relationName: string, modelName: string): never {\n throw planInvalid(`Relation ${relationName} not found on model ${modelName}`);\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function assertColumnExists(\n columnMeta: StorageColumn | undefined,\n columnName: string,\n tableName: string,\n): asserts columnMeta is StorageColumn {\n if (!columnMeta) {\n errorUnknownColumn(columnName, tableName);\n }\n}\n\nexport function assertParameterExists(\n paramsMap: Record<string, unknown>,\n paramName: string,\n): unknown {\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n return paramsMap[paramName];\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createDeleteAst, createTableRef } from '../utils/ast';\nimport { errorFailedToBuildWhereClause, errorModelNotFound } from '../utils/errors';\n\nexport function buildDeletePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createDeleteAst({\n table,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { param } from '@prisma-next/sql-relational-core/param';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { BuildOptions, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport { createInsertAst, createParamRef, createTableRef } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorCreateRequiresFields,\n errorModelNotFound,\n errorUnknownTable,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\n\nexport function convertModelFieldsToColumns<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n modelName: string,\n fields: Record<string, unknown>,\n): Record<string, ParamPlaceholder> {\n const model = contract.models[modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw new Error(`Model ${modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n const result: Record<string, ParamPlaceholder> = {};\n\n for (const fieldName in fields) {\n if (!Object.hasOwn(fields, fieldName)) {\n continue;\n }\n\n if (!Object.hasOwn(modelFields, fieldName)) {\n throw new Error(`Field ${fieldName} does not exist on model ${modelName}`);\n }\n\n const field = modelFields[fieldName];\n if (!field) {\n continue;\n }\n\n const columnName =\n contract.mappings.fieldToColumn?.[modelName]?.[fieldName] ?? field.column ?? fieldName;\n\n result[columnName] = param(fieldName);\n }\n\n return result;\n}\n\nexport function buildInsertPlan<TContract extends SqlContract<SqlStorage>>(\n context: OrmContext<TContract>,\n modelName: string,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorCreateRequiresFields();\n }\n\n const values = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const insertValues: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(values)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n insertValues[columnName] = createParamRef(index, paramName);\n }\n\n const ast = createInsertAst({\n table,\n values: insertValues,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\n\nexport function createParamDescriptor(args: {\n name: string;\n table: string;\n column: string;\n codecId?: string;\n nativeType?: string;\n nullable: boolean;\n}): ParamDescriptor {\n return {\n name: args.name,\n source: 'dsl',\n refs: { table: args.table, column: args.column },\n ...(args.codecId ? { codecId: args.codecId } : {}),\n ...(args.nativeType ? { nativeType: args.nativeType } : {}),\n nullable: args.nullable,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createParamRef, createTableRef, createUpdateAst } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorFailedToBuildWhereClause,\n errorModelNotFound,\n errorUnknownTable,\n errorUpdateRequiresFields,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\nimport { convertModelFieldsToColumns } from './insert-builder';\n\nexport function buildUpdatePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorUpdateRequiresFields();\n }\n\n const set = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const updateSet: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(set)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n updateSet[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createUpdateAst({\n table,\n set: updateSet,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n InferNestedProjectionRow,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions } from './orm-types';\n\nexport interface OrmIncludeChildBuilder<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> {\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >;\n}\n\nexport class OrmIncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> implements OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private childWhere: AnyBinaryBuilder | undefined;\n private childOrderBy: AnyOrderBuilder | undefined;\n private childLimit: number | undefined;\n private childProjection:\n | Record<string, AnyColumnBuilder | boolean | NestedProjection>\n | undefined = undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = fn(this._getModelAccessor());\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = fn(this._getModelAccessor());\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = n;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n > {\n const builder = new OrmIncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >({ context: this.context }, this.childModelName);\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = fn(this._getModelAccessor());\n return builder;\n }\n\n getState(): {\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n childProjection?: Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n } {\n return {\n ...(this.childWhere !== undefined ? { childWhere: this.childWhere } : {}),\n ...(this.childOrderBy !== undefined ? { childOrderBy: this.childOrderBy } : {}),\n ...(this.childLimit !== undefined ? { childLimit: this.childLimit } : {}),\n ...(this.childProjection !== undefined ? { childProjection: this.childProjection } : {}),\n };\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor = {} as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n // ModelColumnAccessor alignment is ensured by contract validation; cast for compatibility\n (accessor as Record<string, AnyColumnBuilder>)[fieldName] = column;\n }\n }\n\n return accessor;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type { AnyBinaryBuilder, AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions, OrmRelationFilterBuilder } from './orm-types';\n\nexport class OrmRelationFilterBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n> implements OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private modelAccessor: ModelColumnAccessor<TContract, CodecTypes, ChildModelName> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n this.modelAccessor = this._getModelAccessor();\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName> {\n const builder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, ChildModelName>(\n { context: this.context },\n this.childModelName,\n );\n builder.modelAccessor = this.modelAccessor;\n if (this.modelAccessor) {\n builder.wherePredicate = fn(this.modelAccessor);\n }\n return builder;\n }\n\n getWherePredicate(): AnyBinaryBuilder | undefined {\n return this.wherePredicate;\n }\n\n getChildModelName(): ChildModelName {\n return this.childModelName;\n }\n\n getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n if (!this.modelAccessor) {\n this.modelAccessor = this._getModelAccessor();\n }\n if (!this.modelAccessor) {\n throw planInvalid(`Failed to get model accessor for ${this.childModelName}`);\n }\n return this.modelAccessor;\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n }\n}\n","import type { ExecutionPlan, ParamDescriptor, PlanMeta } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ExistsExpr,\n LoweredStatement,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n getColumnInfo,\n getColumnMeta,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport type { IncludeState } from '../relations/include-plan';\nimport type { ProjectionState } from '../selection/projection';\n\nexport interface MetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly table: TableRef;\n readonly projection: ProjectionState;\n readonly includes?: ReadonlyArray<IncludeState>;\n readonly where?: BinaryBuilder;\n readonly orderBy?: AnyOrderBuilder;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramCodecs?: Record<string, string>;\n}\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const operationExpr = (whereLeft as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = whereLeft as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n throw planInvalid(`Missing column for alias ${alias} at index ${index}`);\n }\n const col = column as unknown as {\n table?: string;\n column?: string;\n _operationExpr?: OperationExpr;\n };\n if (!col.table || !col.column) {\n return [alias, `include:${alias}`];\n }\n const operationExpr = col._operationExpr;\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n return [alias, `${col.table}.${col.column}`];\n }),\n );\n\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const col = args.projection.columns[i];\n if (!col) {\n continue;\n }\n const operationExpr = (col as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionTypes[alias] = operationExpr.returns.type;\n } else if (operationExpr.returns.kind === 'builtin') {\n projectionTypes[alias] = operationExpr.returns.type;\n }\n } else {\n const columnMeta = getColumnMeta(col);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n const columnMeta = getColumnMeta(column);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n\nexport function createPlan<Row>(\n ast: SelectAst,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n return Object.freeze({\n ast,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n\nexport function createPlanWithExists<Row>(\n ast: SelectAst,\n combinedWhere: BinaryExpr | ExistsExpr | undefined,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IncludeAst,\n OperationExpr,\n ParamRef,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BuildOptions,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkIncludeCapabilities } from '../orm/capabilities';\nimport type { OrmIncludeState, RelationFilter } from '../orm/state';\nimport { buildJoinOnExpr } from '../selection/join';\nimport { buildChildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport {\n buildProjectionState,\n type ProjectionInput,\n type ProjectionState,\n} from '../selection/projection';\nimport { createColumnRef, createSelectAst } from '../utils/ast';\nimport {\n errorChildProjectionEmpty,\n errorChildProjectionMustBeSpecified,\n errorColumnNotFound,\n errorJoinColumnsMustBeDefined,\n errorMissingAlias,\n errorMissingColumn,\n errorModelNotFound,\n errorMultiColumnJoinsNotSupported,\n errorTableNotFound,\n} from '../utils/errors';\n\nexport interface IncludeState {\n readonly alias: string;\n readonly table: TableRef;\n readonly on: {\n kind: 'join-on';\n left: StorageColumn;\n right: StorageColumn;\n };\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n}\n\ninterface BuildIncludeAstsInput {\n readonly includes: OrmIncludeState[];\n readonly contract: SqlContract<SqlStorage>;\n readonly context: QueryLaneContext<SqlContract<SqlStorage>>;\n readonly modelName: string;\n readonly paramsMap: Record<string, unknown>;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramValues: unknown[];\n readonly paramCodecs: Record<string, string>;\n}\n\nexport function buildIncludeAsts(input: BuildIncludeAstsInput): {\n includesAst: IncludeAst[];\n includesForMeta: IncludeState[];\n} {\n const {\n includes,\n contract,\n context,\n modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n } = input;\n\n const includesAst: IncludeAst[] = [];\n const includesForMeta: IncludeState[] = [];\n\n for (const includeState of includes) {\n checkIncludeCapabilities(contract);\n\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const parentSchemaHandle = schema(context);\n const parentSchemaTable = parentSchemaHandle.tables[parentTableName];\n if (!parentSchemaTable) {\n errorTableNotFound(parentTableName);\n }\n const childSchemaHandle = schema(context);\n const childSchemaTable = childSchemaHandle.tables[includeState.childTable.name];\n if (!childSchemaTable) {\n errorTableNotFound(includeState.childTable.name);\n }\n\n if (\n includeState.relation.on.parentCols.length !== 1 ||\n includeState.relation.on.childCols.length !== 1\n ) {\n errorMultiColumnJoinsNotSupported();\n }\n const parentColName = includeState.relation.on.parentCols[0];\n const childColName = includeState.relation.on.childCols[0];\n if (!parentColName || !childColName) {\n errorJoinColumnsMustBeDefined();\n }\n const parentCol = parentSchemaTable.columns[parentColName];\n const childCol = childSchemaTable.columns[childColName];\n if (!parentCol) {\n errorColumnNotFound(parentColName, parentTableName);\n }\n if (!childCol) {\n errorColumnNotFound(childColName, includeState.childTable.name);\n }\n\n const onExpr = buildJoinOnExpr(\n parentTableName,\n parentColName,\n includeState.childTable.name,\n childColName,\n );\n\n if (!includeState.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const filteredProjection: Record<string, AnyColumnBuilder | NestedProjection> = {};\n for (const [key, value] of Object.entries(includeState.childProjection)) {\n if (value !== true && value !== false) {\n filteredProjection[key] = value as AnyColumnBuilder | NestedProjection;\n }\n }\n if (Object.keys(filteredProjection).length === 0) {\n errorChildProjectionEmpty();\n }\n const childProjectionState = buildProjectionState(\n includeState.childTable,\n filteredProjection as ProjectionInput,\n );\n\n let childWhere: BinaryExpr | undefined;\n if (includeState.childWhere) {\n const whereResult = buildWhereExpr(\n includeState.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n }\n\n const childOrderBy = buildChildOrderByClause(includeState.childOrderBy);\n\n const childProjectionItems: Array<{ alias: string; expr: ColumnRef | OperationExpr }> = [];\n for (let i = 0; i < childProjectionState.aliases.length; i++) {\n const alias = childProjectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = childProjectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n childProjectionItems.push({ alias, expr: operationExpr });\n } else {\n const col = column as { table: string; column: string };\n childProjectionItems.push({ alias, expr: createColumnRef(col.table, col.column) });\n }\n }\n\n const includeAst: IncludeAst = compact({\n kind: 'includeMany',\n alias: includeState.alias,\n child: compact({\n table: includeState.childTable,\n on: onExpr,\n project: childProjectionItems,\n where: childWhere,\n orderBy: childOrderBy,\n limit: includeState.childLimit,\n }),\n }) as IncludeAst;\n includesAst.push(includeAst);\n\n const includeForMeta: IncludeState = compact({\n alias: includeState.alias,\n table: includeState.childTable,\n on: {\n kind: 'join-on',\n left: parentCol as unknown as StorageColumn,\n right: childCol as unknown as StorageColumn,\n },\n childProjection: childProjectionState,\n childWhere: includeState.childWhere,\n childOrderBy: includeState.childOrderBy,\n childLimit: includeState.childLimit,\n }) as IncludeState;\n includesForMeta.push(includeForMeta);\n }\n\n return { includesAst, includesForMeta };\n}\n\nexport function buildExistsSubqueries(\n relationFilters: RelationFilter[],\n contract: SqlContract<SqlStorage>,\n modelName: string,\n options?: BuildOptions,\n): ExistsExpr[] {\n const existsExprs: ExistsExpr[] = [];\n\n for (const filter of relationFilters) {\n const childTableName = contract.mappings.modelToTable?.[filter.childModelName];\n if (!childTableName) {\n errorModelNotFound(filter.childModelName);\n }\n\n const childTable: TableRef = { kind: 'table', name: childTableName };\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const joinConditions: Array<{ left: ColumnRef; right: ColumnRef }> = [];\n for (let i = 0; i < filter.relation.on.parentCols.length; i++) {\n const parentCol = filter.relation.on.parentCols[i];\n const childCol = filter.relation.on.childCols[i];\n if (!parentCol || !childCol) {\n continue;\n }\n joinConditions.push({\n left: { kind: 'col', table: parentTableName, column: parentCol },\n right: { kind: 'col', table: childTableName, column: childCol },\n });\n }\n\n let childWhere: BinaryExpr | undefined;\n if (filter.childWhere) {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const whereResult = buildWhereExpr(\n filter.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n let subqueryWhere: BinaryExpr | undefined = childWhere;\n if (joinConditions.length > 0) {\n const firstJoinCondition = joinConditions[0];\n if (firstJoinCondition) {\n const joinWhere: BinaryExpr = {\n kind: 'bin',\n op: 'eq',\n left: firstJoinCondition.left,\n right: firstJoinCondition.right as unknown as ParamRef,\n };\n if (childWhere) {\n subqueryWhere = joinWhere;\n } else {\n subqueryWhere = joinWhere;\n }\n }\n }\n const projectionColumn = joinConditions[0]?.right ?? createColumnRef(childTableName, 'id');\n const subquery = createSelectAst({\n from: childTable,\n project: [{ alias: '_exists', expr: projectionColumn }],\n where: subqueryWhere,\n } as {\n from: TableRef;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef }>;\n where?: BinaryExpr | ExistsExpr;\n });\n\n const notExists = filter.filterType === 'none' || filter.filterType === 'every';\n\n const existsExpr: ExistsExpr = {\n kind: 'exists',\n subquery,\n not: notExists,\n };\n\n existsExprs.push(existsExpr);\n }\n\n return existsExprs;\n}\n\nexport function combineWhereClauses(\n mainWhere: BinaryExpr | ExistsExpr | undefined,\n existsExprs: ExistsExpr[],\n): BinaryExpr | ExistsExpr | undefined {\n if (existsExprs.length === 1) {\n return existsExprs[0];\n }\n if (mainWhere) {\n return mainWhere;\n }\n if (existsExprs.length > 0) {\n return existsExprs[0];\n }\n return undefined;\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { errorIncludeCapabilitiesNotTrue, errorIncludeRequiresCapabilities } from '../utils/errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorIncludeRequiresCapabilities();\n }\n const targetCapabilities = capabilities[target];\n if (capabilities[target]['lateral'] !== true || targetCapabilities['jsonAgg'] !== true) {\n errorIncludeCapabilitiesNotTrue();\n }\n}\n","import type { JoinOnExpr } from '@prisma-next/sql-relational-core/ast';\nimport { createColumnRef, createJoinOnExpr } from '../utils/ast';\n\nexport function buildJoinOnExpr(\n parentTableName: string,\n parentColName: string,\n childTableName: string,\n childColName: string,\n): JoinOnExpr {\n const leftCol = createColumnRef(parentTableName, parentColName);\n const rightCol = createColumnRef(childTableName, childColName);\n return createJoinOnExpr(leftCol, rightCol);\n}\n","import type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, Direction, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyOrderBuilder, OrderBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n extractBaseColumnRef,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createColumnRef, createOrderByItem } from '../utils/ast';\n\nexport function buildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = isOperationExpr(orderExpr)\n ? orderExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n\nexport function buildChildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n JoinOnPredicate,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { isColumnBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\n\nexport interface ProjectionState {\n readonly aliases: string[];\n readonly columns: AnyColumnBuilder[];\n}\n\nexport type ProjectionInput = Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n\nfunction generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: AnyColumnBuilder[] } {\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<{\n readonly alias: string;\n readonly table: TableRef;\n readonly on: JoinOnPredicate;\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n }>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n aliases.push(key);\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: {\n nativeType: 'jsonb',\n codecId: 'core/json@1',\n nullable: true,\n },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type {\n BinaryExpr,\n ColumnRef,\n Direction,\n ExistsExpr,\n IncludeAst,\n IncludeRef,\n OperationExpr,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { IncludeState } from '../relations/include-plan';\nimport { createColumnRef, createSelectAst, createTableRef } from '../utils/ast';\nimport { errorInvalidColumn, errorMissingAlias, errorMissingColumn } from '../utils/errors';\nimport type { ProjectionState } from './projection';\n\nexport function buildProjectionItems(\n projectionState: ProjectionState,\n includesForMeta: ReadonlyArray<IncludeState>,\n): Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> {\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> = [];\n for (let i = 0; i < projectionState.aliases.length; i++) {\n const alias = projectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n\n const matchingInclude = includesForMeta.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n const col = column as { table: string; column: string };\n const tableName = col.table;\n const columnName = col.column;\n if (!tableName || !columnName) {\n errorInvalidColumn(alias, i);\n }\n projectEntries.push({\n alias,\n expr: createColumnRef(tableName, columnName),\n });\n }\n }\n }\n return projectEntries;\n}\n\nexport function buildSelectAst(params: {\n table: TableRef;\n projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n includesAst?: ReadonlyArray<IncludeAst>;\n whereExpr?: BinaryExpr | ExistsExpr;\n orderByClause?: ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>;\n limit?: number;\n}): SelectAst {\n const { table, projectEntries, includesAst, whereExpr, orderByClause, limit } = params;\n return createSelectAst({\n from: createTableRef(table.name),\n project: projectEntries,\n ...(includesAst ? { includes: includesAst } : {}),\n ...(whereExpr ? { where: whereExpr } : {}),\n ...(orderByClause ? { orderBy: orderByClause } : {}),\n ...(limit !== undefined ? { limit } : {}),\n });\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\n\nexport type OrmContext<TContract extends SqlContract<SqlStorage>> = QueryLaneContext<TContract>;\n\nexport function createOrmContext<TContract extends SqlContract<SqlStorage>>(\n context: QueryLaneContext<TContract>,\n): OrmContext<TContract> {\n return context;\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { ExtractCodecTypes, SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { OrmModelBuilderImpl } from './orm/builder';\nimport type { OrmBuilderOptions, OrmRegistry } from './orm-types';\n\ntype ModelName<TContract extends SqlContract<SqlStorage>> = keyof TContract['models'] & string;\n\nexport function orm<TContract extends SqlContract<SqlStorage>>(\n options: OrmBuilderOptions<TContract>,\n): OrmRegistry<TContract, ExtractCodecTypes<TContract>> {\n const contract = options.context.contract;\n type CodecTypes = ExtractCodecTypes<TContract>;\n\n return new Proxy({} as OrmRegistry<TContract, CodecTypes>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n if (\n !contract.models ||\n typeof contract.models !== 'object' ||\n !(modelName in contract.models)\n ) {\n throw planInvalid(`Model ${prop} (resolved to ${modelName}) not found in contract`);\n }\n\n return () =>\n new OrmModelBuilderImpl<TContract, CodecTypes, typeof modelName>(options, modelName);\n },\n has(_target, prop) {\n if (typeof prop !== 'string') {\n return false;\n }\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n return contract.models && typeof contract.models === 'object' && modelName in contract.models;\n },\n });\n}\n\n// Re-export types for convenience\nexport type {\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmModelBuilder,\n OrmRegistry,\n OrmRelationAccessor,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from './orm-types';\n"],"mappings":"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","names":["planInvalid","schema","planInvalid","planInvalid","schema","planInvalid","getColumnInfo","getColumnMeta","compact","schema","isOperationExpr","isOperationExpr","isColumnBuilder","isColumnBuilder","schema","compact","schema","planInvalid","planInvalid","planInvalid"]}
|
package/dist/exports/orm.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-orm-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": "ORM builder, include lowering, and relation filters 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-lane": "0.1.0-pr.
|
|
12
|
-
"@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-lane": "0.1.0-pr.50.2",
|
|
12
|
+
"@prisma-next/sql-relational-core": "0.1.0-pr.50.2"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"tsup": "^8.3.0",
|
|
16
16
|
"typescript": "^5.9.3",
|
|
17
17
|
"vite-tsconfig-paths": "^5.1.4",
|
|
18
18
|
"vitest": "^2.1.1",
|
|
19
|
-
"@prisma-next/
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/sql-runtime": "0.1.0-pr.
|
|
19
|
+
"@prisma-next/sql-contract-ts": "0.1.0-pr.50.2",
|
|
20
|
+
"@prisma-next/operations": "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/orm/builder.ts","../src/selection/predicates.ts","../src/utils/ast.ts","../src/utils/errors.ts","../src/mutations/delete-builder.ts","../src/mutations/insert-builder.ts","../src/utils/param-descriptor.ts","../src/mutations/update-builder.ts","../src/orm-include-child.ts","../src/orm-relation-filter.ts","../src/plan/plan-assembly.ts","../src/relations/include-plan.ts","../src/orm/capabilities.ts","../src/selection/join.ts","../src/selection/ordering.ts","../src/selection/projection.ts","../src/selection/select-builder.ts","../src/orm/context.ts","../src/orm.ts"],"sourcesContent":["import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SelectAst, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport { buildDeletePlan } from '../mutations/delete-builder';\nimport { buildInsertPlan } from '../mutations/insert-builder';\nimport { buildUpdatePlan } from '../mutations/update-builder';\nimport type { OrmIncludeChildBuilder } from '../orm-include-child';\nimport { OrmIncludeChildBuilderImpl } from '../orm-include-child';\nimport { OrmRelationFilterBuilderImpl } from '../orm-relation-filter';\nimport type {\n IncludeAccumulator,\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmIncludeAccessor,\n OrmModelBuilder,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from '../orm-types';\nimport { buildMeta, type MetaBuildArgs } from '../plan/plan-assembly';\nimport {\n buildExistsSubqueries,\n buildIncludeAsts,\n combineWhereClauses,\n} from '../relations/include-plan';\nimport { buildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { buildProjectionState, type ProjectionInput } from '../selection/projection';\nimport { buildProjectionItems, buildSelectAst } from '../selection/select-builder';\nimport { createTableRef } from '../utils/ast';\nimport { errorModelNotFound, errorTableNotFound, errorUnknownTable } from '../utils/errors';\nimport { createOrmContext } from './context';\nimport type { OrmIncludeState, RelationFilter } from './state';\n\nexport class OrmModelBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n ModelName extends string = string,\n Includes extends Record<string, unknown> = Record<string, never>,\n Row = unknown,\n> implements OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly modelName: ModelName;\n private table: TableRef;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private relationFilters: RelationFilter[] = [];\n private includes: OrmIncludeState[] = [];\n private orderByExpr: AnyOrderBuilder | undefined = undefined;\n private limitValue: number | undefined = undefined;\n private offsetValue: number | undefined = undefined;\n private projection: Record<string, AnyColumnBuilder | boolean | NestedProjection> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, modelName: ModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.modelName = modelName;\n\n const tableName = this.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n\n const schemaHandle = schema(options.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n this.table = table;\n }\n\n get where(): OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row> {\n const whereFn = (\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> => {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = fn(this._getModelAccessor());\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n };\n\n // Add related property using Proxy\n const related = this._createRelatedProxy();\n\n return Object.assign(whereFn, { related }) as OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >;\n }\n\n get include(): OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row> {\n return this._createIncludeProxy();\n }\n\n private _createIncludeProxy(): OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n > {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>;\n }\n\n return new Proxy({} as OrmIncludeAccessor<TContract, CodecTypes, ModelName, Includes, Row>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n\n const relationName = prop as keyof typeof modelRelations & string;\n\n const includeFn = (<ChildRow>(\n child: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, typeof childModelName, ChildRow>,\n ) => {\n return self._applyInclude<typeof relationName, ChildRow>(\n relationName,\n childModelName,\n child,\n relationDef,\n );\n }) as OrmIncludeAccessor<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >[typeof relationName];\n\n return includeFn;\n },\n });\n }\n\n private _applyInclude<RelationName extends string, ChildRow>(\n relationName: RelationName,\n childModelName: string,\n childBuilderFn: (\n child: OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n ) => OrmIncludeChildBuilder<TContract, CodecTypes, string, ChildRow>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n > {\n // Get child table\n const childTableName = this.contract.mappings.modelToTable?.[childModelName];\n if (!childTableName) {\n errorModelNotFound(childModelName);\n }\n const childTable: TableRef = { kind: 'table', name: childTableName };\n\n // Create child builder and apply callback\n const childBuilder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const builtChild = childBuilderFn(\n childBuilder as OrmIncludeChildBuilder<TContract, CodecTypes, string>,\n );\n const childState = (\n builtChild as OrmIncludeChildBuilderImpl<TContract, CodecTypes, string, ChildRow>\n ).getState();\n\n // Store the include\n // Note: Child projection validation happens in findMany() when compiling to includeMany\n const includeState: OrmIncludeState = {\n relationName,\n childModelName,\n childTable,\n childWhere: childState.childWhere,\n childOrderBy: childState.childOrderBy,\n childLimit: childState.childLimit,\n childProjection: childState.childProjection,\n alias: relationName,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n IncludeAccumulator<Includes, RelationName, ChildRow>,\n Row\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = [...this.includes, includeState];\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n private _createRelatedProxy(): OrmWhereProperty<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n Row\n >['related'] {\n const self = this;\n // Relations are keyed by table name, not model name\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n const modelRelations = this.contract.relations?.[tableName];\n if (!modelRelations || typeof modelRelations !== 'object') {\n return {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'];\n }\n\n return new Proxy(\n {} as OrmWhereProperty<TContract, CodecTypes, ModelName, Includes, Row>['related'],\n {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const relation = (modelRelations as Record<string, { to?: string }>)[prop];\n if (!relation || typeof relation !== 'object' || !('to' in relation)) {\n throw planInvalid(`Relation ${prop} not found on model ${self.modelName}`);\n }\n\n const childModelName = relation.to as string;\n const relationDef = relation as {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n };\n const filterBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n // Expose model accessor directly on the builder for convenience\n const modelAccessor = filterBuilder.getModelAccessor();\n const builderWithAccessor = Object.assign(\n filterBuilder,\n modelAccessor,\n ) as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName> &\n ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>;\n\n return {\n some: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n // If result is a AnyBinaryBuilder, wrap it in a builder\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'some',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n none: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'none',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n every: (\n fn: (\n child:\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | ModelColumnAccessor<TContract, CodecTypes, typeof childModelName>,\n ) =>\n | OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>\n | AnyBinaryBuilder,\n ) => {\n const result = fn(builderWithAccessor);\n if (result && 'kind' in result && result.kind === 'binary') {\n const wrappedBuilder = new OrmRelationFilterBuilderImpl<\n TContract,\n CodecTypes,\n typeof childModelName\n >({ context: self.context }, childModelName);\n wrappedBuilder['wherePredicate'] = result as AnyBinaryBuilder;\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () => wrappedBuilder,\n relationDef,\n );\n }\n return self._applyRelationFilter(\n prop,\n childModelName,\n 'every',\n () =>\n result as OrmRelationFilterBuilder<TContract, CodecTypes, typeof childModelName>,\n relationDef,\n );\n },\n };\n },\n },\n );\n }\n\n private _applyRelationFilter(\n relationName: string,\n childModelName: string,\n filterType: 'some' | 'none' | 'every',\n fn: (\n child: OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n ) => OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n relationDef: {\n to: string;\n cardinality: string;\n on: { parentCols: readonly string[]; childCols: readonly string[] };\n },\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // Create a relation filter builder and apply the callback\n const filterBuilder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>(\n { context: this.context },\n childModelName,\n );\n const appliedFilter = fn(\n filterBuilder as OrmRelationFilterBuilder<TContract, CodecTypes, string>,\n );\n const childWhere = (\n appliedFilter as OrmRelationFilterBuilderImpl<TContract, CodecTypes, string>\n ).getWherePredicate();\n\n // Store the relation filter\n const relationFilter: RelationFilter = {\n relationName,\n childModelName,\n filterType,\n childWhere,\n relation: relationDef,\n };\n\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = [...this.relationFilters, relationFilter];\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => OrderBuilder,\n ): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = fn(this._getModelAccessor());\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n take(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = n;\n builder.offsetValue = this.offsetValue;\n builder.projection = this.projection;\n return builder;\n }\n\n skip(n: number): OrmModelBuilder<TContract, CodecTypes, ModelName, Includes, Row> {\n // TODO: SQL lane doesn't support offset yet - this is a placeholder\n // When offset is added to SelectAst, implement it here\n const builder = new OrmModelBuilderImpl<TContract, CodecTypes, ModelName, Includes, Row>(\n { context: this.context },\n this.modelName,\n );\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = n;\n builder.projection = this.projection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => Projection,\n ): OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n > {\n const builder = new OrmModelBuilderImpl<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >({ context: this.context }, this.modelName);\n builder['table'] = this.table;\n builder.wherePredicate = this.wherePredicate;\n builder.relationFilters = this.relationFilters;\n builder.includes = this.includes;\n builder.orderByExpr = this.orderByExpr;\n builder.limitValue = this.limitValue;\n builder.offsetValue = this.offsetValue;\n builder.projection = fn(this._getModelAccessor());\n return builder as OrmModelBuilder<\n TContract,\n CodecTypes,\n ModelName,\n Includes,\n InferNestedProjectionRow<Projection, CodecTypes, Includes>\n >;\n }\n\n findMany(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[this.table.name];\n\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n // Build projection state\n const projectionInput: ProjectionInput =\n this.projection ??\n (() => {\n const modelAccessor = this._getModelAccessor();\n const defaultProjection: Record<string, AnyColumnBuilder> = {};\n for (const fieldName in modelAccessor) {\n defaultProjection[fieldName] = modelAccessor[fieldName];\n }\n return defaultProjection;\n })();\n\n // Build includes AST\n const { includesAst, includesForMeta } = buildIncludeAsts(\n this.includes,\n this.contract,\n this.context,\n this.modelName,\n paramsMap,\n paramDescriptors,\n paramValues,\n paramCodecs,\n );\n\n // Build projection state\n const projectionState = buildProjectionState(\n this.table,\n projectionInput,\n includesForMeta.length > 0\n ? (includesForMeta as unknown as Parameters<typeof buildProjectionState>[2])\n : undefined,\n );\n\n // Build where clause\n const whereResult = this.wherePredicate\n ? buildWhereExpr(this.wherePredicate, this.contract, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n // Build orderBy clause\n const orderByClause = buildOrderByClause(this.orderByExpr);\n\n // Build main projection items\n const projectEntries = buildProjectionItems(projectionState, includesForMeta);\n\n // Build SELECT AST\n const ast = buildSelectAst({\n table: this.table,\n projectEntries,\n ...(includesAst.length > 0 ? { includesAst } : {}),\n ...(whereExpr ? { whereExpr } : {}),\n ...(orderByClause ? { orderByClause } : {}),\n ...(this.limitValue !== undefined ? { limit: this.limitValue } : {}),\n });\n\n // Build plan metadata\n const planMeta = buildMeta({\n contract: this.contract,\n table: createTableRef(this.table.name),\n projection: projectionState,\n includes: includesForMeta.length > 0 ? includesForMeta : undefined,\n paramDescriptors,\n paramCodecs: Object.keys(paramCodecs).length > 0 ? paramCodecs : undefined,\n where: this.wherePredicate as BinaryBuilder | undefined,\n orderBy: this.orderByExpr,\n } as MetaBuildArgs);\n\n // Compile relation filters to EXISTS subqueries and combine with main where clause\n if (this.relationFilters.length > 0) {\n const existsExprs = buildExistsSubqueries(\n this.relationFilters,\n this.contract,\n this.modelName,\n options,\n );\n if (existsExprs.length > 0) {\n const combinedWhere = combineWhereClauses(ast.where, existsExprs);\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n }\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n }\n\n findFirst(options?: BuildOptions): SqlQueryPlan<Row> {\n const queryPlan = this.take(1).findMany(options);\n return queryPlan;\n }\n\n findUnique(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<Row> {\n return this.where(where).take(1).findMany(options);\n }\n\n create(data: Record<string, unknown>, options?: BuildOptions): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildInsertPlan(context, this.modelName, data, options);\n }\n\n update(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n data: Record<string, unknown>,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildUpdatePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n data,\n options,\n );\n }\n\n delete(\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n options?: BuildOptions,\n ): SqlQueryPlan<number> {\n const context = createOrmContext(this.context);\n return buildDeletePlan<TContract, CodecTypes, ModelName>(\n context,\n this.modelName,\n where,\n () => this._getModelAccessor(),\n options,\n );\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.modelName];\n if (!tableName) {\n errorModelNotFound(this.modelName);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n errorTableNotFound(tableName);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.modelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ModelName>;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { BinaryExpr, Expression, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { augmentDescriptorWithColumnMeta } from '@prisma-next/sql-relational-core/plan';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n isColumnBuilder,\n isExpressionBuilder,\n isParamPlaceholder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createBinaryExpr, createParamRef } from '../utils/ast';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownTable,\n} from '../utils/errors';\n\nexport function buildWhereExpr(\n where: BinaryBuilder,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): {\n expr: BinaryExpr;\n codecId?: string;\n paramName: string;\n} {\n let leftExpr: Expression;\n let codecId: string | undefined;\n let rightExpr: Expression | ParamRef;\n let paramName: string;\n\n // where.left is now an Expression (ColumnRef or OperationExpr)\n leftExpr = where.left;\n\n // If leftExpr is a ColumnRef, extract codecId from contract\n if (leftExpr.kind === 'col') {\n const { table, column } = leftExpr;\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n // If column not found in contract, still build expression but without codecId\n // This allows flexibility when columnMeta is available on the column builder\n if (columnMeta) {\n codecId = columnMeta.codecId;\n }\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyExpressionSource\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 from where.left Expression\n // For ColumnRef, we can extract table/column directly\n // For OperationExpr, we extract the base column reference\n if (leftExpr.kind === 'col') {\n const { table, column } = leftExpr;\n const contractTable = contract.storage.tables[table];\n const columnMeta = contractTable?.columns[column];\n\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n ...(columnMeta && typeof columnMeta.nullable === 'boolean'\n ? { nullable: columnMeta.nullable }\n : {}),\n });\n\n augmentDescriptorWithColumnMeta(descriptors, columnMeta);\n }\n // For OperationExpr, we don't create descriptors since we can't reliably extract column info\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right) || isExpressionBuilder(where.right)) {\n // Handle ExpressionSource on the right - use toExpr() to get the Expression\n rightExpr = where.right.toExpr();\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 ? { codecId } : {}),\n paramName,\n };\n}\n","export {\n createBinaryExpr,\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createJoinOnExpr,\n createOrderByItem,\n createParamRef,\n createSelectAst,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\n","import { planInvalid } from '@prisma-next/plan';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\n\nexport function errorModelNotFound(modelName: string): never {\n throw planInvalid(`Model ${modelName} not found in mappings`);\n}\n\nexport function errorTableNotFound(tableName: string): never {\n throw planInvalid(`Table ${tableName} not found in schema`);\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorCreateRequiresFields(): never {\n throw planInvalid('create() requires at least one field');\n}\n\nexport function errorUpdateRequiresFields(): never {\n throw planInvalid('update() requires at least one field');\n}\n\nexport function errorIncludeRequiresCapabilities(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities');\n}\n\nexport function errorIncludeCapabilitiesNotTrue(): never {\n throw planInvalid('includeMany requires lateral and jsonAgg capabilities to be true');\n}\n\nexport function errorMultiColumnJoinsNotSupported(): never {\n throw planInvalid('Multi-column joins in includes are not yet supported');\n}\n\nexport function errorJoinColumnsMustBeDefined(): never {\n throw planInvalid('Join columns must be defined');\n}\n\nexport function errorColumnNotFound(columnName: string, tableName: string): never {\n throw planInvalid(`Column ${columnName} not found in table ${tableName}`);\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty after filtering boolean values');\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorMissingColumn(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorInvalidColumn(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias \"${alias}\" at index ${index}`);\n}\n\nexport function errorRelationNotFound(relationName: string, modelName: string): never {\n throw planInvalid(`Relation ${relationName} not found on model ${modelName}`);\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function assertColumnExists(\n columnMeta: StorageColumn | undefined,\n columnName: string,\n tableName: string,\n): asserts columnMeta is StorageColumn {\n if (!columnMeta) {\n errorUnknownColumn(columnName, tableName);\n }\n}\n\nexport function assertParameterExists(\n paramsMap: Record<string, unknown>,\n paramName: string,\n): unknown {\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n return paramsMap[paramName];\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createDeleteAst, createTableRef } from '../utils/ast';\nimport { errorFailedToBuildWhereClause, errorModelNotFound } from '../utils/errors';\n\nexport function buildDeletePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createDeleteAst({\n table,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport { param } from '@prisma-next/sql-relational-core/param';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { BuildOptions, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport { createInsertAst, createParamRef, createTableRef } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorCreateRequiresFields,\n errorModelNotFound,\n errorUnknownTable,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\n\nexport function convertModelFieldsToColumns<TContract extends SqlContract<SqlStorage>>(\n contract: TContract,\n modelName: string,\n fields: Record<string, unknown>,\n): Record<string, ParamPlaceholder> {\n const model = contract.models[modelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw new Error(`Model ${modelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n const result: Record<string, ParamPlaceholder> = {};\n\n for (const fieldName in fields) {\n if (!Object.hasOwn(fields, fieldName)) {\n continue;\n }\n\n if (!Object.hasOwn(modelFields, fieldName)) {\n throw new Error(`Field ${fieldName} does not exist on model ${modelName}`);\n }\n\n const field = modelFields[fieldName];\n if (!field) {\n continue;\n }\n\n const columnName =\n contract.mappings.fieldToColumn?.[modelName]?.[fieldName] ?? field.column ?? fieldName;\n\n result[columnName] = param(fieldName);\n }\n\n return result;\n}\n\nexport function buildInsertPlan<TContract extends SqlContract<SqlStorage>>(\n context: OrmContext<TContract>,\n modelName: string,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorCreateRequiresFields();\n }\n\n const values = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const insertValues: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(values)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n insertValues[columnName] = createParamRef(index, paramName);\n }\n\n const ast = createInsertAst({\n table,\n values: insertValues,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\n\nexport function createParamDescriptor(args: {\n name: string;\n table: string;\n column: string;\n codecId?: string;\n nativeType?: string;\n nullable: boolean;\n}): ParamDescriptor {\n return {\n name: args.name,\n source: 'dsl',\n refs: { table: args.table, column: args.column },\n ...(args.codecId ? { codecId: args.codecId } : {}),\n ...(args.nativeType ? { nativeType: args.nativeType } : {}),\n nullable: args.nullable,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { AnyBinaryBuilder, BuildOptions } from '@prisma-next/sql-relational-core/types';\nimport type { OrmContext } from '../orm/context';\nimport type { ModelColumnAccessor } from '../orm-types';\nimport { buildWhereExpr } from '../selection/predicates';\nimport { createParamRef, createTableRef, createUpdateAst } from '../utils/ast';\nimport {\n assertColumnExists,\n assertParameterExists,\n errorFailedToBuildWhereClause,\n errorModelNotFound,\n errorUnknownTable,\n errorUpdateRequiresFields,\n} from '../utils/errors';\nimport { createParamDescriptor } from '../utils/param-descriptor';\nimport { convertModelFieldsToColumns } from './insert-builder';\n\nexport function buildUpdatePlan<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ModelName extends string,\n>(\n context: OrmContext<TContract>,\n modelName: ModelName,\n where: (model: ModelColumnAccessor<TContract, CodecTypes, ModelName>) => AnyBinaryBuilder,\n getModelAccessor: () => ModelColumnAccessor<TContract, CodecTypes, ModelName>,\n data: Record<string, unknown>,\n options?: BuildOptions,\n): SqlQueryPlan<number> {\n if (!data || Object.keys(data).length === 0) {\n errorUpdateRequiresFields();\n }\n\n const set = convertModelFieldsToColumns(context.contract, modelName, data);\n\n const modelAccessor = getModelAccessor();\n const wherePredicate = where(modelAccessor);\n\n const tableName = context.contract.mappings.modelToTable?.[modelName];\n if (!tableName) {\n errorModelNotFound(modelName);\n }\n const table = createTableRef(tableName);\n\n const paramsMap = {\n ...(options?.params ?? {}),\n ...data,\n } as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = context.contract.storage.tables[tableName];\n if (!contractTable) {\n errorUnknownTable(tableName);\n }\n\n const updateSet: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(set)) {\n const columnMeta = contractTable.columns[columnName];\n assertColumnExists(columnMeta, columnName, tableName);\n\n const paramName = placeholder.name;\n const value = assertParameterExists(paramsMap, paramName);\n const index = paramValues.push(value);\n\n const codecId = columnMeta.codecId;\n if (paramName) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push(\n createParamDescriptor({\n name: paramName,\n table: tableName,\n column: columnName,\n codecId: codecId,\n nativeType: columnMeta.nativeType,\n nullable: columnMeta.nullable,\n }),\n );\n\n updateSet[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n wherePredicate,\n context.contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const ast = createUpdateAst({\n table,\n set: updateSet,\n where: whereExpr,\n });\n\n return Object.freeze({\n ast,\n params: paramValues,\n meta: {\n target: context.contract.target,\n targetFamily: context.contract.targetFamily,\n coreHash: context.contract.coreHash,\n lane: 'orm',\n refs: {\n tables: [tableName],\n columns: [],\n },\n projection: {},\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0\n ? {\n annotations: {\n codecs: paramCodecs,\n intent: 'write',\n isMutation: true,\n },\n }\n : {\n annotations: {\n intent: 'write',\n isMutation: true,\n },\n }),\n },\n });\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n InferNestedProjectionRow,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions } from './orm-types';\n\nexport interface OrmIncludeChildBuilder<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> {\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>;\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >;\n}\n\nexport class OrmIncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n ChildRow = unknown,\n> implements OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private childWhere: AnyBinaryBuilder | undefined;\n private childOrderBy: AnyOrderBuilder | undefined;\n private childLimit: number | undefined;\n private childProjection:\n | Record<string, AnyColumnBuilder | boolean | NestedProjection>\n | undefined = undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = fn(this._getModelAccessor());\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n orderBy(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyOrderBuilder,\n ): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = fn(this._getModelAccessor());\n builder.childLimit = this.childLimit;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n take(n: number): OrmIncludeChildBuilder<TContract, CodecTypes, ChildModelName, ChildRow> {\n const builder = new OrmIncludeChildBuilderImpl<TContract, CodecTypes, ChildModelName, ChildRow>(\n { context: this.context },\n this.childModelName,\n );\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = n;\n builder.childProjection = this.childProjection;\n return builder;\n }\n\n select<Projection extends Record<string, AnyColumnBuilder | boolean | NestedProjection>>(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => Projection,\n ): OrmIncludeChildBuilder<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n > {\n const builder = new OrmIncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n ChildModelName,\n InferNestedProjectionRow<Projection, CodecTypes>\n >({ context: this.context }, this.childModelName);\n builder.childWhere = this.childWhere;\n builder.childOrderBy = this.childOrderBy;\n builder.childLimit = this.childLimit;\n builder.childProjection = fn(this._getModelAccessor());\n return builder;\n }\n\n getState(): {\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n childProjection?: Record<string, AnyColumnBuilder | boolean | NestedProjection>;\n } {\n return {\n ...(this.childWhere !== undefined ? { childWhere: this.childWhere } : {}),\n ...(this.childOrderBy !== undefined ? { childOrderBy: this.childOrderBy } : {}),\n ...(this.childLimit !== undefined ? { childLimit: this.childLimit } : {}),\n ...(this.childProjection !== undefined ? { childProjection: this.childProjection } : {}),\n };\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor = {} as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n // ModelColumnAccessor alignment is ensured by contract validation; cast for compatibility\n (accessor as Record<string, AnyColumnBuilder>)[fieldName] = column;\n }\n }\n\n return accessor;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type { AnyBinaryBuilder, AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { ModelColumnAccessor, OrmBuilderOptions, OrmRelationFilterBuilder } from './orm-types';\n\nexport class OrmRelationFilterBuilderImpl<\n TContract extends SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }>,\n ChildModelName extends string,\n> implements OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName>\n{\n private readonly context: QueryLaneContext<TContract>;\n private readonly contract: TContract;\n private readonly childModelName: ChildModelName;\n private wherePredicate: AnyBinaryBuilder | undefined = undefined;\n private modelAccessor: ModelColumnAccessor<TContract, CodecTypes, ChildModelName> | undefined =\n undefined;\n\n constructor(options: OrmBuilderOptions<TContract>, childModelName: ChildModelName) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.childModelName = childModelName;\n this.modelAccessor = this._getModelAccessor();\n }\n\n where(\n fn: (model: ModelColumnAccessor<TContract, CodecTypes, ChildModelName>) => AnyBinaryBuilder,\n ): OrmRelationFilterBuilder<TContract, CodecTypes, ChildModelName> {\n const builder = new OrmRelationFilterBuilderImpl<TContract, CodecTypes, ChildModelName>(\n { context: this.context },\n this.childModelName,\n );\n builder.modelAccessor = this.modelAccessor;\n if (this.modelAccessor) {\n builder.wherePredicate = fn(this.modelAccessor);\n }\n return builder;\n }\n\n getWherePredicate(): AnyBinaryBuilder | undefined {\n return this.wherePredicate;\n }\n\n getChildModelName(): ChildModelName {\n return this.childModelName;\n }\n\n getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n if (!this.modelAccessor) {\n this.modelAccessor = this._getModelAccessor();\n }\n if (!this.modelAccessor) {\n throw planInvalid(`Failed to get model accessor for ${this.childModelName}`);\n }\n return this.modelAccessor;\n }\n\n private _getModelAccessor(): ModelColumnAccessor<TContract, CodecTypes, ChildModelName> {\n const tableName = this.contract.mappings.modelToTable?.[this.childModelName];\n if (!tableName) {\n throw planInvalid(`Model ${this.childModelName} not found in mappings`);\n }\n const schemaHandle = schema(this.context);\n const table = schemaHandle.tables[tableName];\n if (!table) {\n throw planInvalid(`Table ${tableName} not found in schema`);\n }\n\n const accessor: Record<string, AnyColumnBuilder> = {};\n const model = this.contract.models[this.childModelName];\n if (!model || typeof model !== 'object' || !('fields' in model)) {\n throw planInvalid(`Model ${this.childModelName} does not have fields`);\n }\n const modelFields = model.fields as Record<string, { column?: string }>;\n\n for (const fieldName in modelFields) {\n const field = modelFields[fieldName];\n if (!field) continue;\n const columnName =\n this.contract.mappings.fieldToColumn?.[this.childModelName]?.[fieldName] ??\n field.column ??\n fieldName;\n const column = table.columns[columnName];\n if (column) {\n accessor[fieldName] = column as AnyColumnBuilder;\n }\n }\n\n return accessor as ModelColumnAccessor<TContract, CodecTypes, ChildModelName>;\n }\n}\n","import type { ExecutionPlan, ParamDescriptor, PlanMeta } from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ExistsExpr,\n Expression,\n LoweredStatement,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyExpressionSource,\n AnyOrderBuilder,\n BinaryBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n getColumnMeta,\n isColumnBuilder,\n isExpressionBuilder,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport type { IncludeState } from '../relations/include-plan';\nimport type { ProjectionState } from '../selection/projection';\n\nexport interface MetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly table: TableRef;\n readonly projection: ProjectionState;\n readonly includes?: ReadonlyArray<IncludeState>;\n readonly where?: BinaryBuilder;\n readonly orderBy?: AnyOrderBuilder;\n readonly paramDescriptors: ParamDescriptor[];\n readonly paramCodecs?: Record<string, string>;\n}\n\n/**\n * Extracts column references from an ExpressionSource (ColumnBuilder or ExpressionBuilder).\n * Skips entries with empty table or column names (e.g., placeholder columns for includes).\n */\nfunction collectRefsFromExpressionSource(\n source: AnyExpressionSource,\n refsColumns: Map<string, { table: string; column: string }>,\n): void {\n if (isExpressionBuilder(source)) {\n const allRefs = collectColumnRefs(source.expr);\n for (const ref of allRefs) {\n // Skip empty table/column (placeholders for includes)\n if (ref.table && ref.column) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n }\n } else if (isColumnBuilder(source)) {\n const col = source as unknown as { table: string; column: string };\n // Skip empty table/column (placeholders for includes)\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n}\n\n/**\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.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n if (include.childWhere) {\n // childWhere.left is Expression (already converted at builder creation time)\n collectRefsFromExpression(include.childWhere.left, refsColumns);\n }\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\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 const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n throw planInvalid(`Missing column for alias ${alias} at index ${index}`);\n }\n 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 return [alias, `include:${alias}`];\n }\n return [alias, `${col.table}.${col.column}`];\n }),\n );\n\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const col = args.projection.columns[i];\n if (!col) {\n continue;\n }\n if (isExpressionBuilder(col)) {\n const operationExpr = col.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 const columnMeta = getColumnMeta(col);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n if (isExpressionBuilder(column)) {\n const operationExpr = column.expr;\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n const columnMeta = getColumnMeta(column);\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n\nexport function createPlan<Row>(\n ast: SelectAst,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n return Object.freeze({\n ast,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n\nexport function createPlanWithExists<Row>(\n ast: SelectAst,\n combinedWhere: BinaryExpr | ExistsExpr | undefined,\n lowered: { body: LoweredStatement },\n paramValues: unknown[],\n planMeta: PlanMeta,\n): ExecutionPlan<Row> {\n const modifiedAst: SelectAst = {\n ...ast,\n ...(combinedWhere !== undefined ? { where: combinedWhere } : {}),\n };\n return Object.freeze({\n ast: modifiedAst,\n sql: lowered.body.sql,\n params: lowered.body.params ?? paramValues,\n meta: {\n ...planMeta,\n lane: 'orm',\n },\n });\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IncludeAst,\n OperationExpr,\n ParamRef,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport { schema } from '@prisma-next/sql-relational-core/schema';\nimport type {\n AnyBinaryBuilder,\n AnyColumnBuilder,\n AnyOrderBuilder,\n BuildOptions,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport { isExpressionBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport { checkIncludeCapabilities } from '../orm/capabilities';\nimport type { OrmIncludeState, RelationFilter } from '../orm/state';\nimport { buildJoinOnExpr } from '../selection/join';\nimport { buildChildOrderByClause } from '../selection/ordering';\nimport { buildWhereExpr } from '../selection/predicates';\nimport {\n buildProjectionState,\n type ProjectionInput,\n type ProjectionState,\n} from '../selection/projection';\nimport { createColumnRef, createSelectAst } from '../utils/ast';\nimport {\n errorChildProjectionEmpty,\n errorChildProjectionMustBeSpecified,\n errorColumnNotFound,\n errorJoinColumnsMustBeDefined,\n errorMissingAlias,\n errorMissingColumn,\n errorModelNotFound,\n errorMultiColumnJoinsNotSupported,\n errorTableNotFound,\n} from '../utils/errors';\n\nexport interface IncludeState {\n readonly alias: string;\n readonly table: TableRef;\n readonly on: {\n kind: 'join-on';\n left: StorageColumn;\n right: StorageColumn;\n };\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n}\n\nexport function buildIncludeAsts(\n includes: OrmIncludeState[],\n contract: SqlContract<SqlStorage>,\n context: QueryLaneContext<SqlContract<SqlStorage>>,\n modelName: string,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n paramCodecs: Record<string, string>,\n): {\n includesAst: IncludeAst[];\n includesForMeta: IncludeState[];\n} {\n const includesAst: IncludeAst[] = [];\n const includesForMeta: IncludeState[] = [];\n\n for (const includeState of includes) {\n checkIncludeCapabilities(contract);\n\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const parentSchemaHandle = schema(context);\n const parentSchemaTable = parentSchemaHandle.tables[parentTableName];\n if (!parentSchemaTable) {\n errorTableNotFound(parentTableName);\n }\n const childSchemaHandle = schema(context);\n const childSchemaTable = childSchemaHandle.tables[includeState.childTable.name];\n if (!childSchemaTable) {\n errorTableNotFound(includeState.childTable.name);\n }\n\n if (\n includeState.relation.on.parentCols.length !== 1 ||\n includeState.relation.on.childCols.length !== 1\n ) {\n errorMultiColumnJoinsNotSupported();\n }\n const parentColName = includeState.relation.on.parentCols[0];\n const childColName = includeState.relation.on.childCols[0];\n if (!parentColName || !childColName) {\n errorJoinColumnsMustBeDefined();\n }\n const parentCol = parentSchemaTable.columns[parentColName];\n const childCol = childSchemaTable.columns[childColName];\n if (!parentCol) {\n errorColumnNotFound(parentColName, parentTableName);\n }\n if (!childCol) {\n errorColumnNotFound(childColName, includeState.childTable.name);\n }\n\n const onExpr = buildJoinOnExpr(\n parentTableName,\n parentColName,\n includeState.childTable.name,\n childColName,\n );\n\n if (!includeState.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const filteredProjection: Record<string, AnyColumnBuilder | NestedProjection> = {};\n for (const [key, value] of Object.entries(includeState.childProjection)) {\n if (value !== true && value !== false) {\n filteredProjection[key] = value as AnyColumnBuilder | NestedProjection;\n }\n }\n if (Object.keys(filteredProjection).length === 0) {\n errorChildProjectionEmpty();\n }\n const childProjectionState = buildProjectionState(\n includeState.childTable,\n filteredProjection as ProjectionInput,\n );\n\n let childWhere: BinaryExpr | undefined;\n if (includeState.childWhere) {\n const whereResult = buildWhereExpr(\n includeState.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n }\n\n const childOrderBy = buildChildOrderByClause(includeState.childOrderBy);\n\n const childProjectionItems: Array<{ alias: string; expr: ColumnRef | OperationExpr }> = [];\n for (let i = 0; i < childProjectionState.aliases.length; i++) {\n const alias = childProjectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = childProjectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n if (isExpressionBuilder(column)) {\n childProjectionItems.push({ alias, expr: column.expr });\n } else {\n // ColumnBuilder - use toExpr() to get ColumnRef\n childProjectionItems.push({ alias, expr: column.toExpr() });\n }\n }\n\n const includeAst: IncludeAst = compact({\n kind: 'includeMany',\n alias: includeState.alias,\n child: compact({\n table: includeState.childTable,\n on: onExpr,\n project: childProjectionItems,\n where: childWhere,\n orderBy: childOrderBy,\n limit: includeState.childLimit,\n }),\n }) as IncludeAst;\n includesAst.push(includeAst);\n\n const includeForMeta: IncludeState = compact({\n alias: includeState.alias,\n table: includeState.childTable,\n on: {\n kind: 'join-on',\n left: parentCol as unknown as StorageColumn,\n right: childCol as unknown as StorageColumn,\n },\n childProjection: childProjectionState,\n childWhere: includeState.childWhere,\n childOrderBy: includeState.childOrderBy,\n childLimit: includeState.childLimit,\n }) as IncludeState;\n includesForMeta.push(includeForMeta);\n }\n\n return { includesAst, includesForMeta };\n}\n\nexport function buildExistsSubqueries(\n relationFilters: RelationFilter[],\n contract: SqlContract<SqlStorage>,\n modelName: string,\n options?: BuildOptions,\n): ExistsExpr[] {\n const existsExprs: ExistsExpr[] = [];\n\n for (const filter of relationFilters) {\n const childTableName = contract.mappings.modelToTable?.[filter.childModelName];\n if (!childTableName) {\n errorModelNotFound(filter.childModelName);\n }\n\n const childTable: TableRef = { kind: 'table', name: childTableName };\n const parentTableName = contract.mappings.modelToTable?.[modelName];\n if (!parentTableName) {\n errorModelNotFound(modelName);\n }\n\n const joinConditions: Array<{ left: ColumnRef; right: ColumnRef }> = [];\n for (let i = 0; i < filter.relation.on.parentCols.length; i++) {\n const parentCol = filter.relation.on.parentCols[i];\n const childCol = filter.relation.on.childCols[i];\n if (!parentCol || !childCol) {\n continue;\n }\n joinConditions.push({\n left: { kind: 'col', table: parentTableName, column: parentCol },\n right: { kind: 'col', table: childTableName, column: childCol },\n });\n }\n\n let childWhere: BinaryExpr | undefined;\n if (filter.childWhere) {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const whereResult = buildWhereExpr(\n filter.childWhere,\n contract,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n let subqueryWhere: BinaryExpr | undefined = childWhere;\n if (joinConditions.length > 0) {\n const firstJoinCondition = joinConditions[0];\n if (firstJoinCondition) {\n const joinWhere: BinaryExpr = {\n kind: 'bin',\n op: 'eq',\n left: firstJoinCondition.left,\n right: firstJoinCondition.right as unknown as ParamRef,\n };\n if (childWhere) {\n subqueryWhere = joinWhere;\n } else {\n subqueryWhere = joinWhere;\n }\n }\n }\n const projectionColumn = joinConditions[0]?.right ?? createColumnRef(childTableName, 'id');\n const subquery = createSelectAst({\n from: childTable,\n project: [{ alias: '_exists', expr: projectionColumn }],\n where: subqueryWhere,\n } as {\n from: TableRef;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef }>;\n where?: BinaryExpr | ExistsExpr;\n });\n\n const notExists = filter.filterType === 'none' || filter.filterType === 'every';\n\n const existsExpr: ExistsExpr = {\n kind: 'exists',\n subquery,\n not: notExists,\n };\n\n existsExprs.push(existsExpr);\n }\n\n return existsExprs;\n}\n\nexport function combineWhereClauses(\n mainWhere: BinaryExpr | ExistsExpr | undefined,\n existsExprs: ExistsExpr[],\n): BinaryExpr | ExistsExpr | undefined {\n if (existsExprs.length === 1) {\n return existsExprs[0];\n }\n if (mainWhere) {\n return mainWhere;\n }\n if (existsExprs.length > 0) {\n return existsExprs[0];\n }\n return undefined;\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { errorIncludeCapabilitiesNotTrue, errorIncludeRequiresCapabilities } from '../utils/errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorIncludeRequiresCapabilities();\n }\n const targetCapabilities = capabilities[target];\n if (capabilities[target]['lateral'] !== true || targetCapabilities['jsonAgg'] !== true) {\n errorIncludeCapabilitiesNotTrue();\n }\n}\n","import type { JoinOnExpr } from '@prisma-next/sql-relational-core/ast';\nimport { createColumnRef, createJoinOnExpr } from '../utils/ast';\n\nexport function buildJoinOnExpr(\n parentTableName: string,\n parentColName: string,\n childTableName: string,\n childColName: string,\n): JoinOnExpr {\n const leftCol = createColumnRef(parentTableName, parentColName);\n const rightCol = createColumnRef(childTableName, childColName);\n return createJoinOnExpr(leftCol, rightCol);\n}\n","import type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, Direction, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyOrderBuilder, OrderBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n extractBaseColumnRef,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport { createColumnRef, createOrderByItem } from '../utils/ast';\n\nexport function buildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = isOperationExpr(orderExpr)\n ? orderExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n\nexport function buildChildOrderByClause(orderBy: AnyOrderBuilder | undefined):\n | ReadonlyArray<{\n expr: ColumnRef | OperationExpr;\n dir: Direction;\n }>\n | undefined {\n if (!orderBy) {\n return undefined;\n }\n\n const orderByBuilder = orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderByBuilder.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderByBuilder.dir)];\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyExpressionSource,\n AnyOrderBuilder,\n JoinOnPredicate,\n NestedProjection,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n isColumnBuilder,\n isExpressionBuilder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\n\nexport interface ProjectionState {\n readonly aliases: string[];\n readonly columns: AnyExpressionSource[];\n}\n\nexport type ProjectionInput = Record<string, AnyExpressionSource | boolean | NestedProjection>;\n\nfunction generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: 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 (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<{\n readonly alias: string;\n readonly table: TableRef;\n readonly on: JoinOnPredicate;\n readonly childProjection: ProjectionState;\n readonly childWhere?: AnyBinaryBuilder;\n readonly childOrderBy?: AnyOrderBuilder;\n readonly childLimit?: number;\n }>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: AnyExpressionSource[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n aliases.push(key);\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: {\n nativeType: 'jsonb',\n codecId: 'core/json@1',\n nullable: true,\n },\n toExpr() {\n return { kind: 'col', table: matchingInclude.table.name, column: '' };\n },\n } as AnyExpressionSource);\n } else if (isColumnBuilder(value) || isExpressionBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type {\n BinaryExpr,\n Direction,\n ExistsExpr,\n Expression,\n IncludeAst,\n IncludeRef,\n SelectAst,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport { isExpressionBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { IncludeState } from '../relations/include-plan';\nimport { createSelectAst, createTableRef } from '../utils/ast';\nimport { errorInvalidColumn, errorMissingAlias, errorMissingColumn } from '../utils/errors';\nimport type { ProjectionState } from './projection';\n\nexport function buildProjectionItems(\n projectionState: ProjectionState,\n includesForMeta: ReadonlyArray<IncludeState>,\n): Array<{ alias: string; expr: Expression | IncludeRef }> {\n const projectEntries: Array<{ alias: string; expr: Expression | IncludeRef }> = [];\n for (let i = 0; i < projectionState.aliases.length; i++) {\n const alias = projectionState.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projectionState.columns[i];\n if (!column) {\n errorMissingColumn(alias, i);\n }\n\n const matchingInclude = includesForMeta.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else if (isExpressionBuilder(column)) {\n // ExpressionBuilder (operation result) - use its expr\n projectEntries.push({\n alias,\n expr: column.expr,\n });\n } else {\n // ColumnBuilder - use toExpr() to get ColumnRef\n const expr = column.toExpr();\n // Validate the expression has valid table and column values\n if (expr.kind === 'col' && (!expr.table || !expr.column)) {\n errorInvalidColumn(alias, i);\n }\n projectEntries.push({\n alias,\n expr,\n });\n }\n }\n return projectEntries;\n}\n\nexport function buildSelectAst(params: {\n table: TableRef;\n projectEntries: Array<{ alias: string; expr: Expression | IncludeRef }>;\n includesAst?: ReadonlyArray<IncludeAst>;\n whereExpr?: BinaryExpr | ExistsExpr;\n orderByClause?: ReadonlyArray<{\n expr: Expression;\n dir: Direction;\n }>;\n limit?: number;\n}): SelectAst {\n const { table, projectEntries, includesAst, whereExpr, orderByClause, limit } = params;\n return createSelectAst({\n from: createTableRef(table.name),\n project: projectEntries,\n ...(includesAst ? { includes: includesAst } : {}),\n ...(whereExpr ? { where: whereExpr } : {}),\n ...(orderByClause ? { orderBy: orderByClause } : {}),\n ...(limit !== undefined ? { limit } : {}),\n });\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\n\nexport type OrmContext<TContract extends SqlContract<SqlStorage>> = QueryLaneContext<TContract>;\n\nexport function createOrmContext<TContract extends SqlContract<SqlStorage>>(\n context: QueryLaneContext<TContract>,\n): OrmContext<TContract> {\n return context;\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { ExtractCodecTypes, SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { OrmModelBuilderImpl } from './orm/builder';\nimport type { OrmBuilderOptions, OrmRegistry } from './orm-types';\n\ntype ModelName<TContract extends SqlContract<SqlStorage>> = keyof TContract['models'] & string;\n\nexport function orm<TContract extends SqlContract<SqlStorage>>(\n options: OrmBuilderOptions<TContract>,\n): OrmRegistry<TContract, ExtractCodecTypes<TContract>> {\n const contract = options.context.contract;\n type CodecTypes = ExtractCodecTypes<TContract>;\n\n return new Proxy({} as OrmRegistry<TContract, CodecTypes>, {\n get(_target, prop) {\n if (typeof prop !== 'string') {\n return undefined;\n }\n\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n if (\n !contract.models ||\n typeof contract.models !== 'object' ||\n !(modelName in contract.models)\n ) {\n throw planInvalid(`Model ${prop} (resolved to ${modelName}) not found in contract`);\n }\n\n return () =>\n new OrmModelBuilderImpl<TContract, CodecTypes, typeof modelName>(options, modelName);\n },\n has(_target, prop) {\n if (typeof prop !== 'string') {\n return false;\n }\n const modelName = (prop.charAt(0).toUpperCase() + prop.slice(1)) as ModelName<TContract>;\n return contract.models && typeof contract.models === 'object' && modelName in contract.models;\n },\n });\n}\n\n// Re-export types for convenience\nexport type {\n ModelColumnAccessor,\n OrmBuilderOptions,\n OrmModelBuilder,\n OrmRegistry,\n OrmRelationAccessor,\n OrmRelationFilterBuilder,\n OrmWhereProperty,\n} from './orm-types';\n"],"mappings":"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","names":["planInvalid","schema","planInvalid","planInvalid","schema","planInvalid","isColumnBuilder","isExpressionBuilder","compact","schema","isExpressionBuilder","isOperationExpr","isOperationExpr","isColumnBuilder","isExpressionBuilder","isColumnBuilder","isExpressionBuilder","schema","isExpressionBuilder","compact","isExpressionBuilder","isExpressionBuilder","schema","planInvalid","planInvalid","planInvalid"]}
|