@prisma-next/sql-builder 0.5.0-dev.9 → 0.5.1

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.
@@ -4,6 +4,7 @@ import type { SqlOperationEntry } from '@prisma-next/sql-operations';
4
4
  import {
5
5
  AndExpr,
6
6
  type AnyExpression as AstExpression,
7
+ collectOrderedParamRefs,
7
8
  IdentifierRef,
8
9
  OrderByItem,
9
10
  ProjectionItem,
@@ -31,7 +32,6 @@ import type {
31
32
  ScopeField,
32
33
  ScopeTable,
33
34
  } from '../scope';
34
- import type { ExpressionImpl } from './expression-impl';
35
35
  import { createFieldProxy } from './field-proxy';
36
36
  import { createAggregateFunctions, createFunctions } from './functions';
37
37
 
@@ -110,6 +110,20 @@ export function combineWhereExprs(exprs: readonly AstExpression[]): AstExpressio
110
110
  return AndExpr.of(exprs);
111
111
  }
112
112
 
113
+ /**
114
+ * Same uniqueness rule as the field-proxy's `findUniqueNamespaceFor`: when exactly one namespace owns a top-level field, the binding is unambiguous. Used by `select('col', ...)` to attach `refs` metadata to the resulting `ProjectionItem` while keeping the AST as `IdentifierRef` (so SQL renders unchanged).
115
+ */
116
+ function findUniqueNamespaceFor(scope: Scope, fieldName: string): string | undefined {
117
+ let found: string | undefined;
118
+ for (const [namespace, fields] of Object.entries(scope.namespaces)) {
119
+ if (Object.hasOwn(fields, fieldName)) {
120
+ if (found !== undefined) return undefined;
121
+ found = namespace;
122
+ }
123
+ }
124
+ return found;
125
+ }
126
+
113
127
  export function buildSelectAst(state: BuilderState): SelectAst {
114
128
  const where = combineWhereExprs(state.where);
115
129
  return new SelectAst({
@@ -130,46 +144,14 @@ export function buildSelectAst(state: BuilderState): SelectAst {
130
144
 
131
145
  export function buildQueryPlan<Row = unknown>(
132
146
  ast: import('@prisma-next/sql-relational-core/ast').AnyQueryAst,
133
- rowFields: Record<string, ScopeField>,
134
147
  ctx: BuilderContext,
135
148
  ): SqlQueryPlan<Row> {
136
- const projectionTypes: Record<string, string> = {};
137
- const codecs: Record<string, string> = {};
138
- for (const [alias, field] of Object.entries(rowFields)) {
139
- projectionTypes[alias] = field.codecId;
140
- codecs[alias] = field.codecId;
141
- }
142
-
143
- const paramRefs = ast.collectParamRefs();
144
- const seen = new Set<import('@prisma-next/sql-relational-core/ast').ParamRef>();
145
- const uniqueRefs: import('@prisma-next/sql-relational-core/ast').ParamRef[] = [];
146
- for (const ref of paramRefs) {
147
- if (!seen.has(ref)) {
148
- seen.add(ref);
149
- uniqueRefs.push(ref);
150
- }
151
- }
152
- const paramValues = uniqueRefs.map((r) => r.value);
153
- const paramDescriptors = uniqueRefs.map((ref, i) => ({
154
- index: i + 1,
155
- source: 'dsl' as const,
156
- ...(ref.codecId ? { codecId: ref.codecId } : {}),
157
- }));
158
-
159
- for (const [i, ref] of uniqueRefs.entries()) {
160
- if (ref.codecId) codecs[`$${i + 1}`] = ref.codecId;
161
- }
162
-
163
- const hasProjectionTypes = Object.keys(projectionTypes).length > 0;
164
- const hasCodecs = Object.keys(codecs).length > 0;
149
+ const paramValues = collectOrderedParamRefs(ast).map((r) => r.value);
165
150
 
166
151
  const meta: PlanMeta = Object.freeze({
167
152
  target: ctx.target,
168
153
  storageHash: ctx.storageHash,
169
154
  lane: 'dsl',
170
- paramDescriptors,
171
- ...(hasProjectionTypes ? { projectionTypes } : {}),
172
- ...(hasCodecs ? { annotations: Object.freeze({ codecs: Object.freeze(codecs) }) } : {}),
173
155
  });
174
156
 
175
157
  return Object.freeze({ ast, params: paramValues, meta });
@@ -179,7 +161,7 @@ export function buildPlan<Row = unknown>(
179
161
  state: BuilderState,
180
162
  ctx: BuilderContext,
181
163
  ): SqlQueryPlan<Row> {
182
- return buildQueryPlan<Row>(buildSelectAst(state), state.rowFields, ctx);
164
+ return buildQueryPlan<Row>(buildSelectAst(state), ctx);
183
165
  }
184
166
 
185
167
  export function tableToScope(name: string, table: StorageTable): Scope {
@@ -257,7 +239,9 @@ export function resolveSelectArgs(
257
239
  for (const colName of args as string[]) {
258
240
  const field = scope.topLevel[colName];
259
241
  if (!field) throw new Error(`Column "${colName}" not found in scope`);
260
- projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName)));
242
+ const namespace = findUniqueNamespaceFor(scope, colName);
243
+ const refs = namespace ? { table: namespace, column: colName } : undefined;
244
+ projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName), field.codecId, refs));
261
245
  newRowFields[colName] = field;
262
246
  }
263
247
  return { projections, newRowFields };
@@ -271,8 +255,9 @@ export function resolveSelectArgs(
271
255
  ) => Expression<ScopeField>;
272
256
  const fns = createAggregateFunctions(ctx.queryOperationTypes);
273
257
  const result = exprFn(createFieldProxy(scope), fns);
274
- projections.push(ProjectionItem.of(alias, result.buildAst()));
275
- newRowFields[alias] = (result as ExpressionImpl).field;
258
+ const field = result.returnType;
259
+ projections.push(ProjectionItem.of(alias, result.buildAst(), field.codecId));
260
+ newRowFields[alias] = field;
276
261
  return { projections, newRowFields };
277
262
  }
