@prisma-next/sql-lane 0.3.0-dev.30 → 0.3.0-dev.32
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/{chunk-72PNERR5.js → chunk-GNBTSXFL.js} +61 -22
- package/dist/chunk-GNBTSXFL.js.map +1 -0
- package/dist/exports/sql.js +1 -1
- package/dist/index.js +1 -1
- package/dist/sql/include-builder.d.ts.map +1 -1
- package/dist/sql/mutation-builder.d.ts +5 -5
- package/dist/sql/mutation-builder.d.ts.map +1 -1
- package/dist/sql/plan.d.ts.map +1 -1
- package/dist/sql/predicate-builder.d.ts +4 -4
- package/dist/sql/predicate-builder.d.ts.map +1 -1
- package/dist/sql/select-builder.d.ts +2 -2
- package/dist/sql/select-builder.d.ts.map +1 -1
- package/dist/types/internal.d.ts +3 -3
- package/dist/types/internal.d.ts.map +1 -1
- package/dist/utils/state.d.ts +3 -3
- package/dist/utils/state.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/sql/include-builder.ts +2 -2
- package/src/sql/mutation-builder.ts +7 -6
- package/src/sql/plan.ts +39 -25
- package/src/sql/predicate-builder.ts +62 -5
- package/src/sql/select-builder.ts +8 -4
- package/src/types/internal.ts +3 -2
- package/src/utils/state.ts +3 -2
- package/dist/chunk-72PNERR5.js.map +0 -1
package/dist/utils/state.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TableRef } from '@prisma-next/sql-relational-core/ast';
|
|
2
|
-
import type { AnyBinaryBuilder, AnyExpressionSource, AnyOrderBuilder, JoinOnPredicate } from '@prisma-next/sql-relational-core/types';
|
|
2
|
+
import type { AnyBinaryBuilder, AnyExpressionSource, AnyOrderBuilder, AnyUnaryBuilder, JoinOnPredicate } from '@prisma-next/sql-relational-core/types';
|
|
3
3
|
export interface ProjectionState {
|
|
4
4
|
readonly aliases: string[];
|
|
5
5
|
readonly columns: AnyExpressionSource[];
|
|
@@ -14,7 +14,7 @@ export interface IncludeState {
|
|
|
14
14
|
readonly table: TableRef;
|
|
15
15
|
readonly on: JoinOnPredicate;
|
|
16
16
|
readonly childProjection: ProjectionState;
|
|
17
|
-
readonly childWhere?: AnyBinaryBuilder;
|
|
17
|
+
readonly childWhere?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
18
18
|
readonly childOrderBy?: AnyOrderBuilder;
|
|
19
19
|
readonly childLimit?: number;
|
|
20
20
|
}
|
|
@@ -23,7 +23,7 @@ export interface BuilderState {
|
|
|
23
23
|
joins?: ReadonlyArray<JoinState>;
|
|
24
24
|
includes?: ReadonlyArray<IncludeState>;
|
|
25
25
|
projection?: ProjectionState;
|
|
26
|
-
where?: AnyBinaryBuilder;
|
|
26
|
+
where?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
27
27
|
orderBy?: AnyOrderBuilder;
|
|
28
28
|
limit?: number;
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EAChB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAAC;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAAC;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-lane",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.32",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "Relational DSL and raw SQL helpers for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@prisma-next/contract": "0.3.0-dev.
|
|
9
|
-
"@prisma-next/plan": "0.3.0-dev.
|
|
10
|
-
"@prisma-next/sql-contract": "0.3.0-dev.
|
|
11
|
-
"@prisma-next/sql-relational-core": "0.3.0-dev.
|
|
8
|
+
"@prisma-next/contract": "0.3.0-dev.32",
|
|
9
|
+
"@prisma-next/plan": "0.3.0-dev.32",
|
|
10
|
+
"@prisma-next/sql-contract": "0.3.0-dev.32",
|
|
11
|
+
"@prisma-next/sql-relational-core": "0.3.0-dev.32"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@types/pg": "8.16.0",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"tsup": "8.5.1",
|
|
17
17
|
"typescript": "5.9.3",
|
|
18
18
|
"vitest": "4.0.16",
|
|
19
|
-
"@prisma-next/sql-
|
|
19
|
+
"@prisma-next/sql-contract-ts": "0.3.0-dev.32",
|
|
20
|
+
"@prisma-next/sql-runtime": "0.3.0-dev.32",
|
|
20
21
|
"@prisma-next/test-utils": "0.0.1",
|
|
21
|
-
"@prisma-next/sql-contract-ts": "0.3.0-dev.30",
|
|
22
22
|
"@prisma-next/tsconfig": "0.0.0"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ParamDescriptor } from '@prisma-next/contract/types';
|
|
2
2
|
import type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';
|
|
3
3
|
import type {
|
|
4
|
-
BinaryExpr,
|
|
5
4
|
ColumnRef,
|
|
6
5
|
IncludeAst,
|
|
7
6
|
OperationExpr,
|
|
8
7
|
TableRef,
|
|
8
|
+
WhereExpr,
|
|
9
9
|
} from '@prisma-next/sql-relational-core/ast';
|
|
10
10
|
import {
|
|
11
11
|
createColumnRef,
|
|
@@ -205,7 +205,7 @@ export function buildIncludeAst(
|
|
|
205
205
|
})()
|
|
206
206
|
: undefined;
|
|
207
207
|
|
|
208
|
-
let childWhere:
|
|
208
|
+
let childWhere: WhereExpr | undefined;
|
|
209
209
|
if (include.childWhere) {
|
|
210
210
|
const whereResult = buildWhereExpr(
|
|
211
211
|
contract,
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
InferReturningRow,
|
|
19
19
|
ParamPlaceholder,
|
|
20
20
|
SqlBuilderOptions,
|
|
21
|
+
UnaryBuilder,
|
|
21
22
|
} from '@prisma-next/sql-relational-core/types';
|
|
22
23
|
import { checkReturningCapability } from '../utils/capabilities';
|
|
23
24
|
import {
|
|
@@ -48,7 +49,7 @@ export interface UpdateBuilder<
|
|
|
48
49
|
CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,
|
|
49
50
|
Row = unknown,
|
|
50
51
|
> {
|
|
51
|
-
where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;
|
|
52
|
+
where(predicate: BinaryBuilder | UnaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;
|
|
52
53
|
returning<const Columns extends readonly AnyColumnBuilder[]>(
|
|
53
54
|
...columns: Columns
|
|
54
55
|
): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;
|
|
@@ -60,7 +61,7 @@ export interface DeleteBuilder<
|
|
|
60
61
|
CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,
|
|
61
62
|
Row = unknown,
|
|
62
63
|
> {
|
|
63
|
-
where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;
|
|
64
|
+
where(predicate: BinaryBuilder | UnaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;
|
|
64
65
|
returning<const Columns extends readonly AnyColumnBuilder[]>(
|
|
65
66
|
...columns: Columns
|
|
66
67
|
): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;
|
|
@@ -206,7 +207,7 @@ export class UpdateBuilderImpl<
|
|
|
206
207
|
private readonly context: QueryLaneContext<TContract>;
|
|
207
208
|
private readonly table: TableRef;
|
|
208
209
|
private readonly set: Record<string, ParamPlaceholder>;
|
|
209
|
-
private wherePredicate?: BinaryBuilder;
|
|
210
|
+
private wherePredicate?: BinaryBuilder | UnaryBuilder;
|
|
210
211
|
private returningColumns: AnyColumnBuilder[] = [];
|
|
211
212
|
|
|
212
213
|
constructor(
|
|
@@ -220,7 +221,7 @@ export class UpdateBuilderImpl<
|
|
|
220
221
|
this.set = set;
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {
|
|
224
|
+
where(predicate: BinaryBuilder | UnaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {
|
|
224
225
|
const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(
|
|
225
226
|
{
|
|
226
227
|
context: this.context,
|
|
@@ -374,7 +375,7 @@ export class DeleteBuilderImpl<
|
|
|
374
375
|
private readonly contract: TContract;
|
|
375
376
|
private readonly context: QueryLaneContext<TContract>;
|
|
376
377
|
private readonly table: TableRef;
|
|
377
|
-
private wherePredicate?: BinaryBuilder;
|
|
378
|
+
private wherePredicate?: BinaryBuilder | UnaryBuilder;
|
|
378
379
|
private returningColumns: AnyColumnBuilder[] = [];
|
|
379
380
|
|
|
380
381
|
constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {
|
|
@@ -383,7 +384,7 @@ export class DeleteBuilderImpl<
|
|
|
383
384
|
this.table = table;
|
|
384
385
|
}
|
|
385
386
|
|
|
386
|
-
where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {
|
|
387
|
+
where(predicate: BinaryBuilder | UnaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {
|
|
387
388
|
const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(
|
|
388
389
|
{
|
|
389
390
|
context: this.context,
|
package/src/sql/plan.ts
CHANGED
|
@@ -111,12 +111,19 @@ export function buildMeta(args: MetaBuildArgs): PlanMeta {
|
|
|
111
111
|
}
|
|
112
112
|
// Add child WHERE columns if present
|
|
113
113
|
if (include.childWhere) {
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
114
|
+
// Handle UnaryBuilder (e.g., NullCheckBuilder) - it only has 'expr' property
|
|
115
|
+
if (include.childWhere.kind === 'nullCheck') {
|
|
116
|
+
const expr: Expression = include.childWhere.expr;
|
|
117
|
+
collectRefsFromExpression(expr, refsColumns);
|
|
118
|
+
} else {
|
|
119
|
+
// BinaryBuilder - has 'left' and 'right' properties
|
|
120
|
+
// childWhere.left is Expression (already converted at builder creation time)
|
|
121
|
+
collectRefsFromExpression(include.childWhere.left, refsColumns);
|
|
122
|
+
// Handle right side of child WHERE clause - can be ParamPlaceholder or ExpressionSource
|
|
123
|
+
const childWhereRight = include.childWhere.right;
|
|
124
|
+
if (isColumnBuilder(childWhereRight) || isExpressionBuilder(childWhereRight)) {
|
|
125
|
+
collectRefsFromExpressionSource(childWhereRight, refsColumns);
|
|
126
|
+
}
|
|
120
127
|
}
|
|
121
128
|
}
|
|
122
129
|
// Add child ORDER BY columns if present
|
|
@@ -128,28 +135,35 @@ export function buildMeta(args: MetaBuildArgs): PlanMeta {
|
|
|
128
135
|
}
|
|
129
136
|
|
|
130
137
|
if (args.where) {
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
138
|
+
// Handle UnaryBuilder (e.g., NullCheckBuilder) - it only has 'expr' property
|
|
139
|
+
if (args.where.kind === 'nullCheck') {
|
|
140
|
+
const expr: Expression = args.where.expr;
|
|
141
|
+
collectRefsFromExpression(expr, refsColumns);
|
|
142
|
+
} else {
|
|
143
|
+
// BinaryBuilder - has 'left' and 'right' properties
|
|
144
|
+
// args.where.left is Expression (already converted at builder creation time)
|
|
145
|
+
const leftExpr: Expression = args.where.left;
|
|
146
|
+
if (isOperationExpr(leftExpr)) {
|
|
147
|
+
const allRefs = collectColumnRefs(leftExpr);
|
|
148
|
+
for (const ref of allRefs) {
|
|
149
|
+
refsColumns.set(`${ref.table}.${ref.column}`, {
|
|
150
|
+
table: ref.table,
|
|
151
|
+
column: ref.column,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
// leftExpr is ColumnRef
|
|
156
|
+
refsColumns.set(`${leftExpr.table}.${leftExpr.column}`, {
|
|
157
|
+
table: leftExpr.table,
|
|
158
|
+
column: leftExpr.column,
|
|
139
159
|
});
|
|
140
160
|
}
|
|
141
|
-
} else {
|
|
142
|
-
// leftExpr is ColumnRef
|
|
143
|
-
refsColumns.set(`${leftExpr.table}.${leftExpr.column}`, {
|
|
144
|
-
table: leftExpr.table,
|
|
145
|
-
column: leftExpr.column,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
161
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
162
|
+
// Handle right side of WHERE clause - can be ParamPlaceholder or AnyExpressionSource
|
|
163
|
+
const whereRight = args.where.right;
|
|
164
|
+
if (isColumnBuilder(whereRight) || isExpressionBuilder(whereRight)) {
|
|
165
|
+
collectRefsFromExpressionSource(whereRight, refsColumns);
|
|
166
|
+
}
|
|
153
167
|
}
|
|
154
168
|
}
|
|
155
169
|
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import type { ParamDescriptor } from '@prisma-next/contract/types';
|
|
2
2
|
import type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import type {
|
|
4
|
+
Expression,
|
|
5
|
+
NullCheckExpr,
|
|
6
|
+
ParamRef,
|
|
7
|
+
WhereExpr,
|
|
8
|
+
} from '@prisma-next/sql-relational-core/ast';
|
|
9
|
+
import {
|
|
10
|
+
createBinaryExpr,
|
|
11
|
+
createNullCheckExpr,
|
|
12
|
+
createParamRef,
|
|
13
|
+
} from '@prisma-next/sql-relational-core/ast';
|
|
14
|
+
import type {
|
|
15
|
+
BinaryBuilder,
|
|
16
|
+
NullCheckBuilder,
|
|
17
|
+
ParamPlaceholder,
|
|
18
|
+
UnaryBuilder,
|
|
19
|
+
} from '@prisma-next/sql-relational-core/types';
|
|
6
20
|
import {
|
|
7
21
|
isColumnBuilder,
|
|
8
22
|
isExpressionBuilder,
|
|
@@ -16,18 +30,61 @@ import {
|
|
|
16
30
|
} from '../utils/errors';
|
|
17
31
|
|
|
18
32
|
export interface BuildWhereExprResult {
|
|
19
|
-
expr:
|
|
33
|
+
expr: WhereExpr;
|
|
20
34
|
codecId: string | undefined;
|
|
21
35
|
paramName: string;
|
|
22
36
|
}
|
|
23
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Type guard to check if a builder is a NullCheckBuilder (unary).
|
|
40
|
+
*/
|
|
41
|
+
function isNullCheckBuilder(builder: BinaryBuilder | UnaryBuilder): builder is NullCheckBuilder {
|
|
42
|
+
return builder.kind === 'nullCheck';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Builds a NullCheckExpr from a NullCheckBuilder.
|
|
47
|
+
*/
|
|
48
|
+
function buildNullCheckExpr(
|
|
49
|
+
contract: SqlContract<SqlStorage>,
|
|
50
|
+
where: NullCheckBuilder,
|
|
51
|
+
): NullCheckExpr {
|
|
52
|
+
const expr = where.expr;
|
|
53
|
+
|
|
54
|
+
// Validate column exists in contract if it's a ColumnRef
|
|
55
|
+
if (expr.kind === 'col') {
|
|
56
|
+
const { table, column } = expr;
|
|
57
|
+
const contractTable = contract.storage.tables[table];
|
|
58
|
+
if (!contractTable) {
|
|
59
|
+
errorUnknownTable(table);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const columnMeta: StorageColumn | undefined = contractTable.columns[column];
|
|
63
|
+
if (!columnMeta) {
|
|
64
|
+
errorUnknownColumn(column, table);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return createNullCheckExpr(expr, where.isNull);
|
|
69
|
+
}
|
|
70
|
+
|
|
24
71
|
export function buildWhereExpr(
|
|
25
72
|
contract: SqlContract<SqlStorage>,
|
|
26
|
-
where: BinaryBuilder,
|
|
73
|
+
where: BinaryBuilder | UnaryBuilder,
|
|
27
74
|
paramsMap: Record<string, unknown>,
|
|
28
75
|
descriptors: ParamDescriptor[],
|
|
29
76
|
values: unknown[],
|
|
30
77
|
): BuildWhereExprResult {
|
|
78
|
+
// Handle NullCheckBuilder (unary expression)
|
|
79
|
+
if (isNullCheckBuilder(where)) {
|
|
80
|
+
return {
|
|
81
|
+
expr: buildNullCheckExpr(contract, where),
|
|
82
|
+
codecId: undefined,
|
|
83
|
+
paramName: '',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Handle BinaryBuilder (binary expression)
|
|
31
88
|
let leftExpr: Expression;
|
|
32
89
|
let codecId: string | undefined;
|
|
33
90
|
let rightExpr: Expression | ParamRef;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ParamDescriptor } from '@prisma-next/contract/types';
|
|
2
2
|
import type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';
|
|
3
3
|
import type {
|
|
4
|
-
BinaryExpr,
|
|
5
4
|
ColumnRef,
|
|
6
5
|
Direction,
|
|
7
6
|
IncludeAst,
|
|
@@ -9,6 +8,7 @@ import type {
|
|
|
9
8
|
JoinAst,
|
|
10
9
|
OperationExpr,
|
|
11
10
|
TableRef,
|
|
11
|
+
WhereExpr,
|
|
12
12
|
} from '@prisma-next/sql-relational-core/ast';
|
|
13
13
|
import {
|
|
14
14
|
createJoinOnBuilder,
|
|
@@ -21,6 +21,7 @@ import type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-la
|
|
|
21
21
|
import type {
|
|
22
22
|
AnyBinaryBuilder,
|
|
23
23
|
AnyOrderBuilder,
|
|
24
|
+
AnyUnaryBuilder,
|
|
24
25
|
BinaryBuilder,
|
|
25
26
|
BuildOptions,
|
|
26
27
|
InferNestedProjectionRow,
|
|
@@ -29,6 +30,7 @@ import type {
|
|
|
29
30
|
NestedProjection,
|
|
30
31
|
OrderBuilder,
|
|
31
32
|
SqlBuilderOptions,
|
|
33
|
+
UnaryBuilder,
|
|
32
34
|
} from '@prisma-next/sql-relational-core/types';
|
|
33
35
|
import { isExpressionBuilder } from '@prisma-next/sql-relational-core/utils/guards';
|
|
34
36
|
import type { ProjectionInput } from '../types/internal';
|
|
@@ -235,7 +237,9 @@ export class SelectBuilderImpl<
|
|
|
235
237
|
);
|
|
236
238
|
}
|
|
237
239
|
|
|
238
|
-
where(
|
|
240
|
+
where(
|
|
241
|
+
expr: AnyBinaryBuilder | AnyUnaryBuilder,
|
|
242
|
+
): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {
|
|
239
243
|
return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(
|
|
240
244
|
{
|
|
241
245
|
context: this.context,
|
|
@@ -376,7 +380,7 @@ export class SelectBuilderImpl<
|
|
|
376
380
|
joins?: ReadonlyArray<JoinAst>;
|
|
377
381
|
includes?: ReadonlyArray<IncludeAst>;
|
|
378
382
|
project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;
|
|
379
|
-
where?:
|
|
383
|
+
where?: WhereExpr;
|
|
380
384
|
orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;
|
|
381
385
|
limit?: number;
|
|
382
386
|
});
|
|
@@ -397,7 +401,7 @@ export class SelectBuilderImpl<
|
|
|
397
401
|
projection: ProjectionState;
|
|
398
402
|
joins?: ReadonlyArray<JoinState>;
|
|
399
403
|
includes?: ReadonlyArray<IncludeState>;
|
|
400
|
-
where?: BinaryBuilder;
|
|
404
|
+
where?: BinaryBuilder | UnaryBuilder;
|
|
401
405
|
orderBy?: AnyOrderBuilder;
|
|
402
406
|
paramDescriptors: ParamDescriptor[];
|
|
403
407
|
paramCodecs?: Record<string, string>;
|
package/src/types/internal.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
AnyBinaryBuilder,
|
|
6
6
|
AnyExpressionSource,
|
|
7
7
|
AnyOrderBuilder,
|
|
8
|
+
AnyUnaryBuilder,
|
|
8
9
|
NestedProjection,
|
|
9
10
|
} from '@prisma-next/sql-relational-core/types';
|
|
10
11
|
import type { ProjectionState } from '../utils/state';
|
|
@@ -31,10 +32,10 @@ export interface MetaBuildArgs {
|
|
|
31
32
|
readonly right: unknown;
|
|
32
33
|
};
|
|
33
34
|
readonly childProjection: ProjectionState;
|
|
34
|
-
readonly childWhere?: AnyBinaryBuilder;
|
|
35
|
+
readonly childWhere?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
35
36
|
readonly childOrderBy?: AnyOrderBuilder;
|
|
36
37
|
}>;
|
|
37
|
-
readonly where?: AnyBinaryBuilder;
|
|
38
|
+
readonly where?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
38
39
|
readonly orderBy?: AnyOrderBuilder;
|
|
39
40
|
readonly paramDescriptors: ParamDescriptor[];
|
|
40
41
|
readonly paramCodecs?: Record<string, string>;
|
package/src/utils/state.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type {
|
|
|
3
3
|
AnyBinaryBuilder,
|
|
4
4
|
AnyExpressionSource,
|
|
5
5
|
AnyOrderBuilder,
|
|
6
|
+
AnyUnaryBuilder,
|
|
6
7
|
JoinOnPredicate,
|
|
7
8
|
} from '@prisma-next/sql-relational-core/types';
|
|
8
9
|
|
|
@@ -22,7 +23,7 @@ export interface IncludeState {
|
|
|
22
23
|
readonly table: TableRef;
|
|
23
24
|
readonly on: JoinOnPredicate;
|
|
24
25
|
readonly childProjection: ProjectionState;
|
|
25
|
-
readonly childWhere?: AnyBinaryBuilder;
|
|
26
|
+
readonly childWhere?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
26
27
|
readonly childOrderBy?: AnyOrderBuilder;
|
|
27
28
|
readonly childLimit?: number;
|
|
28
29
|
}
|
|
@@ -32,7 +33,7 @@ export interface BuilderState {
|
|
|
32
33
|
joins?: ReadonlyArray<JoinState>;
|
|
33
34
|
includes?: ReadonlyArray<IncludeState>;
|
|
34
35
|
projection?: ProjectionState;
|
|
35
|
-
where?: AnyBinaryBuilder;
|
|
36
|
+
where?: AnyBinaryBuilder | AnyUnaryBuilder;
|
|
36
37
|
orderBy?: AnyOrderBuilder;
|
|
37
38
|
limit?: number;
|
|
38
39
|
}
|