@prisma-next/sql-builder 0.5.0-dev.9 → 0.6.0-dev.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.
- package/dist/{db-Cggb4WvK.d.mts → db-DkZcNekS.d.mts} +72 -126
- package/dist/db-DkZcNekS.d.mts.map +1 -0
- package/dist/exports/types.d.mts +1 -1
- package/dist/exports/types.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/runtime/index.d.mts +16 -8
- package/dist/runtime/index.d.mts.map +1 -1
- package/dist/runtime/index.mjs +130 -98
- package/dist/runtime/index.mjs.map +1 -1
- package/package.json +17 -18
- package/src/expression.ts +33 -78
- package/src/runtime/builder-base.ts +26 -40
- package/src/runtime/expression-impl.ts +14 -9
- package/src/runtime/field-proxy.ts +20 -1
- package/src/runtime/functions.ts +87 -49
- package/src/runtime/mutation-impl.ts +28 -10
- package/src/scope.ts +9 -6
- package/dist/db-Cggb4WvK.d.mts.map +0 -1
|
@@ -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
|
|
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),
|
|
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
|
-
|
|
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
|
-
|
|
275
|
-
|
|
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
|
-
|
|
288
|
-
|
|
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 '
|
|
3
|
-
|
|
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
|
-
*
|
|
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
|
|
12
|
+
readonly returnType: T;
|
|
13
|
+
readonly refs: { readonly table: string; readonly column: string } | undefined;
|
|
14
14
|
|
|
15
|
-
constructor(
|
|
15
|
+
constructor(
|
|
16
|
+
ast: AstExpression,
|
|
17
|
+
returnType: T,
|
|
18
|
+
refs?: { readonly table: string; readonly column: string },
|
|
19
|
+
) {
|
|
16
20
|
this.ast = ast;
|
|
17
|
-
this.
|
|
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)
|
|
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)) {
|
package/src/runtime/functions.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
40
|
-
|
|
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',
|
|
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',
|
|
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,
|
|
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) =>
|
|
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:
|
|
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<
|
|
98
|
-
|
|
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
|
-
|
|
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
|
|
167
|
-
if (
|
|
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
|
-
|
|
214
|
+
operations: Readonly<Record<string, SqlOperationEntry>>,
|
|
177
215
|
): AggregateFunctions<QC> {
|
|
178
|
-
const baseFns = createFunctions<QC>(
|
|
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(
|
|
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(
|
|
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
|
|
53
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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 {
|
|
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"}
|