278
263
 
@@ -284,8 +269,9 @@ export function resolveSelectArgs(
284
269
  const fns = createAggregateFunctions(ctx.queryOperationTypes);
285
270
  const record = callbackFn(createFieldProxy(scope), fns);
286
271
  for (const [key, expr] of Object.entries(record)) {
287
- projections.push(ProjectionItem.of(key, expr.buildAst()));
288
- newRowFields[key] = (expr as ExpressionImpl).field;
272
+ const field = expr.returnType;
273
+ projections.push(ProjectionItem.of(key, expr.buildAst(), field.codecId));
274
+ newRowFields[key] = field;
289
275
  }
290
276
  return { projections, newRowFields };
291
277
  }
@@ -1,20 +1,25 @@
1
1
  import type { AnyExpression as AstExpression } from '@prisma-next/sql-relational-core/ast';
2
- import type { Expression } from '../expression';
3
- // biome-ignore lint/correctness/noUnusedImports: used in `declare` property
4
- import type { ExpressionType, ScopeField } from '../scope';
2
+ import type { Expression } from '@prisma-next/sql-relational-core/expression';
3
+ import type { ScopeField } from '../scope';
5
4
 
6
5
  /**
7
- * Runtime wrapper around a relational-core AST expression node.
8
- * Carries ScopeField metadata (codecId, nullable) for plan generation.
6
+ * Runtime wrapper around a relational-core AST expression node. Carries ScopeField metadata (codecId, nullable) so aggregate-like combinators can propagate the input codec onto their result.
7
+ *
8
+ * `refs` records the column-bound binding (`{ table, column }`) when known — the field-proxy populates it for both the namespaced form (`f.user.email` → `ColumnRef`) and the top-level shortcut (`f.email` → `IdentifierRef` + refs metadata). Encode-side dispatch and the `validateParamRefRefs` pass read it via `refsOf(expression)`.
9
9
  */
