kysely 0.26.1 → 0.26.3
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 +300 -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 +14 -11
- 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 +5 -3
- 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 +10 -5
- 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.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +20 -9
- 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 +5 -3
- 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 +39 -10
- 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/insert-query-builder.d.ts +5 -3
- 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/returning-interface.d.ts +3 -2
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +206 -67
- package/dist/cjs/query-builder/select-query-builder.js +75 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +39 -10
- 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 +76 -2
- package/dist/cjs/query-creator.js +36 -6
- package/dist/cjs/raw-builder/raw-builder.d.ts +87 -51
- 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/schema/create-view-builder.d.ts +2 -2
- package/dist/cjs/util/column-type.d.ts +7 -6
- package/dist/cjs/util/infer-result.d.ts +2 -1
- 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 +16 -17
- 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 +300 -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 +14 -11
- 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 +5 -3
- 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 +10 -5
- 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.d.ts +2 -2
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +20 -9
- 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 +5 -3
- 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 +39 -10
- 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/insert-query-builder.d.ts +5 -3
- 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/returning-interface.d.ts +3 -2
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +206 -67
- package/dist/esm/query-builder/select-query-builder.js +75 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +39 -10
- 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 +76 -2
- package/dist/esm/query-creator.js +37 -7
- package/dist/esm/raw-builder/raw-builder.d.ts +87 -51
- 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/schema/create-view-builder.d.ts +2 -2
- package/dist/esm/util/column-type.d.ts +7 -6
- package/dist/esm/util/infer-result.d.ts +2 -1
- 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 +16 -17
- package/helpers/sqlite.d.ts +1 -0
- package/helpers/sqlite.js +1 -0
- package/package.json +7 -4
|
@@ -1,48 +1,31 @@
|
|
|
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';
|
|
5
|
-
import { SelectExpression, Selection,
|
|
4
|
+
import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from '../parser/select-parser.js';
|
|
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';
|
|
19
|
+
import { SetOperandExpression } from '../parser/set-operation-parser.js';
|
|
20
20
|
import { 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
|
-
|
|
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
|
+
import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
|
|
28
|
+
export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
|
|
46
29
|
/**
|
|
47
30
|
* Adds a `where` expression to the query.
|
|
48
31
|
*
|
|
@@ -96,7 +79,34 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
96
79
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
97
80
|
* ```
|
|
98
81
|
*
|
|
99
|
-
* <!-- siteExample("where", "
|
|
82
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
83
|
+
*
|
|
84
|
+
* You can use the `and` function to create a simple equality
|
|
85
|
+
* filter using an object
|
|
86
|
+
*
|
|
87
|
+
* ```ts
|
|
88
|
+
* const persons = await db
|
|
89
|
+
* .selectFrom('person')
|
|
90
|
+
* .selectAll()
|
|
91
|
+
* .where((eb) => eb.and({
|
|
92
|
+
* first_name: 'Jennifer',
|
|
93
|
+
* last_name: eb.ref('first_name')
|
|
94
|
+
* }))
|
|
95
|
+
* .execute()
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* The generated SQL (PostgreSQL):
|
|
99
|
+
*
|
|
100
|
+
* ```sql
|
|
101
|
+
* select *
|
|
102
|
+
* from "person"
|
|
103
|
+
* where (
|
|
104
|
+
* "first_name" = $1
|
|
105
|
+
* and "last_name" = "first_name"
|
|
106
|
+
* )
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
100
110
|
*
|
|
101
111
|
* To combine conditions using `OR`, you can use the expression builder.
|
|
102
112
|
* There are two ways to create `OR` expressions. Both are shown in this
|
|
@@ -131,7 +141,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
131
141
|
* )
|
|
132
142
|
* ```
|
|
133
143
|
*
|
|
134
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
144
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
135
145
|
*
|
|
136
146
|
* You can add expressions conditionally like this:
|
|
137
147
|
*
|
|
@@ -226,7 +236,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
226
236
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
227
237
|
* ```
|
|
228
238
|
*
|
|
229
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
239
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
230
240
|
*
|
|
231
241
|
* For complex `where` expressions you can pass in a single callback and
|
|
232
242
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -316,8 +326,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
316
326
|
* ```
|
|
317
327
|
*/
|
|
318
328
|
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>;
|
|
329
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
321
330
|
/**
|
|
322
331
|
* Adds a `where` clause where both sides of the operator are references
|
|
323
332
|
* to columns.
|
|
@@ -375,8 +384,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
375
384
|
* instead of a `where` statement.
|
|
376
385
|
*/
|
|
377
386
|
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>;
|
|
387
|
+
having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
380
388
|
/**
|
|
381
389
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
382
390
|
* instead of a `where` statement.
|
|
@@ -568,7 +576,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
568
576
|
* persons[0].id
|
|
569
577
|
* ```
|
|
570
578
|
*/
|
|
571
|
-
select<SE extends SelectExpression<DB, TB>>(
|
|
579
|
+
select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
|
|
580
|
+
select<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, O & CallbackSelection<DB, TB, CB>>;
|
|
581
|
+
select<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
|
|
572
582
|
/**
|
|
573
583
|
* Adds `distinct on` expressions to the select clause.
|
|
574
584
|
*
|
|
@@ -917,14 +927,28 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
917
927
|
/**
|
|
918
928
|
* Adds an `order by` clause to the query.
|
|
919
929
|
*
|
|
920
|
-
* `orderBy` calls are additive.
|
|
921
|
-
*
|
|
930
|
+
* `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
|
|
931
|
+
* the existing order by clause.
|
|
932
|
+
*
|
|
933
|
+
* In a single call you can add a single column/expression or multiple columns/expressions.
|
|
922
934
|
*
|
|
923
|
-
*
|
|
924
|
-
* order (
|
|
935
|
+
* Single column/expression calls can have 1-2 arguments. The first argument is
|
|
936
|
+
* the expression to order by (optionally including the direction) while the second
|
|
937
|
+
* optional argument is the direction (`asc` or `desc`).
|
|
925
938
|
*
|
|
926
939
|
* ### Examples
|
|
927
940
|
*
|
|
941
|
+
* Single column/expression per call:
|
|
942
|
+
*
|
|
943
|
+
* ```ts
|
|
944
|
+
* await db
|
|
945
|
+
* .selectFrom('person')
|
|
946
|
+
* .select('person.first_name as fn')
|
|
947
|
+
* .orderBy('id')
|
|
948
|
+
* .orderBy('fn desc')
|
|
949
|
+
* .execute()
|
|
950
|
+
* ```
|
|
951
|
+
*
|
|
928
952
|
* ```ts
|
|
929
953
|
* await db
|
|
930
954
|
* .selectFrom('person')
|
|
@@ -942,6 +966,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
942
966
|
* order by "id" asc, "fn" desc
|
|
943
967
|
* ```
|
|
944
968
|
*
|
|
969
|
+
* Multiple columns/expressions per call:
|
|
970
|
+
*
|
|
971
|
+
* ```ts
|
|
972
|
+
* await db
|
|
973
|
+
* .selectFrom('person')
|
|
974
|
+
* .select('person.first_name as fn')
|
|
975
|
+
* .orderBy(['id', 'fn desc'])
|
|
976
|
+
* .execute()
|
|
977
|
+
* ```
|
|
978
|
+
*
|
|
945
979
|
* The order by expression can also be a raw sql expression or a subquery
|
|
946
980
|
* in addition to column references:
|
|
947
981
|
*
|
|
@@ -1001,7 +1035,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1001
1035
|
* order by "fn" asc
|
|
1002
1036
|
* ```
|
|
1003
1037
|
*/
|
|
1004
|
-
orderBy(orderBy:
|
|
1038
|
+
orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
|
|
1039
|
+
orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1040
|
+
orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
|
|
1005
1041
|
/**
|
|
1006
1042
|
* Adds a `group by` clause to the query.
|
|
1007
1043
|
*
|
|
@@ -1155,8 +1191,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1155
1191
|
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
1156
1192
|
* .orderBy('name')
|
|
1157
1193
|
* ```
|
|
1194
|
+
*
|
|
1195
|
+
* You can provide a callback to get an expression builder.
|
|
1196
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1197
|
+
*
|
|
1198
|
+
* ```ts
|
|
1199
|
+
* db.selectFrom('person')
|
|
1200
|
+
* .select(['id', 'first_name as name'])
|
|
1201
|
+
* .union((eb) => eb.parens(
|
|
1202
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1203
|
+
* ))
|
|
1204
|
+
* .orderBy('name')
|
|
1205
|
+
* ```
|
|
1158
1206
|
*/
|
|
1159
|
-
union(expression:
|
|
1207
|
+
union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1160
1208
|
/**
|
|
1161
1209
|
* Combines another select query or raw expression to this query using `union all`.
|
|
1162
1210
|
*
|
|
@@ -1170,8 +1218,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1170
1218
|
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1171
1219
|
* .orderBy('name')
|
|
1172
1220
|
* ```
|
|
1221
|
+
*
|
|
1222
|
+
* You can provide a callback to get an expression builder.
|
|
1223
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1224
|
+
*
|
|
1225
|
+
* ```ts
|
|
1226
|
+
* db.selectFrom('person')
|
|
1227
|
+
* .select(['id', 'first_name as name'])
|
|
1228
|
+
* .unionAll((eb) => eb.parens(
|
|
1229
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1230
|
+
* ))
|
|
1231
|
+
* .orderBy('name')
|
|
1232
|
+
* ```
|
|
1173
1233
|
*/
|
|
1174
|
-
unionAll(expression:
|
|
1234
|
+
unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1175
1235
|
/**
|
|
1176
1236
|
* Combines another select query or raw expression to this query using `intersect`.
|
|
1177
1237
|
*
|
|
@@ -1185,8 +1245,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1185
1245
|
* .intersect(db.selectFrom('pet').select(['id', 'name']))
|
|
1186
1246
|
* .orderBy('name')
|
|
1187
1247
|
* ```
|
|
1248
|
+
*
|
|
1249
|
+
* You can provide a callback to get an expression builder.
|
|
1250
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1251
|
+
*
|
|
1252
|
+
* ```ts
|
|
1253
|
+
* db.selectFrom('person')
|
|
1254
|
+
* .select(['id', 'first_name as name'])
|
|
1255
|
+
* .intersect((eb) => eb.parens(
|
|
1256
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1257
|
+
* ))
|
|
1258
|
+
* .orderBy('name')
|
|
1259
|
+
* ```
|
|
1188
1260
|
*/
|
|
1189
|
-
intersect(expression:
|
|
1261
|
+
intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1190
1262
|
/**
|
|
1191
1263
|
* Combines another select query or raw expression to this query using `intersect all`.
|
|
1192
1264
|
*
|
|
@@ -1200,8 +1272,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1200
1272
|
* .intersectAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1201
1273
|
* .orderBy('name')
|
|
1202
1274
|
* ```
|
|
1275
|
+
*
|
|
1276
|
+
* You can provide a callback to get an expression builder.
|
|
1277
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1278
|
+
*
|
|
1279
|
+
* ```ts
|
|
1280
|
+
* db.selectFrom('person')
|
|
1281
|
+
* .select(['id', 'first_name as name'])
|
|
1282
|
+
* .intersectAll((eb) => eb.parens(
|
|
1283
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1284
|
+
* ))
|
|
1285
|
+
* .orderBy('name')
|
|
1286
|
+
* ```
|
|
1203
1287
|
*/
|
|
1204
|
-
intersectAll(expression:
|
|
1288
|
+
intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1205
1289
|
/**
|
|
1206
1290
|
* Combines another select query or raw expression to this query using `except`.
|
|
1207
1291
|
*
|
|
@@ -1215,8 +1299,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1215
1299
|
* .except(db.selectFrom('pet').select(['id', 'name']))
|
|
1216
1300
|
* .orderBy('name')
|
|
1217
1301
|
* ```
|
|
1302
|
+
*
|
|
1303
|
+
* You can provide a callback to get an expression builder.
|
|
1304
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1305
|
+
*
|
|
1306
|
+
* ```ts
|
|
1307
|
+
* db.selectFrom('person')
|
|
1308
|
+
* .select(['id', 'first_name as name'])
|
|
1309
|
+
* .except((eb) => eb.parens(
|
|
1310
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1311
|
+
* ))
|
|
1312
|
+
* .orderBy('name')
|
|
1313
|
+
* ```
|
|
1218
1314
|
*/
|
|
1219
|
-
except(expression:
|
|
1315
|
+
except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1220
1316
|
/**
|
|
1221
1317
|
* Combines another select query or raw expression to this query using `except all`.
|
|
1222
1318
|
*
|
|
@@ -1230,8 +1326,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1230
1326
|
* .exceptAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1231
1327
|
* .orderBy('name')
|
|
1232
1328
|
* ```
|
|
1329
|
+
*
|
|
1330
|
+
* You can provide a callback to get an expression builder.
|
|
1331
|
+
* In the following example, this allows us to wrap the query in parentheses:
|
|
1332
|
+
*
|
|
1333
|
+
* ```ts
|
|
1334
|
+
* db.selectFrom('person')
|
|
1335
|
+
* .select(['id', 'first_name as name'])
|
|
1336
|
+
* .exceptAll((eb) => eb.parens(
|
|
1337
|
+
* eb.selectFrom('pet').select(['id', 'name'])
|
|
1338
|
+
* ))
|
|
1339
|
+
* .orderBy('name')
|
|
1340
|
+
* ```
|
|
1233
1341
|
*/
|
|
1234
|
-
exceptAll(expression:
|
|
1342
|
+
exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1235
1343
|
/**
|
|
1236
1344
|
* Gives an alias for the query. This method is only useful for sub queries.
|
|
1237
1345
|
*
|
|
@@ -1251,7 +1359,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1251
1359
|
* pets[0].owner_first_name
|
|
1252
1360
|
* ```
|
|
1253
1361
|
*/
|
|
1254
|
-
as<A extends string>(alias: A): AliasedSelectQueryBuilder<
|
|
1362
|
+
as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
|
|
1255
1363
|
/**
|
|
1256
1364
|
* Clears all select clauses from the query.
|
|
1257
1365
|
*
|
|
@@ -1445,6 +1553,54 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1445
1553
|
* don't support your use case.
|
|
1446
1554
|
*/
|
|
1447
1555
|
$castTo<T>(): SelectQueryBuilder<DB, TB, T>;
|
|
1556
|
+
/**
|
|
1557
|
+
* Changes the output type from an object to a tuple.
|
|
1558
|
+
*
|
|
1559
|
+
* This doesn't affect the generated SQL in any way. This function is
|
|
1560
|
+
* just a necessary evil when you need to convert a query's output
|
|
1561
|
+
* record type to a tuple type. Typescript doesn't currently offer
|
|
1562
|
+
* tools to do this automatically (without insane hackery).
|
|
1563
|
+
*
|
|
1564
|
+
* The returned object can no longer be executed. It can only be used
|
|
1565
|
+
* as a subquery.
|
|
1566
|
+
*
|
|
1567
|
+
* ### Examples
|
|
1568
|
+
*
|
|
1569
|
+
* ```ts
|
|
1570
|
+
* const result = await db
|
|
1571
|
+
* .selectFrom('person')
|
|
1572
|
+
* .selectAll('person')
|
|
1573
|
+
* .where(({ eb, refTuple, selectFrom }) => eb(
|
|
1574
|
+
* refTuple('first_name', 'last_name'),
|
|
1575
|
+
* 'in',
|
|
1576
|
+
* selectFrom('pet')
|
|
1577
|
+
* .select(['name', 'species'])
|
|
1578
|
+
* .where('pet.species', '!=', 'cat')
|
|
1579
|
+
* .$asTuple('name', 'species')
|
|
1580
|
+
* ))
|
|
1581
|
+
* ```
|
|
1582
|
+
*
|
|
1583
|
+
* The generated SQL(PostgreSQL):
|
|
1584
|
+
*
|
|
1585
|
+
* ```sql
|
|
1586
|
+
* select
|
|
1587
|
+
* "person".*
|
|
1588
|
+
* from
|
|
1589
|
+
* "person"
|
|
1590
|
+
* where
|
|
1591
|
+
* ("first_name", "last_name")
|
|
1592
|
+
* in
|
|
1593
|
+
* (
|
|
1594
|
+
* select "name", "species"
|
|
1595
|
+
* from "pet"
|
|
1596
|
+
* where "pet"."species" != $1
|
|
1597
|
+
* )
|
|
1598
|
+
* ```
|
|
1599
|
+
*/
|
|
1600
|
+
$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'>;
|
|
1601
|
+
$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'>;
|
|
1602
|
+
$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'>;
|
|
1603
|
+
$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
1604
|
/**
|
|
1449
1605
|
* Narrows (parts of) the output type of the query.
|
|
1450
1606
|
*
|
|
@@ -1630,31 +1786,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1630
1786
|
*/
|
|
1631
1787
|
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
|
|
1632
1788
|
}
|
|
1789
|
+
export declare function createSelectQueryBuilder<DB, TB extends keyof DB, O>(props: SelectQueryBuilderProps): SelectQueryBuilder<DB, TB, O>;
|
|
1633
1790
|
export interface SelectQueryBuilderProps {
|
|
1634
1791
|
readonly queryId: QueryId;
|
|
1635
1792
|
readonly queryNode: SelectQueryNode;
|
|
1636
1793
|
readonly executor: QueryExecutor;
|
|
1637
1794
|
}
|
|
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;
|
|
1795
|
+
export interface AliasedSelectQueryBuilder<O = undefined, A extends string = never> extends AliasedExpression<O, A> {
|
|
1796
|
+
get isAliasedSelectQueryBuilder(): true;
|
|
1658
1797
|
}
|
|
1659
1798
|
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
1799
|
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>;
|