kysely 0.26.1 → 0.26.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.
- package/README.md +6 -6
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/cjs/driver/runtime-driver.js +17 -2
- package/dist/cjs/expression/expression-builder.d.ts +298 -27
- package/dist/cjs/expression/expression-builder.js +36 -26
- package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
- package/dist/cjs/expression/expression-wrapper.js +4 -4
- package/dist/cjs/expression/expression.d.ts +64 -1
- package/dist/cjs/helpers/mysql.d.ts +11 -8
- package/dist/cjs/helpers/mysql.js +21 -32
- package/dist/cjs/helpers/postgres.d.ts +8 -5
- package/dist/cjs/helpers/postgres.js +8 -5
- package/dist/cjs/helpers/sqlite.d.ts +164 -0
- package/dist/cjs/helpers/sqlite.js +180 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/kysely.d.ts +4 -3
- package/dist/cjs/kysely.js +1 -1
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.js +3 -3
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +3 -0
- package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
- package/dist/cjs/operation-node/order-by-node.js +4 -4
- package/dist/cjs/operation-node/over-node.d.ts +1 -1
- package/dist/cjs/operation-node/over-node.js +3 -3
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
- package/dist/cjs/operation-node/select-query-node.js +13 -7
- package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
- package/dist/cjs/operation-node/tuple-node.js +18 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
- package/dist/cjs/parser/binary-operation-parser.js +35 -46
- package/dist/cjs/parser/expression-parser.d.ts +9 -4
- package/dist/cjs/parser/join-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.js +2 -3
- package/dist/cjs/parser/order-by-parser.d.ts +6 -2
- package/dist/cjs/parser/order-by-parser.js +41 -7
- package/dist/cjs/parser/parse-utils.js +2 -2
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -5
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
- package/dist/cjs/parser/set-operation-parser.js +13 -4
- package/dist/cjs/parser/tuple-parser.d.ts +47 -0
- package/dist/cjs/parser/tuple-parser.js +2 -0
- package/dist/cjs/parser/value-parser.d.ts +4 -2
- package/dist/cjs/parser/value-parser.js +12 -1
- package/dist/cjs/parser/with-parser.d.ts +3 -2
- package/dist/cjs/parser/with-parser.js +16 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
- package/dist/cjs/query-builder/case-builder.js +8 -4
- package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
- package/dist/cjs/query-builder/cte-builder.js +39 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -7
- package/dist/cjs/query-builder/delete-query-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +41 -6
- package/dist/cjs/query-builder/function-module.js +3 -0
- package/dist/cjs/query-builder/having-interface.d.ts +2 -5
- package/dist/cjs/query-builder/join-builder.d.ts +2 -6
- package/dist/cjs/query-builder/join-builder.js +2 -2
- package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
- package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
- package/dist/cjs/query-builder/over-builder.js +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +201 -65
- package/dist/cjs/query-builder/select-query-builder.js +72 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +34 -7
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +32 -8
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
- package/dist/cjs/query-creator.d.ts +74 -2
- package/dist/cjs/query-creator.js +83 -6
- package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
- package/dist/cjs/raw-builder/raw-builder.js +18 -45
- package/dist/cjs/raw-builder/sql.js +8 -8
- package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-builder.js +12 -0
- package/dist/cjs/schema/create-index-builder.d.ts +1 -1
- package/dist/cjs/schema/create-index-builder.js +1 -1
- package/dist/cjs/util/column-type.d.ts +7 -6
- package/dist/cjs/util/json-object-args.d.ts +3 -0
- package/dist/cjs/util/json-object-args.js +35 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +9 -1
- package/dist/cjs/util/type-utils.d.ts +10 -10
- package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/esm/driver/runtime-driver.js +17 -2
- package/dist/esm/expression/expression-builder.d.ts +298 -27
- package/dist/esm/expression/expression-builder.js +40 -30
- package/dist/esm/expression/expression-wrapper.d.ts +177 -8
- package/dist/esm/expression/expression-wrapper.js +5 -5
- package/dist/esm/expression/expression.d.ts +64 -1
- package/dist/esm/helpers/mysql.d.ts +11 -8
- package/dist/esm/helpers/mysql.js +21 -32
- package/dist/esm/helpers/postgres.d.ts +8 -5
- package/dist/esm/helpers/postgres.js +8 -5
- package/dist/esm/helpers/sqlite.d.ts +164 -0
- package/dist/esm/helpers/sqlite.js +175 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/kysely.d.ts +4 -3
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/esm/operation-node/common-table-expression-node.js +6 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.js +3 -3
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +8 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +3 -0
- package/dist/esm/operation-node/order-by-node.d.ts +2 -2
- package/dist/esm/operation-node/order-by-node.js +4 -4
- package/dist/esm/operation-node/over-node.d.ts +1 -1
- package/dist/esm/operation-node/over-node.js +3 -3
- package/dist/esm/operation-node/select-query-node.d.ts +5 -4
- package/dist/esm/operation-node/select-query-node.js +13 -7
- package/dist/esm/operation-node/tuple-node.d.ts +12 -0
- package/dist/esm/operation-node/tuple-node.js +16 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
- package/dist/esm/parser/binary-operation-parser.js +36 -47
- package/dist/esm/parser/expression-parser.d.ts +9 -4
- package/dist/esm/parser/join-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.js +3 -4
- package/dist/esm/parser/order-by-parser.d.ts +6 -2
- package/dist/esm/parser/order-by-parser.js +40 -7
- package/dist/esm/parser/parse-utils.js +3 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/select-parser.d.ts +5 -5
- package/dist/esm/parser/set-operation-parser.d.ts +3 -1
- package/dist/esm/parser/set-operation-parser.js +11 -2
- package/dist/esm/parser/tuple-parser.d.ts +47 -0
- package/dist/esm/parser/tuple-parser.js +2 -0
- package/dist/esm/parser/value-parser.d.ts +4 -2
- package/dist/esm/parser/value-parser.js +10 -1
- package/dist/esm/parser/with-parser.d.ts +3 -2
- package/dist/esm/parser/with-parser.js +16 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
- package/dist/esm/query-builder/case-builder.js +10 -6
- package/dist/esm/query-builder/cte-builder.d.ts +20 -0
- package/dist/esm/query-builder/cte-builder.js +36 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +34 -7
- package/dist/esm/query-builder/delete-query-builder.js +4 -4
- package/dist/esm/query-builder/function-module.d.ts +41 -6
- package/dist/esm/query-builder/function-module.js +3 -0
- package/dist/esm/query-builder/having-interface.d.ts +2 -5
- package/dist/esm/query-builder/join-builder.d.ts +2 -6
- package/dist/esm/query-builder/join-builder.js +3 -3
- package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
- package/dist/esm/query-builder/on-conflict-builder.js +5 -5
- package/dist/esm/query-builder/over-builder.js +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +201 -65
- package/dist/esm/query-builder/select-query-builder.js +72 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +34 -7
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +32 -8
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +39 -7
- package/dist/esm/query-creator.d.ts +74 -2
- package/dist/esm/query-creator.js +84 -7
- package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
- package/dist/esm/raw-builder/raw-builder.js +17 -42
- package/dist/esm/raw-builder/sql.js +9 -9
- package/dist/esm/schema/alter-table-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-builder.js +12 -0
- package/dist/esm/schema/create-index-builder.d.ts +1 -1
- package/dist/esm/schema/create-index-builder.js +2 -2
- package/dist/esm/util/column-type.d.ts +7 -6
- package/dist/esm/util/json-object-args.d.ts +3 -0
- package/dist/esm/util/json-object-args.js +32 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +7 -0
- package/dist/esm/util/type-utils.d.ts +10 -10
- package/helpers/sqlite.d.ts +1 -0
- package/helpers/sqlite.js +1 -0
- package/package.json +7 -4
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
1
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
2
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
3
|
import { TableExpression } from '../parser/table-parser.js';
|
|
@@ -6,43 +5,26 @@ import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/
|
|
|
6
5
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
7
6
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
8
7
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
|
-
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult } from '../util/type-utils.js';
|
|
10
|
-
import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
|
|
8
|
+
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
9
|
+
import { OrderByDirectionExpression, OrderByExpression, DirectedOrderByStringReference, UndirectedOrderByExpression } from '../parser/order-by-parser.js';
|
|
11
10
|
import { Compilable } from '../util/compilable.js';
|
|
12
11
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
13
12
|
import { QueryId } from '../util/query-id.js';
|
|
14
13
|
import { GroupByArg } from '../parser/group-by-parser.js';
|
|
15
14
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
16
|
-
import {
|
|
15
|
+
import { WhereInterface } from './where-interface.js';
|
|
17
16
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
18
|
-
import {
|
|
17
|
+
import { HavingInterface } from './having-interface.js';
|
|
19
18
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
20
|
-
import {
|
|
19
|
+
import { SetOperandExpression } from '../parser/set-operation-parser.js';
|
|
20
|
+
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
21
21
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
22
22
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
23
23
|
import { Selectable } from '../util/column-type.js';
|
|
24
24
|
import { Streamable } from '../util/streamable.js';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/** @private */
|
|
29
|
-
/**
|
|
30
|
-
* All expressions need to have this getter for complicated type-related reasons.
|
|
31
|
-
* Simply add this getter for your expression and always return `undefined` from it:
|
|
32
|
-
*
|
|
33
|
-
* ```ts
|
|
34
|
-
* class SomeExpression<T> implements Expression<T> {
|
|
35
|
-
* get expressionType(): T | undefined {
|
|
36
|
-
* return undefined
|
|
37
|
-
* }
|
|
38
|
-
* }
|
|
39
|
-
* ```
|
|
40
|
-
*
|
|
41
|
-
* The getter is needed to make the expression assignable to another expression only
|
|
42
|
-
* if the types `T` are assignable. Without this property (or some other property
|
|
43
|
-
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
44
|
-
*/
|
|
45
|
-
get expressionType(): O | undefined;
|
|
25
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
26
|
+
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
27
|
+
export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, AliasableExpression<O>, Compilable<O>, Explainable, Streamable<O> {
|
|
46
28
|
/**
|
|
47
29
|
* Adds a `where` expression to the query.
|
|
48
30
|
*
|
|
@@ -96,7 +78,34 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
96
78
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
97
79
|
* ```
|
|
98
80
|
*
|
|
99
|
-
* <!-- siteExample("where", "
|
|
81
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
82
|
+
*
|
|
83
|
+
* You can use the `and` function to create a simple equality
|
|
84
|
+
* filter using an object
|
|
85
|
+
*
|
|
86
|
+
* ```ts
|
|
87
|
+
* const persons = await db
|
|
88
|
+
* .selectFrom('person')
|
|
89
|
+
* .selectAll()
|
|
90
|
+
* .where((eb) => eb.and({
|
|
91
|
+
* first_name: 'Jennifer',
|
|
92
|
+
* last_name: eb.ref('first_name')
|
|
93
|
+
* }))
|
|
94
|
+
* .execute()
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* The generated SQL (PostgreSQL):
|
|
98
|
+
*
|
|
99
|
+
* ```sql
|
|
100
|
+
* select *
|
|
101
|
+
* from "person"
|
|
102
|
+
* where (
|
|
103
|
+
* "first_name" = $1
|
|
104
|
+
* and "last_name" = "first_name"
|
|
105
|
+
* )
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
100
109
|
*
|
|
101
110
|
* To combine conditions using `OR`, you can use the expression builder.
|
|
102
111
|
* There are two ways to create `OR` expressions. Both are shown in this
|
|
@@ -131,7 +140,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
131
140
|
* )
|
|
132
141
|
* ```
|
|
133
142
|
*
|
|
134
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
143
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
135
144
|
*
|
|
136
145
|
* You can add expressions conditionally like this:
|
|
137
146
|
*
|
|
@@ -226,7 +235,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
226
235
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
227
236
|
* ```
|
|
228
237
|
*
|
|
229
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
238
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
230
239
|
*
|
|
231
240
|
* For complex `where` expressions you can pass in a single callback and
|
|
232
241
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -316,8 +325,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
316
325
|
* ```
|
|
317
326
|
*/
|
|
318
327
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
319
|
-
where(
|
|
320
|
-
where(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
|
|
328
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
321
329
|
/**
|
|
322
330
|
* Adds a `where` clause where both sides of the operator are references
|
|
323
331
|
* to columns.
|
|
@@ -375,8 +383,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
375
383
|
* instead of a `where` statement.
|
|
376
384
|
*/
|
|
377
385
|
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
378
|
-
having(
|
|
379
|
-
having(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
|
|
386
|
+
having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
380
387
|
/**
|
|
381
388
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
382
389
|
* instead of a `where` statement.
|
|
@@ -917,14 +924,28 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
917
924
|
/**
|
|
918
925
|
* Adds an `order by` clause to the query.
|
|
919
926
|
*
|
|
920
|
-
* `orderBy` calls are additive.
|
|
921
|
-
*
|
|
927
|
+
* `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
|
|
928
|
+
* the existing order by clause.
|
|
929
|
+
*
|
|
930
|
+
* In a single call you can add a single column/expression or multiple columns/expressions.
|
|
922
931
|
*
|
|
923
|
-
*
|
|
924
|
-
* order (
|
|
932
|
+
* Single column/expression calls can have 1-2 arguments. The first argument is
|
|
933
|
+
* the expression to order by (optionally including the direction) while the second
|
|
934
|
+
* optional argument is the direction (`asc` or `desc`).
|
|
925
935
|
*
|
|
926
936
|
* ### Examples
|
|
927
937
|
*
|
|
938
|
+
* Single column/expression per call:
|
|
939
|
+
*
|
|
940
|
+
* ```ts
|
|
941
|
+
* await db
|
|
942
|
+
* .selectFrom('person')
|
|
943
|
+
* .select('person.first_name as fn')
|
|
944
|
+
* .orderBy('id')
|
|
945
|
+
* .orderBy('fn desc')
|
|
946
|
+
* .execute()
|
|
947
|
+
* ```
|
|
948
|
+
*
|
|
928
949
|
* ```ts
|
|
929
950
|
* await db
|
|
930
951
|
* .selectFrom('person')
|
|
@@ -942,6 +963,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
942
963
|
* order by "id" asc, "fn" desc
|
|
943
964
|
* ```
|
|
944
965
|
*
|
|
966
|
+
* Multiple columns/expressions per call:
|
|
967
|
+
*
|
|
968
|
+
* ```ts
|
|
969
|
+
* await db
|
|
970
|
+
* .selectFrom('person')
|
|
971
|
+
* .select('person.first_name as fn')
|
|
972
|
+
* .orderBy(['id', 'fn desc'])
|
|
973
|
+
* .execute()
|
|
974
|
+
* ```
|
|
975
|
+
*
|
|
945
976
|
* The order by expression can also be a raw sql expression or a subquery
|
|
946
977
|
* in addition to column references:
|
|
947
978
|
*
|
|
@@ -1001,7 +1032,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1001
1032
|
* order by "fn" asc
|
|
1002
1033
|
* ```
|
|
1003
1034
|
*/
|
|
1004
|
-
orderBy(orderBy:
|
|
1035
|
+
orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
|
|
1036
|
+
orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1037
|
+
orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
|
|
1005
1038
|
/**
|
|
1006
1039
|
* Adds a `group by` clause to the query.
|
|
1007
1040
|
*
|
|
@@ -1155,8 +1188,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1155
1188
|
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
1156
1189
|
* .orderBy('name')
|
|
1157
1190
|
* ```
|
|
1191
|
+
*
|
|
1192
|
+
* You can provide a callback to get an expression builder.
|
|
1193
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1194
|
+
*
|
|
1195
|
+
* ```ts
|
|
1196
|
+
* db.selectFrom('person')
|
|
1197
|
+
* .select(['id', 'first_name as name'])
|
|
1198
|
+
* .union((eb) => eb.parens(
|
|
1199
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1200
|
+
* ))
|
|
1201
|
+
* .orderBy('name')
|
|
1202
|
+
* ```
|
|
1158
1203
|
*/
|
|
1159
|
-
union(expression:
|
|
1204
|
+
union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1160
1205
|
/**
|
|
1161
1206
|
* Combines another select query or raw expression to this query using `union all`.
|
|
1162
1207
|
*
|
|
@@ -1170,8 +1215,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1170
1215
|
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1171
1216
|
* .orderBy('name')
|
|
1172
1217
|
* ```
|
|
1218
|
+
*
|
|
1219
|
+
* You can provide a callback to get an expression builder.
|
|
1220
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1221
|
+
*
|
|
1222
|
+
* ```ts
|
|
1223
|
+
* db.selectFrom('person')
|
|
1224
|
+
* .select(['id', 'first_name as name'])
|
|
1225
|
+
* .unionAll((eb) => eb.parens(
|
|
1226
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1227
|
+
* ))
|
|
1228
|
+
* .orderBy('name')
|
|
1229
|
+
* ```
|
|
1173
1230
|
*/
|
|
1174
|
-
unionAll(expression:
|
|
1231
|
+
unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1175
1232
|
/**
|
|
1176
1233
|
* Combines another select query or raw expression to this query using `intersect`.
|
|
1177
1234
|
*
|
|
@@ -1185,8 +1242,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1185
1242
|
* .intersect(db.selectFrom('pet').select(['id', 'name']))
|
|
1186
1243
|
* .orderBy('name')
|
|
1187
1244
|
* ```
|
|
1245
|
+
*
|
|
1246
|
+
* You can provide a callback to get an expression builder.
|
|
1247
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1248
|
+
*
|
|
1249
|
+
* ```ts
|
|
1250
|
+
* db.selectFrom('person')
|
|
1251
|
+
* .select(['id', 'first_name as name'])
|
|
1252
|
+
* .intersect((eb) => eb.parens(
|
|
1253
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1254
|
+
* ))
|
|
1255
|
+
* .orderBy('name')
|
|
1256
|
+
* ```
|
|
1188
1257
|
*/
|
|
1189
|
-
intersect(expression:
|
|
1258
|
+
intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1190
1259
|
/**
|
|
1191
1260
|
* Combines another select query or raw expression to this query using `intersect all`.
|
|
1192
1261
|
*
|
|
@@ -1200,8 +1269,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1200
1269
|
* .intersectAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1201
1270
|
* .orderBy('name')
|
|
1202
1271
|
* ```
|
|
1272
|
+
*
|
|
1273
|
+
* You can provide a callback to get an expression builder.
|
|
1274
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1275
|
+
*
|
|
1276
|
+
* ```ts
|
|
1277
|
+
* db.selectFrom('person')
|
|
1278
|
+
* .select(['id', 'first_name as name'])
|
|
1279
|
+
* .intersectAll((eb) => eb.parens(
|
|
1280
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1281
|
+
* ))
|
|
1282
|
+
* .orderBy('name')
|
|
1283
|
+
* ```
|
|
1203
1284
|
*/
|
|
1204
|
-
intersectAll(expression:
|
|
1285
|
+
intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1205
1286
|
/**
|
|
1206
1287
|
* Combines another select query or raw expression to this query using `except`.
|
|
1207
1288
|
*
|
|
@@ -1215,8 +1296,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1215
1296
|
* .except(db.selectFrom('pet').select(['id', 'name']))
|
|
1216
1297
|
* .orderBy('name')
|
|
1217
1298
|
* ```
|
|
1299
|
+
*
|
|
1300
|
+
* You can provide a callback to get an expression builder.
|
|
1301
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1302
|
+
*
|
|
1303
|
+
* ```ts
|
|
1304
|
+
* db.selectFrom('person')
|
|
1305
|
+
* .select(['id', 'first_name as name'])
|
|
1306
|
+
* .except((eb) => eb.parens(
|
|
1307
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1308
|
+
* ))
|
|
1309
|
+
* .orderBy('name')
|
|
1310
|
+
* ```
|
|
1218
1311
|
*/
|
|
1219
|
-
except(expression:
|
|
1312
|
+
except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1220
1313
|
/**
|
|
1221
1314
|
* Combines another select query or raw expression to this query using `except all`.
|
|
1222
1315
|
*
|
|
@@ -1230,8 +1323,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1230
1323
|
* .exceptAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1231
1324
|
* .orderBy('name')
|
|
1232
1325
|
* ```
|
|
1326
|
+
*
|
|
1327
|
+
* You can provide a callback to get an expression builder.
|
|
1328
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1329
|
+
*
|
|
1330
|
+
* ```ts
|
|
1331
|
+
* db.selectFrom('person')
|
|
1332
|
+
* .select(['id', 'first_name as name'])
|
|
1333
|
+
* .exceptAll((eb) => eb.parens(
|
|
1334
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1335
|
+
* ))
|
|
1336
|
+
* .orderBy('name')
|
|
1337
|
+
* ```
|
|
1233
1338
|
*/
|
|
1234
|
-
exceptAll(expression:
|
|
1339
|
+
exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1235
1340
|
/**
|
|
1236
1341
|
* Gives an alias for the query. This method is only useful for sub queries.
|
|
1237
1342
|
*
|
|
@@ -1445,6 +1550,54 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1445
1550
|
* don't support your use case.
|
|
1446
1551
|
*/
|
|
1447
1552
|
$castTo<T>(): SelectQueryBuilder<DB, TB, T>;
|
|
1553
|
+
/**
|
|
1554
|
+
* Changes the output type from an object to a tuple.
|
|
1555
|
+
*
|
|
1556
|
+
* This doesn't affect the generated SQL in any way. This function is
|
|
1557
|
+
* just a necessary evil when you need to convert a query's output
|
|
1558
|
+
* record type to a tuple type. Typescript doesn't currently offer
|
|
1559
|
+
* tools to do this automatically (without insane hackery).
|
|
1560
|
+
*
|
|
1561
|
+
* The returned object can no longer be executed. It can only be used
|
|
1562
|
+
* as a subquery.
|
|
1563
|
+
*
|
|
1564
|
+
* ### Examples
|
|
1565
|
+
*
|
|
1566
|
+
* ```ts
|
|
1567
|
+
* const result = await db
|
|
1568
|
+
* .selectFrom('person')
|
|
1569
|
+
* .selectAll('person')
|
|
1570
|
+
* .where(({ eb, refTuple, selectFrom }) => eb(
|
|
1571
|
+
* refTuple('first_name', 'last_name'),
|
|
1572
|
+
* 'in',
|
|
1573
|
+
* selectFrom('pet')
|
|
1574
|
+
* .select(['name', 'species'])
|
|
1575
|
+
* .where('pet.species', '!=', 'cat')
|
|
1576
|
+
* .$asTuple('name', 'species')
|
|
1577
|
+
* ))
|
|
1578
|
+
* ```
|
|
1579
|
+
*
|
|
1580
|
+
* The generated SQL(PostgreSQL):
|
|
1581
|
+
*
|
|
1582
|
+
* ```sql
|
|
1583
|
+
* select
|
|
1584
|
+
* "person".*
|
|
1585
|
+
* from
|
|
1586
|
+
* "person"
|
|
1587
|
+
* where
|
|
1588
|
+
* ("first_name", "last_name")
|
|
1589
|
+
* in
|
|
1590
|
+
* (
|
|
1591
|
+
* select "name", "species"
|
|
1592
|
+
* from "pet"
|
|
1593
|
+
* where "pet"."species" != $1
|
|
1594
|
+
* )
|
|
1595
|
+
* ```
|
|
1596
|
+
*/
|
|
1597
|
+
$asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>>(key1: K1, key2: K2): keyof O extends K1 | K2 ? ExpressionWrapper<DB, TB, [O[K1], O[K2]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
|
|
1598
|
+
$asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>>(key1: K1, key2: K2, key3: K3): keyof O extends K1 | K2 | K3 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
|
|
1599
|
+
$asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>>(key1: K1, key2: K2, key3: K3, key4: K4): keyof O extends K1 | K2 | K3 | K4 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
|
|
1600
|
+
$asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>, K5 extends Exclude<keyof O, K1 | K2 | K3 | K4>>(key1: K1, key2: K2, key3: K3, key4: K4, key5: K5): keyof O extends K1 | K2 | K3 | K4 | K5 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4], O[K5]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
|
|
1448
1601
|
/**
|
|
1449
1602
|
* Narrows (parts of) the output type of the query.
|
|
1450
1603
|
*
|
|
@@ -1630,31 +1783,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1630
1783
|
*/
|
|
1631
1784
|
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
|
|
1632
1785
|
}
|
|
1786
|
+
export declare function createSelectQueryBuilder<DB, TB extends keyof DB, O>(props: SelectQueryBuilderProps): SelectQueryBuilder<DB, TB, O>;
|
|
1633
1787
|
export interface SelectQueryBuilderProps {
|
|
1634
1788
|
readonly queryId: QueryId;
|
|
1635
1789
|
readonly queryNode: SelectQueryNode;
|
|
1636
1790
|
readonly executor: QueryExecutor;
|
|
1637
1791
|
}
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
*/
|
|
1641
|
-
export declare class AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> implements AliasedExpression<O, A> {
|
|
1642
|
-
#private;
|
|
1643
|
-
constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
|
|
1644
|
-
/** @private */
|
|
1645
|
-
/**
|
|
1646
|
-
* Returns the aliased expression.
|
|
1647
|
-
*/
|
|
1648
|
-
get expression(): Expression<O>;
|
|
1649
|
-
/** @private */
|
|
1650
|
-
/**
|
|
1651
|
-
* Returns the alias.
|
|
1652
|
-
*/
|
|
1653
|
-
get alias(): A;
|
|
1654
|
-
/**
|
|
1655
|
-
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
1656
|
-
*/
|
|
1657
|
-
toOperationNode(): AliasNode;
|
|
1792
|
+
export interface AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> extends AliasedExpression<O, A> {
|
|
1793
|
+
get selectQueryBuilder(): SelectQueryBuilder<DB, TB, O>;
|
|
1658
1794
|
}
|
|
1659
1795
|
export type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
|
|
1660
1796
|
type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & ShallowRecord<A, R>, TB | A, O>;
|