10
10
  export class ExpressionImpl<T extends ScopeField = ScopeField> implements Expression<T> {
11
- declare readonly [ExpressionType]: T;
12
11
  private readonly ast: AstExpression;
13
- readonly field: T;
12
+ readonly returnType: T;
13
+ readonly refs: { readonly table: string; readonly column: string } | undefined;
14
14
 
15
- constructor(ast: AstExpression, field: T) {
15
+ constructor(
16
+ ast: AstExpression,
17
+ returnType: T,
18
+ refs?: { readonly table: string; readonly column: string },
19
+ ) {
16
20
  this.ast = ast;
17
- this.field = field;
21
+ this.returnType = returnType;
22
+ this.refs = refs;
18
23
  }
19
24
 
20
25
  buildAst(): AstExpression {
@@ -3,12 +3,31 @@ import type { FieldProxy } from '../expression';
3
3
  import type { Scope, ScopeTable } from '../scope';
4
4
  import { ExpressionImpl } from './expression-impl';
5
5
 
6
+ /**
7
+ * For a top-level field name, find the namespace (table alias) that contributed it. When exactly one namespace owns the field, the top-level binding is unambiguously column-bound and we record that `(table, column)` pair on the `ExpressionImpl` so encode-side dispatch (`forColumn`) and the `validateParamRefRefs` pass can find it. The AST stays as `IdentifierRef` to preserve SQL rendering — adapters render top-level
8
+ * identifiers without an explicit table qualifier — so this change is metadata-only and produces no SQL drift.
9
+ */
10
+ function findUniqueNamespaceFor(scope: Scope, fieldName: string): string | undefined {
11
+ let found: string | undefined;
12
+ for (const [namespace, fields] of Object.entries(scope.namespaces)) {
13
+ if (Object.hasOwn(fields, fieldName)) {
14
+ if (found !== undefined) return undefined;
15
+ found = namespace;
16
+ }
17
+ }
18
+ return found;
19
+ }
20
+
6
21
  export function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S> {
7
22
  return new Proxy({} as FieldProxy<S>, {
8
23
  get(_target, prop: string) {
9
24
  if (Object.hasOwn(scope.topLevel, prop)) {
10
25
  const topField = scope.topLevel[prop];
11
- if (topField) return new ExpressionImpl(IdentifierRef.of(prop), topField);
26
+ if (topField) {
27
+ const namespace = findUniqueNamespaceFor(scope, prop);
28
+ const refs = namespace ? { table: namespace, column: prop } : undefined;
29
+ return new ExpressionImpl(IdentifierRef.of(prop), topField, refs);
30
+ }
12
31
  }
13
32
 
14
33
  if (Object.hasOwn(scope.namespaces, prop)) {
@@ -9,35 +9,83 @@ import {
9
9
  ListExpression,
10
10
  LiteralExpr,
11
11
  NullCheckExpr,
12
- OperationExpr,
13
12
  OrExpr,
14
- ParamRef,
15
13
  SubqueryExpr,
16
14
  } from '@prisma-next/sql-relational-core/ast';
15
+ import { refsOf, toExpr } from '@prisma-next/sql-relational-core/expression';
17
16
  import type {
18
17
  AggregateFunctions,
19
18
  AggregateOnlyFunctions,
20
19
  BooleanCodecType,
21
20
  BuiltinFunctions,
21
+ CodecExpression,
22
22
  Expression,
23
- ExpressionOrValue,
24
23
  Functions,
25
24
  } from '../expression';
26
25
  import type { QueryContext, ScopeField, Subquery } from '../scope';
27
26
  import { ExpressionImpl } from './expression-impl';
28
27
 
29
28
  type CodecTypes = Record<string, { readonly input: unknown }>;
30
- type ExprOrVal<T extends ScopeField = ScopeField> = ExpressionOrValue<T, CodecTypes>;
29
+ // Runtime-level ExprOrVal accepts any codec, any nullability. Concrete codec typing lives on the public BuiltinFunctions surface in `../expression`.
30
+ type ExprOrVal<CodecId extends string = string, N extends boolean = boolean> = CodecExpression<
31
+ CodecId,
32
+ N,
33
+ CodecTypes
34
+ >;
31
35
 
32
36
  const BOOL_FIELD: BooleanCodecType = { codecId: 'pg/bool@1', nullable: false };
33
37
 
34
- function resolve(value: ExprOrVal): AstExpression {
35
- if (value instanceof ExpressionImpl) return value.buildAst();
36
- return ParamRef.of(value);
38
+ const resolve = toExpr;
39
+
40
+ /**
41
+ * Resolve a binary-comparison operand into an AST expression, threading the column-bound side's `codecId` + `refs` to the raw-value side.
42
+ *
43
+ * For `fns.eq(f.email, 'alice@example.com')`, `f.email` is the column-bound expression carrying a `ColumnRef` AST and a `returnType.codecId` (`pg/varchar@1`); the raw string operand has no codec context. By deriving the codec context from the column-bound side and forwarding it via `toExpr(value, codecId, refs)`, the resulting `ParamRef` carries the column refs that encode-side `forColumn` dispatch needs (and that the
44
+ * validator pass requires for parameterized codec ids like `pg/varchar@1` with a length parameter).
45
+ */
46
+ function resolveOperand(
47
+ operand: ExprOrVal,
48
+ otherCodecId?: string,
49
+ otherRefs?: { table: string; column: string },
50
+ ): AstExpression {
51
+ if (isExpressionLike(operand)) return operand.buildAst();
52
+ return toExpr(operand, otherCodecId, otherRefs);
37
53
  }
38
54
 
39
- function resolveToAst(value: ExprOrVal): AstExpression {
40
- if (value instanceof ExpressionImpl) return value.buildAst();
55
+ function isExpressionLike(
56
+ value: unknown,
57
+ ): value is { buildAst: () => AstExpression; returnType?: { codecId: string } } {
58
+ return (
59
+ typeof value === 'object' &&
60
+ value !== null &&
61
+ 'buildAst' in value &&
62
+ typeof (value as { buildAst: unknown }).buildAst === 'function'
63
+ );
64
+ }
65
+
66
+ function operandCodecId(operand: ExprOrVal): string | undefined {
67
+ if (!isExpressionLike(operand)) return undefined;
68
+ return (operand as { returnType?: { codecId: string } }).returnType?.codecId;
69
+ }
70
+
71
+ function operandRefs(operand: ExprOrVal): { table: string; column: string } | undefined {
72
+ return refsOf(operand);
73
+ }
74
+
75
+ /**
76
+ * Resolves an Expression via `buildAst()`, or wraps a raw value as a `LiteralExpr` — an SQL literal inlined into the query text, not a bound parameter.
77
+ *
78
+ * Used for `and` / `or` operands. The usual operand is an `Expression<bool>` (e.g. the result of `fns.eq`), which this function passes through by calling `buildAst()`. The only time the raw-value branch fires is when the caller writes `fns.and(true, x)` or similar — inlining `TRUE`/`FALSE` literals lets the SQL planner statically simplify `TRUE AND x` to `x`, which it cannot do for an opaque `ParamRef`.
79
+ */
80
+ function toLiteralExpr(value: unknown): AstExpression {
81
+ if (
82
+ typeof value === 'object' &&
83
+ value !== null &&
84
+ 'buildAst' in value &&
85
+ typeof (value as { buildAst: unknown }).buildAst === 'function'
86
+ ) {
87
+ return (value as { buildAst(): AstExpression }).buildAst();
88
+ }
41
89
  return new LiteralExpr(value);
42
90
  }
43
91
 
@@ -45,20 +93,34 @@ function boolExpr(astNode: AstExpression): ExpressionImpl<BooleanCodecType> {
45
93
  return new ExpressionImpl(astNode, BOOL_FIELD);
46
94
  }
47
95
 
96
+ function binaryWithSharedCodec(
97
+ a: ExprOrVal,
98
+ b: ExprOrVal,
99
+ build: (left: AstExpression, right: AstExpression) => AstExpression,
100
+ ): AstExpression {
101
+ const aCodecId = operandCodecId(a);
102
+ const bCodecId = operandCodecId(b);
103
+ const aRefs = operandRefs(a);
104
+ const bRefs = operandRefs(b);
105
+ const left = resolveOperand(a, bCodecId, bRefs);
106
+ const right = resolveOperand(b, aCodecId, aRefs);
107
+ return build(left, right);
108
+ }
109
+
48
110
  function eq(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {
49
111
  if (b === null) return boolExpr(NullCheckExpr.isNull(resolve(a)));
50
112
  if (a === null) return boolExpr(NullCheckExpr.isNull(resolve(b)));
51
- return boolExpr(new BinaryExpr('eq', resolve(a), resolve(b)));
113
+ return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('eq', l, r)));
52
114
  }
53
115
 
54
116
  function ne(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {
55
117
  if (b === null) return boolExpr(NullCheckExpr.isNotNull(resolve(a)));
56
118
  if (a === null) return boolExpr(NullCheckExpr.isNotNull(resolve(b)));
57
- return boolExpr(new BinaryExpr('neq', resolve(a), resolve(b)));
119
+ return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr('neq', l, r)));
58
120
  }
59
121
 
60
122
  function comparison(a: ExprOrVal, b: ExprOrVal, op: BinaryOp): ExpressionImpl<BooleanCodecType> {
61
- return boolExpr(new BinaryExpr(op, resolve(a), resolve(b)));
123
+ return boolExpr(binaryWithSharedCodec(a, b, (l, r) => new BinaryExpr(op, l, r)));
62
124
  }
63
125
 
64
126
  function inOrNotIn(
@@ -67,10 +129,12 @@ function inOrNotIn(
67
129
  op: 'in' | 'notIn',
68
130
  ): ExpressionImpl<BooleanCodecType> {
69
131
  const left = expr.buildAst();
132
+ const leftCodecId = expr.returnType.codecId;
133
+ const leftRefs = refsOf(expr);
70
134
  const binaryFn = op === 'in' ? BinaryExpr.in : BinaryExpr.notIn;
71
135
 
72
136
  if (Array.isArray(valuesOrSubquery)) {
73
- const refs = valuesOrSubquery.map((v) => resolve(v));
137
+ const refs = valuesOrSubquery.map((v) => resolveOperand(v, leftCodecId, leftRefs));
74
138
  return boolExpr(binaryFn(left, ListExpression.of(refs)));
75
139
  }
76
140
  return boolExpr(binaryFn(left, SubqueryExpr.of(valuesOrSubquery.buildAst())));
@@ -81,7 +145,7 @@ function numericAgg(
81
145
  expr: Expression<ScopeField>,
82
146
  ): ExpressionImpl<{ codecId: string; nullable: true }> {
83
147
  return new ExpressionImpl(AggregateExpr[fn](expr.buildAst()), {
84
- codecId: (expr as ExpressionImpl).field.codecId,
148
+ codecId: expr.returnType.codecId,
85
149
  nullable: true as const,
86
150
  });
87
151
  }
@@ -94,8 +158,10 @@ function createBuiltinFunctions() {
94
158
  gte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gte'),
95
159
  lt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lt'),
96
160
  lte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lte'),
97
- and: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(AndExpr.of(exprs.map(resolveToAst))),
98
- or: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(OrExpr.of(exprs.map(resolveToAst))),
161
+ and: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>
162
+ boolExpr(AndExpr.of(exprs.map(toLiteralExpr))),
163
+ or: (...exprs: ExprOrVal<'pg/bool@1', boolean>[]) =>
164
+ boolExpr(OrExpr.of(exprs.map(toLiteralExpr))),
99
165
  exists: (subquery: Subquery<Record<string, ScopeField>>) =>
100
166
  boolExpr(ExistsExpr.exists(subquery.buildAst())),
101
167
  notExists: (subquery: Subquery<Record<string, ScopeField>>) =>
@@ -127,34 +193,8 @@ function createAggregateOnlyFunctions() {
127
193
  } satisfies AggregateOnlyFunctions;
128
194
  }
129
195
 
130
- function createExtensionFunction(
131
- name: string,
132
- entry: SqlOperationEntry,
133
- ): (...args: ExprOrVal[]) => ExpressionImpl {
134
- return (...args: ExprOrVal[]) => {
135
- const resolvedArgs = args.map((arg, i) => {
136
- if (arg instanceof ExpressionImpl) return arg.buildAst();
137
- const codecId = entry.args[i]?.codecId;
138
- return ParamRef.of(arg, codecId ? { codecId } : undefined);
139
- });
140
- const self = resolvedArgs[0] as AstExpression;
141
- const restArgs = resolvedArgs.slice(1);
142
-
143
- return new ExpressionImpl(
144
- new OperationExpr({
145
- method: name,
146
- self,
147
- args: restArgs.length > 0 ? restArgs : undefined,
148
- returns: entry.returns,
149
- lowering: entry.lowering,
150
- }),
151
- entry.returns,
152
- );
153
- };
154
- }
155
-
156
196
  export function createFunctions<QC extends QueryContext>(
157
- queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,
197
+ operations: Readonly<Record<string, SqlOperationEntry>>,
158
198
  ): Functions<QC> {
159
199
  const builtins = createBuiltinFunctions();
160
200
 
@@ -163,19 +203,17 @@ export function createFunctions<QC extends QueryContext>(
163
203
  const builtin = (builtins as Record<string, unknown>)[prop];
164
204
  if (builtin) return builtin;
165
205
 
166
- const extOp = queryOperationTypes[prop];
167
- if (extOp) {
168
- return createExtensionFunction(prop, extOp);
169
- }
206
+ const op = operations[prop];
207
+ if (op) return op.impl;
170
208
  return undefined;
171
209
  },
172
210
  });
173
211
  }
174
212
 
175
213
  export function createAggregateFunctions<QC extends QueryContext>(
176
- queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,
214
+ operations: Readonly<Record<string, SqlOperationEntry>>,
177
215
  ): AggregateFunctions<QC> {
178
- const baseFns = createFunctions<QC>(queryOperationTypes);
216
+ const baseFns = createFunctions<QC>(operations);
179
217
  const aggregates = createAggregateOnlyFunctions();
180
218
 
181
219
  return new Proxy({} as AggregateFunctions<QC>, {
@@ -5,6 +5,7 @@ import {
5
5
  DeleteAst,
6
6
  InsertAst,
7
7
  ParamRef,
8
+ ProjectionItem,
8
9
  TableSource,
9
10
  UpdateAst,
10
11
  } from '@prisma-next/sql-relational-core/ast';
@@ -40,17 +41,31 @@ function buildParamValues(
40
41
  const params: Record<string, ParamRef> = {};
41
42
  for (const [col, value] of Object.entries(values)) {
42
43
  const column = table.columns[col];
43
- params[col] = ParamRef.of(value, column ? { codecId: column.codecId } : undefined);
44
+ params[col] = ParamRef.of(
45
+ value,
46
+ column ? { codecId: column.codecId, refs: { table: tableName, column: col } } : undefined,
47
+ );
44
48
  }
45
49
  for (const def of ctx.applyMutationDefaults({ op, table: tableName, values })) {
46
50
  const column = table.columns[def.column];
47
- params[def.column] = ParamRef.of(def.value, column ? { codecId: column.codecId } : undefined);
51
+ params[def.column] = ParamRef.of(
52
+ def.value,
53
+ column
54
+ ? { codecId: column.codecId, refs: { table: tableName, column: def.column } }
55
+ : undefined,
56
+ );
48
57
  }
49
58
  return params;
50
59
  }
51
60
 
52
- function buildReturningColumnRefs(tableName: string, columns: string[]): ColumnRef[] {
53
- return columns.map((col) => ColumnRef.of(tableName, col));
61
+ function buildReturningProjections(
62
+ tableName: string,
63
+ columns: string[],
64
+ rowFields: Record<string, ScopeField>,
65
+ ): ProjectionItem[] {
66
+ return columns.map((col) =>
67
+ ProjectionItem.of(col, ColumnRef.of(tableName, col), rowFields[col]?.codecId),
68
+ );
54
69
  }
55
70
 
56
71
  function evaluateWhere(
@@ -131,12 +146,13 @@ export class InsertQueryImpl<
131
146
  let ast = InsertAst.into(TableSource.named(this.#tableName)).withValues(paramValues);
132
147
 
133
148
  if (this.#returningColumns.length > 0) {
134
- ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
149
+ ast = ast.withReturning(
150
+ buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),
151
+ );
135
152
  }
136
153
 
137
154
  return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
138
155
  ast,
139
- this.#rowFields,
140
156
  this.ctx,
141
157
  );
142
158
  }
@@ -234,12 +250,13 @@ export class UpdateQueryImpl<
234
250
  .withWhere(whereExpr);
235
251
 
236
252
  if (this.#returningColumns.length > 0) {
237
- ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
253
+ ast = ast.withReturning(
254
+ buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),
255
+ );
238
256
  }
239
257
 
240
258
  return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
241
259
  ast,
242
- this.#rowFields,
243
260
  this.ctx,
244
261
  );
245
262
  }
@@ -317,12 +334,13 @@ export class DeleteQueryImpl<
317
334
  let ast = DeleteAst.from(TableSource.named(this.#tableName)).withWhere(whereExpr);
318
335
 
319
336
  if (this.#returningColumns.length > 0) {
320
- ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
337
+ ast = ast.withReturning(
338
+ buildReturningProjections(this.#tableName, this.#returningColumns, this.#rowFields),
339
+ );
321
340
  }
322
341
 
323
342
  return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
324
343
  ast,
325
- this.#rowFields,
326
344
  this.ctx,
327
345
  );
328
346
  }
package/src/scope.ts CHANGED
@@ -1,21 +1,24 @@
1
1
  import type { QueryOperationTypesBase, StorageTable } from '@prisma-next/sql-contract/types';
2
2
  import type { AnyFromSource, SelectAst } from '@prisma-next/sql-relational-core/ast';
3
+ import type { ScopeField } from '@prisma-next/sql-relational-core/expression';
4
+
5
+ export type { ScopeField };
6
+
7
+ export type CodecTypesBase = Record<string, { readonly input: unknown; readonly output: unknown }>;
8
+
9
+ export type TraitField = { traits: readonly string[]; nullable: boolean };
10
+ export type FieldSpec = ScopeField | TraitField;
3
11
 
4
12
  export type GatedMethod<Capabilities, Required, Method> = Capabilities extends Required
5
13
  ? Method
6
14
  : never;
7
15
 
8
- type CodecTypesBase = Record<string, { readonly input: unknown; readonly output: unknown }>;
9
- export declare const ExpressionType: unique symbol;
10
16
  export declare const JoinOuterScope: unique symbol;
11
17
  export declare const SubqueryMarker: unique symbol;
12
18
 
13
19
  export type Expand<T> = { [K in keyof T]: T[K] } & unknown;
14
20
  export type EmptyRow = Record<never, ScopeField>;
15
21
 
16
- export type ScopeField = { codecId: string; nullable: boolean };
17
- export type TraitField = { traits: readonly string[]; nullable: boolean };
18
- export type FieldSpec = ScopeField | TraitField;
19
22
  export type ScopeTable = Record<string, ScopeField>;
20
23
 
21
24
  export type Scope = {
@@ -83,4 +86,4 @@ export type QueryContext = {
83
86
  readonly resolvedColumnOutputTypes: Record<string, unknown>;
84
87
  };
85
88
 
86
- export type { CodecTypesBase, StorageTable };
89
+ export type { StorageTable };
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-Cggb4WvK.d.mts","names":[],"sources":["../src/scope.ts","../src/expression.ts","../src/resolve.ts","../src/types/mutation-query.ts","../src/types/joined-tables.ts","../src/types/grouped-query.ts","../src/types/select-query.ts","../src/types/shared.ts","../src/types/table-proxy.ts","../src/types/db.ts"],"sourcesContent":[],"mappings":"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ECkDnB,iBDlDmB,CAAA;IAAiB,OAAA,ECkDP,ODlDO;IAAtB,QAAA,EAAA,OAAA;EAAuC,CAAA,ECkDM,EDlDN,CAAA,GAAA,IAAA,EAAA,CAAA,ECmDrD,iBDnDqD,CAAA;IAAQ,OAAA,ECmDhC,ODnDgC;IAAgB,QAAA,EAAA,OAAA;EAA/B,CAAA,ECmDa,EDnDb,CAAA,GAAA,IAAA,EAAA,GCoD9C,UDpD8C,CCoDnC,gBDpDmC,CAAA;EAAvC,EAAA,EAAA,CAAA,YCqDG,UDrDH,CAAA,CAAA,CAAA,ECsDP,iBDtDO,CCsDW,GDtDX,ECsDc,EDtDd,CAAA,GAAA,IAAA,EAAA,CAAA,ECuDP,iBDvDO,CCuDW,GDvDX,ECuDc,EDvDd,CAAA,GAAA,IAAA,EAAA,GCwDP,UDxDO,CCwDI,gBDxDJ,CAAA;EAAM,EAAA,EAAA,CAAA,YCyDH,UDzDG,CAAA,CAAA,CAAA,EC0Db,iBD1Da,CC0DK,GD1DL,EC0DQ,ED1DR,CAAA,EAAA,CAAA,EC2Db,iBD3Da,CC2DK,GD3DL,EC2DQ,ED3DR,CAAA,EAAA,GC4Db,UD5Da,CC4DF,gBD5DE,CAAA;EAGR,GAAA,EAAA,CAAA,YC0DM,UD1DY,CAAA,CAAA,CAAA,EC2DvB,iBD3DuB,CC2DL,GD3DK,EC2DF,ED3DE,CAAA,EAAA,CAAA,EC4DvB,iBD5DuB,CC4DL,GD5DK,EC4DF,ED5DE,CAAA,EAAA,GC6DvB,UD7DuB,CC6DZ,gBD7DY,CAAA;EAAW,EAAA,EAAA,CAAA,YC8DxB,UD9DwB,CAAA,CAAA,CAAA,EC+DlC,iBD/DkC,CC+DhB,GD/DgB,EC+Db,ED/Da,CAAA,EAAA,CAAA,ECgElC,iBDhEkC,CCgEhB,GDhEgB,ECgEb,EDhEa,CAAA,EAAA,GCiElC,UDjEkC,CCiEvB,gBDjEuB,CAAA;EAC3B,GAAA,EAAA,CAAA,YCiEI,UDjEJ,CAAA,CAAA,CAAA,ECkEP,iBDlEO,CCkEW,GDlEX,ECkEc,EDlEd,CAAA,EAAA,CAAA,ECmEP,iBDnEO,CCmEW,GDnEX,ECmEc,EDnEd,CAAA,EAAA,GCoEP,UDpEO,CCoEI,gBDpEJ,CAAA;EAAe,GAAA,EAAA,CAAA,GAAA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,CAAA,EAAA,GM+CzB,UN/CyB,CM+Cd,UN/Cc,CAAA,CAAA,EMgD7B,WNhD6B,CMgDjB,ENhDiB,EMgDb,cNhDa,EMgDG,ONhDH,CAAA;EAAI,CAAA,CAAA;;;;AAT9B,UOyBK,cPzBM,CAAA,WOyBoB,YPzBpB,EAAA,oBOyBsD,KPzBtD,CAAA,CAAA;EAAmC,IAAA,CAAA,cO0BrC,UP1BqC,CO0B1B,UP1B0B,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2B/C,KP3B+C,CAAA,EO4BrD,WP5BqD,CO4BzC,EP5ByC,EO4BrC,WP5BqC,CO4BzB,WP5ByB,EO4BZ,KP5BY,CAAA,OO4BC,cP5BD,CAAA,CAAA,EO4BmB,QP5BnB,CAAA;;AACtD,UO8Ba,UP9Bb,CAAA,WO+BS,YP/BT,EAAA,uBOgCqB,KPhCrB,EAAA,gBOiCc,MPjCd,CAAA,MAAA,EOiC6B,UPjC7B,CAAA,GOiC2C,QPjC3C,CAAA,CAAA;EAAM,MAAA,CAAA,gBAAA,CAAA,MOmCsB,cPnCtB,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EOoCM,OPpCN,CAAA,EOqCL,WPrCK,COqCO,EPrCP,EOqCW,cPrCX,EOqC2B,UPrC3B,COqCsC,OPrCtC,EOqC+C,cPrC/C,CAAA,UAAA,CAAA,EOqC2E,OPrC3E,CAAA,CAAA;EAGL,MAAA,CAAA,cAAc,MAAA,EAAG,cOoCuB,UPpCjB,CAAA,CAAA,KAAA,EOqCjB,KPrCiB,EAAA,IAAA,EAAA,CAAA,MAAA,EOsCT,UPtCS,COsCE,cPtCF,CAAA,EAAA,GAAA,EOsCwB,kBPtCxB,COsC2C,EPtC3C,CAAA,EAAA,GOsCmD,UPtCnD,COsC8D,KPtC9D,CAAA,CAAA,EOuCvB,WPvCuB,COuCX,EPvCW,EOuCP,cPvCO,EOuCS,SPvCT,COuCmB,OPvCnB,EOuC4B,KPvC5B,EOuCmC,KPvCnC,CAAA,CAAA;EACP,MAAA,CAAA,eOwCG,MPxC0B,CAAA,MAAA,EOwCX,UPxCW,COwCA,UPxCA,CAAA,CAAA,CAAA,CAAA,QAAA,EAAA,CAAA,MAAA,EOyC3B,UPzC2B,COyChB,cPzCgB,CAAA,EAAA,GAAA,EOyCM,kBPzCN,COyCyB,EPzCzB,CAAA,EAAA,GOyCiC,MPzCjC,CAAA,EO0C7C,WP1C6C,CO0CjC,EP1CiC,EO0C7B,cP1C6B,EO0Cb,MP1Ca,CO0CN,OP1CM,GO0CI,kBP1CJ,CO0CuB,MP1CvB,CAAA,CAAA,CAAA;AAClD;AACqB,UO2CJ,QP3CiC,CAAA,WO2Cb,YP3Ca,EAAA,uBO2CwB,KP3CxB,EAAA,YAAA,CAAA,CAAA;EAEtC,SAAM,CAAA,cO0CQ,UP1CR,CO0CmB,UP1CnB,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2CP,KP3CO,EAAA,EAAA,EO4CV,iBP5CU,CO4CQ,WP5CR,CO4CoB,cP5CpB,EO4CoC,KP5CpC,CAAA,OO4CiD,cP5CjD,CAAA,CAAA,EO4CmE,EP5CnE,CAAA,CAAA,EO6Cb,YP7Ca,CO6CA,EP7CA,EO6CI,WP7CJ,CO6CgB,cP7ChB,EO6CgC,KP7ChC,CAAA,OO6C6C,cP7C7C,CAAA,CAAA,CAAA;EAAoB,aAAA,CAAA,cO+CR,UP/CQ,CO+CG,UP/CH,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOgD3B,KPhD2B,EAAA,EAAA,EOiD9B,iBPjD8B,COiDZ,WPjDY,COiDA,cPjDA,EOiDgB,KPjDhB,CAAA,OOiD6B,cPjD7B,CAAA,CAAA,EOiD+C,EPjD/C,CAAA,CAAA,EOkDjC,YPlDiC,COkDpB,EPlDoB,EOkDhB,WPlDgB,COkDJ,cPlDI,EOkDY,aPlDZ,COkD0B,KPlD1B,CAAA,OOkDuC,cPlDvC,CAAA,CAAA,CAAA,CAAA;EAAI,cAAA,CAAA,cOoDX,UPpDW,COoDA,UPpDA,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOqD/B,KPrD+B,EAAA,EAAA,EOsDlC,iBPtDkC,COsDhB,WPtDgB,COsDJ,cPtDI,EOsDY,KPtDZ,CAAA,OOsDyB,cPtDzB,CAAA,CAAA,EOsD2C,EPtD3C,CAAA,CAAA,EOuDrC,YPvDqC,COuDxB,EPvDwB,EOuDpB,WPvDoB,COuDR,aPvDQ,COuDM,cPvDN,CAAA,EOuDuB,KPvDvB,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CAAA,EQ0Fb,QR1Fa,CQ0FJ,ER1FI,EQ0FA,cR1FA,EQ0FgB,CR1FhB,CAAA,cAAA,CAAA,CAAA,CAAA;EAAwB,EAAA,CAAA,iBAAA,MAAA,CAAA,CAAA,QAAA,EQ4F3B,QR5F2B,CAAA,EQ6FpC,UR7FoC,CQ6FzB,CR7FyB,EQ6FtB,MR7FsB,EQ6FhB,QR7FgB,EQ6FN,WR7FM,CQ6FM,cR7FN,EQ6FsB,KR7FtB,EQ6F6B,QR7F7B,CAAA,CAAA;EAI7B,MAAA,CAAA,MAAA,EQ4FA,oBR5FwB,CQ6F9B,CR7F8B,EQ8F9B,CR9F8B,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQ8FP,MR9FO,CAAA,EQ+F9B,MR/F8B,EQgG9B,ERhG8B,CAAA,YAAA,CAAA,EQiG9B,sBRjG8B,CQiGP,CRjGO,CAAA,CAAA,CAAA,EQmG/B,WRnG+B,CQmGnB,ERnGmB,EQmGf,cRnGe,EQmGC,QRnGD,CAAA;EAAW,MAAA,CAAA,GAAA,EQsGtC,oBRtGsC,CQuGzC,CRvGyC,EQwGzC,CRxGyC,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQwGlB,MRxGkB,CAAA,EQyGzC,MRzGyC,EQ0GzC,ER1GyC,CAAA,YAAA,CAAA,EQ2GzC,sBR3GyC,CQ2GlB,CR3GkB,CAAA,CAAA,CAAA,EQ6G1C,WR7G0C,CQ6G9B,ER7G8B,EQ6G1B,cR7G0B,EQ6GV,QR7GU,CAAA;EACjC,MAAA,EAAA,EQ8GF,WR9GE,CQ8GU,ER9GV,EQ8Gc,cR9Gd,EQ8G8B,QR9G9B,CAAA;;;;KSxCF,gBAAA,GAAmB,eAAe;KAElC,kBAAA;;qBAC2B,eAAe;ETH1C,CAAA;EAA8C,SAAA,YAAA,ESIjC,gBTJiC;CAAqB;AAC3E,KSMQ,ETNR,CAAA,USMqB,kBTNrB,CAAA,GAAA,WAAM,MAAA,GAAA,MSOgB,CTPhB,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,GSOyC,UTPzC,CSOoD,CTPpD,ESOuD,ITPvD,CAAA,EACA"}