kysely 0.11.4 → 0.12.0
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 +1 -1
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
- package/dist/cjs/dynamic/dynamic.d.ts +6 -7
- package/dist/cjs/dynamic/dynamic.js +6 -7
- package/dist/cjs/index.d.ts +13 -3
- package/dist/cjs/index.js +11 -1
- package/dist/cjs/kysely.d.ts +19 -11
- package/dist/cjs/kysely.js +32 -9
- package/dist/cjs/migration/migration.d.ts +2 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
- package/dist/cjs/operation-node/create-table-node.js +6 -6
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
- 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/query-node.d.ts +0 -2
- package/dist/cjs/operation-node/query-node.js +0 -10
- package/dist/cjs/operation-node/values-node.d.ts +15 -0
- package/dist/cjs/operation-node/values-node.js +18 -0
- package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
- package/dist/cjs/parser/complex-expression-parser.js +25 -0
- package/dist/cjs/parser/filter-parser.d.ts +13 -4
- package/dist/cjs/parser/filter-parser.js +21 -24
- package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
- package/dist/cjs/parser/insert-values-parser.js +27 -41
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/parse-context.d.ts +8 -8
- package/dist/cjs/parser/parse-context.js +10 -10
- package/dist/cjs/parser/reference-parser.d.ts +8 -7
- package/dist/cjs/parser/reference-parser.js +8 -17
- package/dist/cjs/parser/returning-parser.d.ts +1 -5
- package/dist/cjs/parser/select-parser.d.ts +12 -14
- package/dist/cjs/parser/select-parser.js +5 -9
- package/dist/cjs/parser/table-parser.d.ts +9 -11
- package/dist/cjs/parser/table-parser.js +2 -8
- package/dist/cjs/parser/union-parser.d.ts +2 -2
- package/dist/cjs/parser/union-parser.js +1 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -8
- package/dist/cjs/parser/update-set-parser.js +6 -26
- package/dist/cjs/parser/value-parser.d.ts +9 -6
- package/dist/cjs/parser/value-parser.js +7 -30
- package/dist/cjs/parser/with-parser.d.ts +6 -3
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/cjs/query-builder/delete-query-builder.js +185 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-builder.d.ts +2 -1
- package/dist/cjs/query-builder/function-builder.js +2 -1
- package/dist/cjs/query-builder/having-interface.d.ts +49 -0
- package/dist/cjs/query-builder/having-interface.js +2 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/cjs/query-builder/insert-query-builder.js +256 -0
- package/dist/cjs/query-builder/insert-result.d.ts +3 -2
- package/dist/cjs/query-builder/insert-result.js +3 -2
- package/dist/cjs/query-builder/join-builder.d.ts +19 -20
- package/dist/cjs/query-builder/join-builder.js +12 -12
- package/dist/cjs/query-builder/join-interface.d.ts +133 -0
- package/dist/cjs/query-builder/join-interface.js +2 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
- package/dist/cjs/query-builder/no-result-error.js +14 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
- package/dist/cjs/query-builder/returning-interface.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
- package/dist/cjs/query-builder/select-query-builder.js +571 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
- package/dist/cjs/query-builder/update-query-builder.js +279 -0
- package/dist/cjs/query-builder/where-interface.d.ts +381 -0
- package/dist/cjs/query-builder/where-interface.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
- package/dist/cjs/query-creator.d.ts +42 -40
- package/dist/cjs/query-creator.js +33 -28
- package/dist/cjs/query-executor/query-executor.d.ts +1 -1
- package/dist/cjs/query-executor/query-executor.js +1 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
- package/dist/cjs/raw-builder/raw-builder.js +6 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
- package/dist/cjs/schema/create-index-builder.d.ts +2 -1
- package/dist/cjs/schema/create-index-builder.js +2 -1
- package/dist/cjs/schema/create-table-builder.d.ts +26 -9
- package/dist/cjs/schema/create-table-builder.js +42 -9
- package/dist/cjs/schema/create-view-builder.d.ts +17 -3
- package/dist/cjs/schema/create-view-builder.js +25 -16
- package/dist/cjs/schema/schema.d.ts +18 -11
- package/dist/cjs/schema/schema.js +18 -11
- package/dist/cjs/util/log.d.ts +3 -2
- package/dist/cjs/util/log.js +8 -15
- package/dist/cjs/util/type-utils.d.ts +7 -7
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
- package/dist/esm/dynamic/dynamic.d.ts +6 -7
- package/dist/esm/dynamic/dynamic.js +6 -7
- package/dist/esm/index.d.ts +13 -3
- package/dist/esm/index.js +11 -1
- package/dist/esm/kysely.d.ts +19 -11
- package/dist/esm/kysely.js +32 -9
- package/dist/esm/migration/migration.d.ts +2 -2
- package/dist/esm/operation-node/create-table-node.d.ts +6 -2
- package/dist/esm/operation-node/create-table-node.js +6 -6
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -1
- 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/query-node.d.ts +0 -2
- package/dist/esm/operation-node/query-node.js +0 -10
- package/dist/esm/operation-node/values-node.d.ts +15 -0
- package/dist/esm/operation-node/values-node.js +15 -0
- package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
- package/dist/esm/parser/complex-expression-parser.js +20 -0
- package/dist/esm/parser/filter-parser.d.ts +13 -4
- package/dist/esm/parser/filter-parser.js +21 -24
- package/dist/esm/parser/insert-values-parser.d.ts +5 -9
- package/dist/esm/parser/insert-values-parser.js +27 -40
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/parse-context.d.ts +8 -8
- package/dist/esm/parser/parse-context.js +10 -10
- package/dist/esm/parser/reference-parser.d.ts +8 -7
- package/dist/esm/parser/reference-parser.js +9 -18
- package/dist/esm/parser/returning-parser.d.ts +1 -5
- package/dist/esm/parser/select-parser.d.ts +12 -14
- package/dist/esm/parser/select-parser.js +6 -10
- package/dist/esm/parser/table-parser.d.ts +9 -11
- package/dist/esm/parser/table-parser.js +3 -9
- package/dist/esm/parser/union-parser.d.ts +2 -2
- package/dist/esm/parser/union-parser.js +1 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -8
- package/dist/esm/parser/update-set-parser.js +5 -24
- package/dist/esm/parser/value-parser.d.ts +9 -6
- package/dist/esm/parser/value-parser.js +8 -31
- package/dist/esm/parser/with-parser.d.ts +6 -3
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/esm/query-builder/delete-query-builder.js +181 -0
- package/dist/esm/query-builder/expression-builder.d.ts +8 -6
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-builder.d.ts +2 -1
- package/dist/esm/query-builder/function-builder.js +2 -1
- package/dist/esm/query-builder/having-interface.d.ts +49 -0
- package/dist/esm/query-builder/having-interface.js +1 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/esm/query-builder/insert-query-builder.js +252 -0
- package/dist/esm/query-builder/insert-result.d.ts +3 -2
- package/dist/esm/query-builder/insert-result.js +3 -2
- package/dist/esm/query-builder/join-builder.d.ts +19 -20
- package/dist/esm/query-builder/join-builder.js +12 -12
- package/dist/esm/query-builder/join-interface.d.ts +133 -0
- package/dist/esm/query-builder/join-interface.js +1 -0
- package/dist/esm/query-builder/no-result-error.d.ts +9 -0
- package/dist/esm/query-builder/no-result-error.js +10 -0
- package/dist/esm/query-builder/returning-interface.d.ts +73 -0
- package/dist/esm/query-builder/returning-interface.js +1 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
- package/dist/esm/query-builder/select-query-builder.js +566 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
- package/dist/esm/query-builder/update-query-builder.js +275 -0
- package/dist/esm/query-builder/where-interface.d.ts +381 -0
- package/dist/esm/query-builder/where-interface.js +1 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +22 -5
- package/dist/esm/query-creator.d.ts +42 -40
- package/dist/esm/query-creator.js +33 -28
- package/dist/esm/query-executor/query-executor.d.ts +1 -1
- package/dist/esm/query-executor/query-executor.js +1 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
- package/dist/esm/raw-builder/raw-builder.js +6 -0
- package/dist/esm/schema/alter-table-builder.d.ts +2 -2
- package/dist/esm/schema/column-definition-builder.d.ts +27 -20
- package/dist/esm/schema/create-index-builder.d.ts +2 -1
- package/dist/esm/schema/create-index-builder.js +2 -1
- package/dist/esm/schema/create-table-builder.d.ts +26 -9
- package/dist/esm/schema/create-table-builder.js +43 -10
- package/dist/esm/schema/create-view-builder.d.ts +17 -3
- package/dist/esm/schema/create-view-builder.js +25 -16
- package/dist/esm/schema/schema.d.ts +18 -11
- package/dist/esm/schema/schema.js +18 -11
- package/dist/esm/util/log.d.ts +3 -2
- package/dist/esm/util/log.js +7 -14
- package/dist/esm/util/type-utils.d.ts +7 -7
- package/package.json +3 -3
- package/dist/cjs/query-builder/query-builder.d.ts +0 -1728
- package/dist/cjs/query-builder/query-builder.js +0 -1067
- package/dist/esm/query-builder/query-builder.d.ts +0 -1728
- package/dist/esm/query-builder/query-builder.js +0 -1061
|
@@ -0,0 +1,711 @@
|
|
|
1
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
4
|
+
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
5
|
+
import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
|
|
6
|
+
import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
|
|
7
|
+
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper, HavingGrouper } from '../parser/filter-parser.js';
|
|
8
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
9
|
+
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
10
|
+
import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
|
|
11
|
+
import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
|
|
12
|
+
import { Compilable } from '../util/compilable.js';
|
|
13
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
|
+
import { QueryId } from '../util/query-id.js';
|
|
15
|
+
import { ParseContext } from '../parser/parse-context.js';
|
|
16
|
+
import { UnionExpression } from '../parser/union-parser.js';
|
|
17
|
+
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
18
|
+
import { WhereInterface } from './where-interface.js';
|
|
19
|
+
import { JoinInterface } from './join-interface.js';
|
|
20
|
+
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
21
|
+
import { HavingInterface } from './having-interface.js';
|
|
22
|
+
export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, JoinInterface<DB, TB>, OperationNodeSource, Compilable {
|
|
23
|
+
#private;
|
|
24
|
+
constructor(props: SelectQueryBuilderProps);
|
|
25
|
+
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
26
|
+
where(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
27
|
+
where(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
|
|
28
|
+
whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
29
|
+
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
30
|
+
orWhere(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
31
|
+
orWhere(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
|
|
32
|
+
orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
33
|
+
whereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
34
|
+
whereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
35
|
+
orWhereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
36
|
+
orWhereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
37
|
+
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
38
|
+
having(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
39
|
+
having(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
|
|
40
|
+
havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
41
|
+
orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
42
|
+
orHaving(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
43
|
+
orHaving(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
|
|
44
|
+
orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
45
|
+
havingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
46
|
+
havingNotExist(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
47
|
+
orHavingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
48
|
+
orHavingNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
49
|
+
/**
|
|
50
|
+
* Adds a select clause to the query.
|
|
51
|
+
*
|
|
52
|
+
* When a column (or any expression) is selected, Kysely adds its type to the return
|
|
53
|
+
* type of the query. Kysely is smart enough to parse the column names and types even
|
|
54
|
+
* from aliased columns, subqueries, raw expressions etc.
|
|
55
|
+
*
|
|
56
|
+
* Kysely only allows you to select columns and expressions that exist and would
|
|
57
|
+
* produce valid SQL. However, Kysely is not perfect and there may be cases where
|
|
58
|
+
* the type inference doesn't work and you need to override it. You can always
|
|
59
|
+
* use the {@link Kysely.dynamic | dynamic} module and {@link Kysely.raw | raw}
|
|
60
|
+
* to override the types.
|
|
61
|
+
*
|
|
62
|
+
* Select calls are additive. Calling `select('id').select('first_name')` is the
|
|
63
|
+
* same as calling `select(['id', 'first_name']).
|
|
64
|
+
*
|
|
65
|
+
* To select all columns of the query or specific tables see the
|
|
66
|
+
* {@link SelectQueryBuilder.selectAll | selectAll} method.
|
|
67
|
+
*
|
|
68
|
+
* ### Examples
|
|
69
|
+
*
|
|
70
|
+
* Select a single column:
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* const persons = await db.selectFrom('person')
|
|
74
|
+
* .select('id')
|
|
75
|
+
* .where('first_name', '=', 'Arnold')
|
|
76
|
+
* .execute()
|
|
77
|
+
*
|
|
78
|
+
* persons[0].id
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* The generated SQL (PostgreSQL):
|
|
82
|
+
*
|
|
83
|
+
* ```sql
|
|
84
|
+
* select "id" from "person" where "first_name" = $1
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* Select a single column and specify a table:
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* const persons = await db.selectFrom(['person', 'pet'])
|
|
91
|
+
* .select('person.id')
|
|
92
|
+
* .execute()
|
|
93
|
+
*
|
|
94
|
+
* persons[0].id
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* The generated SQL (PostgreSQL):
|
|
98
|
+
*
|
|
99
|
+
* ```sql
|
|
100
|
+
* select "person"."id" from "person", "pet"
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* Select multiple columns:
|
|
104
|
+
*
|
|
105
|
+
* ```ts
|
|
106
|
+
* const persons = await db.selectFrom('person')
|
|
107
|
+
* .select(['person.id', 'first_name'])
|
|
108
|
+
* .execute()
|
|
109
|
+
*
|
|
110
|
+
* persons[0].id
|
|
111
|
+
* persons[0].first_name
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* The generated SQL (PostgreSQL):
|
|
115
|
+
*
|
|
116
|
+
* ```sql
|
|
117
|
+
* select "person"."id", "first_name" from "person"
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* Aliased selections:
|
|
121
|
+
*
|
|
122
|
+
* ```ts
|
|
123
|
+
* const persons = await db.selectFrom('person')
|
|
124
|
+
* .select([
|
|
125
|
+
* 'person.first_name as fn',
|
|
126
|
+
* 'person.last_name as ln'
|
|
127
|
+
* ])
|
|
128
|
+
* .execute()
|
|
129
|
+
*
|
|
130
|
+
* persons[0].fn
|
|
131
|
+
* persons[0].ln
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* The generated SQL (PostgreSQL):
|
|
135
|
+
*
|
|
136
|
+
* ```sql
|
|
137
|
+
* select
|
|
138
|
+
* "person"."first_name" as "fn",
|
|
139
|
+
* "person"."last_name" as "ln"
|
|
140
|
+
* from "person"
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* You can also select subqueries and raw expressions. Note that you
|
|
144
|
+
* always need to give a name for the selections using the `as`
|
|
145
|
+
* method:
|
|
146
|
+
*
|
|
147
|
+
* ```ts
|
|
148
|
+
* const persons = await db.selectFrom('person')
|
|
149
|
+
* .select([
|
|
150
|
+
* (qb) => qb
|
|
151
|
+
* .selectFrom('pet')
|
|
152
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
153
|
+
* .select('pet.name')
|
|
154
|
+
* .limit(1)
|
|
155
|
+
* .as('pet_name')
|
|
156
|
+
* db.raw<string>("concat(first_name, ' ', last_name)").as('full_name')
|
|
157
|
+
* ])
|
|
158
|
+
* .execute()
|
|
159
|
+
*
|
|
160
|
+
* persons[0].pet_name
|
|
161
|
+
* persons[0].full_name
|
|
162
|
+
* ```
|
|
163
|
+
*
|
|
164
|
+
* The generated SQL (PostgreSQL):
|
|
165
|
+
*
|
|
166
|
+
* ```sql
|
|
167
|
+
* select
|
|
168
|
+
* (
|
|
169
|
+
* select "pet"."name"
|
|
170
|
+
* from "pet"
|
|
171
|
+
* where "person"."id" = "pet"."owner_id"
|
|
172
|
+
* limit $1
|
|
173
|
+
* ) as "pet_name",
|
|
174
|
+
* concat(first_name, ' ', last_name) as full_name
|
|
175
|
+
* from "person"
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* In case you use `raw` you need to specify the type of the expression
|
|
179
|
+
* (in this example `string`).
|
|
180
|
+
*
|
|
181
|
+
* All the examples above assume you know the column names at compile time.
|
|
182
|
+
* While it's better to build your code like that (that way you also know
|
|
183
|
+
* the types) sometimes it's not possible or you just prefer to write more
|
|
184
|
+
* dynamic code.
|
|
185
|
+
* <br><br>
|
|
186
|
+
* In this example, we use the `dynamic` module's methods to add selections
|
|
187
|
+
* dynamically:
|
|
188
|
+
*
|
|
189
|
+
* ```ts
|
|
190
|
+
* const { ref } = db.dynamic
|
|
191
|
+
*
|
|
192
|
+
* // Some column name provided by the user. Value not known at compile time.
|
|
193
|
+
* const columnFromUserInput = req.query.select;
|
|
194
|
+
*
|
|
195
|
+
* // A type that lists all possible values `columnFromUserInput` can have.
|
|
196
|
+
* // You can use `keyof Person` if any column of an interface is allowed.
|
|
197
|
+
* type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
|
|
198
|
+
*
|
|
199
|
+
* const spersons = await db.selectFrom('person')
|
|
200
|
+
* .select([
|
|
201
|
+
* ref<PossibleColumns>(columnFromUserInput)
|
|
202
|
+
* 'id'
|
|
203
|
+
* ])
|
|
204
|
+
* .execute()
|
|
205
|
+
*
|
|
206
|
+
* // The resulting type contains all `PossibleColumns` as optional fields
|
|
207
|
+
* // because we cannot know which field was actually selected before
|
|
208
|
+
* // running the code.
|
|
209
|
+
* const lastName: string | undefined = persons[0].last_name
|
|
210
|
+
* const firstName: string | undefined = persons[0].first_name
|
|
211
|
+
* const birthDate: string | undefined = persons[0].birth_date
|
|
212
|
+
*
|
|
213
|
+
* // The result type also contains the compile time selection `id`.
|
|
214
|
+
* persons[0].id
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): QueryBuilderWithSelection<DB, TB, O, SE>;
|
|
218
|
+
select<SE extends SelectExpression<DB, TB>>(selection: SE): QueryBuilderWithSelection<DB, TB, O, SE>;
|
|
219
|
+
/**
|
|
220
|
+
* Adds `distinct on` selections to the select clause.
|
|
221
|
+
*
|
|
222
|
+
* Takes the same inputs as the {@link SelectQueryBuilder.select | select} method.
|
|
223
|
+
* See the {@link SelectQueryBuilder.select | select} method's documentation for
|
|
224
|
+
* more examples.
|
|
225
|
+
*
|
|
226
|
+
* ### Examples
|
|
227
|
+
*
|
|
228
|
+
* ```ts
|
|
229
|
+
* await db.selectFrom('person')
|
|
230
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
231
|
+
* .where('pet.name', '=', 'Doggo')
|
|
232
|
+
* .distinctOn('person.id')
|
|
233
|
+
* .selectAll('person')
|
|
234
|
+
* .execute()
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* The generated SQL (PostgreSQL):
|
|
238
|
+
*
|
|
239
|
+
* ```sql
|
|
240
|
+
* select distinct on ("person"."id") "person".*
|
|
241
|
+
* from "person"
|
|
242
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
243
|
+
* where "pet"."name" = $1
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
distinctOn<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O>;
|
|
247
|
+
distinctOn<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O>;
|
|
248
|
+
/**
|
|
249
|
+
* Makes the selection distinct.
|
|
250
|
+
*
|
|
251
|
+
* ### Examples
|
|
252
|
+
*
|
|
253
|
+
* ```ts
|
|
254
|
+
* await db.selectFrom('person')
|
|
255
|
+
* .select('first_name')
|
|
256
|
+
* .distinct()
|
|
257
|
+
* .execute()
|
|
258
|
+
* ```
|
|
259
|
+
*
|
|
260
|
+
* The generated SQL (PostgreSQL):
|
|
261
|
+
*
|
|
262
|
+
* ```sql
|
|
263
|
+
* select distinct "first_name" from "person"
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
distinct(): SelectQueryBuilder<DB, TB, O>;
|
|
267
|
+
/**
|
|
268
|
+
* Adds the `for update` option to a select query on supported databases.
|
|
269
|
+
*/
|
|
270
|
+
forUpdate(): SelectQueryBuilder<DB, TB, O>;
|
|
271
|
+
/**
|
|
272
|
+
* Adds the `for share` option to a select query on supported databases.
|
|
273
|
+
*/
|
|
274
|
+
forShare(): SelectQueryBuilder<DB, TB, O>;
|
|
275
|
+
/**
|
|
276
|
+
* Adds the `for key share` option to a select query on supported databases.
|
|
277
|
+
*/
|
|
278
|
+
forKeyShare(): SelectQueryBuilder<DB, TB, O>;
|
|
279
|
+
/**
|
|
280
|
+
* Adds the `for no key update` option to a select query on supported databases.
|
|
281
|
+
*/
|
|
282
|
+
forNoKeyUpdate(): SelectQueryBuilder<DB, TB, O>;
|
|
283
|
+
/**
|
|
284
|
+
* Adds the `skip locked` option to a select query on supported databases.
|
|
285
|
+
*/
|
|
286
|
+
skipLocked(): SelectQueryBuilder<DB, TB, O>;
|
|
287
|
+
/**
|
|
288
|
+
* Adds the `nowait` option to a select query on supported databases.
|
|
289
|
+
*/
|
|
290
|
+
noWait(): SelectQueryBuilder<DB, TB, O>;
|
|
291
|
+
/**
|
|
292
|
+
* Adds a `select *` or `select table.*` clause to the query.
|
|
293
|
+
*
|
|
294
|
+
* ### Examples
|
|
295
|
+
*
|
|
296
|
+
* ```ts
|
|
297
|
+
* const persons = await db
|
|
298
|
+
* .selectFrom('person')
|
|
299
|
+
* .selectAll()
|
|
300
|
+
* .execute()
|
|
301
|
+
* ```
|
|
302
|
+
*
|
|
303
|
+
* The generated SQL (PostgreSQL):
|
|
304
|
+
*
|
|
305
|
+
* ```sql
|
|
306
|
+
* select * from "person"
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* Select all columns of a table:
|
|
310
|
+
*
|
|
311
|
+
* ```ts
|
|
312
|
+
* const persons = await db
|
|
313
|
+
* .selectFrom('person')
|
|
314
|
+
* .selectAll('person')
|
|
315
|
+
* .execute()
|
|
316
|
+
* ```
|
|
317
|
+
*
|
|
318
|
+
* The generated SQL (PostgreSQL):
|
|
319
|
+
*
|
|
320
|
+
* ```sql
|
|
321
|
+
* select "person".* from "person"
|
|
322
|
+
* ```
|
|
323
|
+
*
|
|
324
|
+
* Select all columns of multiple tables:
|
|
325
|
+
*
|
|
326
|
+
* ```ts
|
|
327
|
+
* const personsPets = await db
|
|
328
|
+
* .selectFrom(['person', 'pet'])
|
|
329
|
+
* .selectAll(['person', 'pet'])
|
|
330
|
+
* .execute()
|
|
331
|
+
* ```
|
|
332
|
+
*
|
|
333
|
+
* The generated SQL (PostgreSQL):
|
|
334
|
+
*
|
|
335
|
+
* ```sql
|
|
336
|
+
* select "person".*, "pet".* from "person", "pet"
|
|
337
|
+
* ```
|
|
338
|
+
*/
|
|
339
|
+
selectAll<T extends TB>(table: ReadonlyArray<T>): SelectAllQueryBuilder<DB, TB, O, T>;
|
|
340
|
+
selectAll<T extends TB>(table: T): SelectAllQueryBuilder<DB, TB, O, T>;
|
|
341
|
+
selectAll<T extends TB>(): SelectAllQueryBuilder<DB, TB, O, T>;
|
|
342
|
+
innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
343
|
+
innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
344
|
+
leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
345
|
+
leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
346
|
+
rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
347
|
+
rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
348
|
+
fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
349
|
+
fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
350
|
+
/**
|
|
351
|
+
* Adds an `order by` clause to the query.
|
|
352
|
+
*
|
|
353
|
+
* `orderBy` calls are additive. To order by multiple columns, call `orderBy`
|
|
354
|
+
* multiple times.
|
|
355
|
+
*
|
|
356
|
+
* The first argument is the expression to order by and the second is the
|
|
357
|
+
* order (`asc` or `desc`).
|
|
358
|
+
*
|
|
359
|
+
* ### Examples
|
|
360
|
+
*
|
|
361
|
+
* ```ts
|
|
362
|
+
* await db
|
|
363
|
+
* .selectFrom('person')
|
|
364
|
+
* .select('person.first_name as fn')
|
|
365
|
+
* .orderBy('id')
|
|
366
|
+
* .orderBy('fn', 'desc')
|
|
367
|
+
* .execute()
|
|
368
|
+
* ```
|
|
369
|
+
*
|
|
370
|
+
* The generated SQL (PostgreSQL):
|
|
371
|
+
*
|
|
372
|
+
* ```sql
|
|
373
|
+
* select "person"."first_name" as "fn"
|
|
374
|
+
* from "person"
|
|
375
|
+
* order by "id" asc, "fn" desc
|
|
376
|
+
* ```
|
|
377
|
+
*
|
|
378
|
+
* The order by expression can also be a `raw` expression or a subquery
|
|
379
|
+
* in addition to column references:
|
|
380
|
+
*
|
|
381
|
+
* ```ts
|
|
382
|
+
* await db
|
|
383
|
+
* .selectFrom('person')
|
|
384
|
+
* .selectAll()
|
|
385
|
+
* .orderBy((qb) => qb.selectFrom('pet')
|
|
386
|
+
* .select('pet.name')
|
|
387
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
388
|
+
* .limit(1)
|
|
389
|
+
* )
|
|
390
|
+
* .orderBy(
|
|
391
|
+
* db.raw('concat(first_name, last_name)')
|
|
392
|
+
* )
|
|
393
|
+
* .execute()
|
|
394
|
+
* ```
|
|
395
|
+
*
|
|
396
|
+
* The generated SQL (PostgreSQL):
|
|
397
|
+
*
|
|
398
|
+
* ```sql
|
|
399
|
+
* select *
|
|
400
|
+
* from "person"
|
|
401
|
+
* order by
|
|
402
|
+
* ( select "pet"."name"
|
|
403
|
+
* from "pet"
|
|
404
|
+
* where "pet"."owner_id" = "person"."id"
|
|
405
|
+
* limit 1
|
|
406
|
+
* ) asc,
|
|
407
|
+
* concat(first_name, last_name) asc
|
|
408
|
+
* ```
|
|
409
|
+
*
|
|
410
|
+
* `dynamic.ref` can be used to refer to columns not known at
|
|
411
|
+
* compile time:
|
|
412
|
+
*
|
|
413
|
+
* ```ts
|
|
414
|
+
* async function someQuery(orderBy: string) {
|
|
415
|
+
* const { ref } = db.dynamic
|
|
416
|
+
*
|
|
417
|
+
* return await db
|
|
418
|
+
* .selectFrom('person')
|
|
419
|
+
* .select('person.first_name as fn')
|
|
420
|
+
* .orderBy(ref(orderBy))
|
|
421
|
+
* .execute()
|
|
422
|
+
* }
|
|
423
|
+
*
|
|
424
|
+
* someQuery('fn')
|
|
425
|
+
* ```
|
|
426
|
+
*
|
|
427
|
+
* The generated SQL (PostgreSQL):
|
|
428
|
+
*
|
|
429
|
+
* ```sql
|
|
430
|
+
* select "person"."first_name" as "fn"
|
|
431
|
+
* from "person"
|
|
432
|
+
* order by "fn" asc
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
|
|
436
|
+
/**
|
|
437
|
+
* Adds a `group by` clause to the query.
|
|
438
|
+
*
|
|
439
|
+
* ### Examples
|
|
440
|
+
*
|
|
441
|
+
* ```ts
|
|
442
|
+
* await db
|
|
443
|
+
* .selectFrom('person')
|
|
444
|
+
* .select([
|
|
445
|
+
* 'first_name',
|
|
446
|
+
* db.raw('max(id)').as('max_id')
|
|
447
|
+
* ])
|
|
448
|
+
* .groupBy('first_name')
|
|
449
|
+
* .execute()
|
|
450
|
+
* ```
|
|
451
|
+
*
|
|
452
|
+
* The generated SQL (PostgreSQL):
|
|
453
|
+
*
|
|
454
|
+
* ```sql
|
|
455
|
+
* select "first_name", max(id)
|
|
456
|
+
* from "person"
|
|
457
|
+
* group by "first_name"
|
|
458
|
+
* ```
|
|
459
|
+
*
|
|
460
|
+
* `groupBy` also accepts an array:
|
|
461
|
+
*
|
|
462
|
+
* ```ts
|
|
463
|
+
* const { raw } = db
|
|
464
|
+
*
|
|
465
|
+
* await db
|
|
466
|
+
* .selectFrom('person')
|
|
467
|
+
* .select([
|
|
468
|
+
* 'first_name',
|
|
469
|
+
* 'last_name',
|
|
470
|
+
* raw('max(id)').as('max_id')
|
|
471
|
+
* ])
|
|
472
|
+
* .groupBy([
|
|
473
|
+
* 'first_name',
|
|
474
|
+
* 'last_name'
|
|
475
|
+
* ])
|
|
476
|
+
* .execute()
|
|
477
|
+
* ```
|
|
478
|
+
*
|
|
479
|
+
* The generated SQL (PostgreSQL):
|
|
480
|
+
*
|
|
481
|
+
* ```sql
|
|
482
|
+
* select "first_name", "last_name", max(id)
|
|
483
|
+
* from "person"
|
|
484
|
+
* group by "first_name", "last_name"
|
|
485
|
+
* ```
|
|
486
|
+
*
|
|
487
|
+
* The group by expressions can also be subqueries or
|
|
488
|
+
* raw expressions:
|
|
489
|
+
*
|
|
490
|
+
* ```ts
|
|
491
|
+
* const { raw } = db
|
|
492
|
+
*
|
|
493
|
+
* await db
|
|
494
|
+
* .selectFrom('person')
|
|
495
|
+
* .select([
|
|
496
|
+
* 'first_name',
|
|
497
|
+
* 'last_name',
|
|
498
|
+
* raw('max(id)').as('max_id')
|
|
499
|
+
* ])
|
|
500
|
+
* .groupBy([
|
|
501
|
+
* raw('concat(first_name, last_name)'),
|
|
502
|
+
* (qb) => qb.selectFrom('pet').select('id').limit(1)
|
|
503
|
+
* ])
|
|
504
|
+
* .execute()
|
|
505
|
+
* ```
|
|
506
|
+
*
|
|
507
|
+
* `dynamic.ref` can be used to refer to columns not known at
|
|
508
|
+
* compile time:
|
|
509
|
+
*
|
|
510
|
+
* ```ts
|
|
511
|
+
* async function someQuery(groupBy: string) {
|
|
512
|
+
* const { ref } = db.dynamic
|
|
513
|
+
*
|
|
514
|
+
* return await db
|
|
515
|
+
* .selectFrom('person')
|
|
516
|
+
* .select('first_name')
|
|
517
|
+
* .groupBy(ref(groupBy))
|
|
518
|
+
* .execute()
|
|
519
|
+
* }
|
|
520
|
+
*
|
|
521
|
+
* someQuery('first_name')
|
|
522
|
+
* ```
|
|
523
|
+
*
|
|
524
|
+
* The generated SQL (PostgreSQL):
|
|
525
|
+
*
|
|
526
|
+
* ```sql
|
|
527
|
+
* select "first_name"
|
|
528
|
+
* from "person"
|
|
529
|
+
* group by "first_name"
|
|
530
|
+
* ```
|
|
531
|
+
*/
|
|
532
|
+
groupBy(orderBy: ReadonlyArray<ReferenceExpression<DB, TB>>): SelectQueryBuilder<DB, TB, O>;
|
|
533
|
+
groupBy(orderBy: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
|
|
534
|
+
/**
|
|
535
|
+
* Adds a limit clause to the query.
|
|
536
|
+
*
|
|
537
|
+
* ### Examples
|
|
538
|
+
*
|
|
539
|
+
* Select the first 10 rows of the result:
|
|
540
|
+
*
|
|
541
|
+
* ```ts
|
|
542
|
+
* return await db
|
|
543
|
+
* .selectFrom('person')
|
|
544
|
+
* .select('first_name')
|
|
545
|
+
* .limit(10)
|
|
546
|
+
* ```
|
|
547
|
+
*
|
|
548
|
+
* Select rows from index 10 to index 19 of the result:
|
|
549
|
+
*
|
|
550
|
+
* ```ts
|
|
551
|
+
* return await db
|
|
552
|
+
* .selectFrom('person')
|
|
553
|
+
* .select('first_name')
|
|
554
|
+
* .offset(10)
|
|
555
|
+
* .limit(10)
|
|
556
|
+
* ```
|
|
557
|
+
*/
|
|
558
|
+
limit(limit: number): SelectQueryBuilder<DB, TB, O>;
|
|
559
|
+
/**
|
|
560
|
+
* Adds an offset clause to the query.
|
|
561
|
+
*
|
|
562
|
+
* ### Examples
|
|
563
|
+
*
|
|
564
|
+
* Select rows from index 10 to index 19 of the result:
|
|
565
|
+
*
|
|
566
|
+
* ```ts
|
|
567
|
+
* return await db
|
|
568
|
+
* .selectFrom('person')
|
|
569
|
+
* .select('first_name')
|
|
570
|
+
* .offset(10)
|
|
571
|
+
* .limit(10)
|
|
572
|
+
* ```
|
|
573
|
+
*/
|
|
574
|
+
offset(offset: number): SelectQueryBuilder<DB, TB, O>;
|
|
575
|
+
/**
|
|
576
|
+
* Combines another select query or raw expression to this query using `union`.
|
|
577
|
+
*
|
|
578
|
+
* The output row type of the combined query must match `this` query.
|
|
579
|
+
*
|
|
580
|
+
* ### Examples
|
|
581
|
+
*
|
|
582
|
+
* ```ts
|
|
583
|
+
* db.selectFrom('person')
|
|
584
|
+
* .select(['id', 'first_name as name'])
|
|
585
|
+
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
586
|
+
* .orderBy('name')
|
|
587
|
+
* ```
|
|
588
|
+
*/
|
|
589
|
+
union(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
590
|
+
/**
|
|
591
|
+
* Combines another select query or raw expression to this query using `union all`.
|
|
592
|
+
*
|
|
593
|
+
* The output row type of the combined query must match `this` query.
|
|
594
|
+
*
|
|
595
|
+
* ### Examples
|
|
596
|
+
*
|
|
597
|
+
* ```ts
|
|
598
|
+
* db.selectFrom('person')
|
|
599
|
+
* .select(['id', 'first_name as name'])
|
|
600
|
+
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
601
|
+
* .orderBy('name')
|
|
602
|
+
* ```
|
|
603
|
+
*/
|
|
604
|
+
unionAll(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
605
|
+
/**
|
|
606
|
+
* Simply calls the given function passing `this` as the only argument.
|
|
607
|
+
*
|
|
608
|
+
* This method can be useful when adding optional method calls:
|
|
609
|
+
*
|
|
610
|
+
* ### Examples
|
|
611
|
+
*
|
|
612
|
+
* ```ts
|
|
613
|
+
* db.selectFrom('person')
|
|
614
|
+
* .selectAll()
|
|
615
|
+
* .call((qb) => {
|
|
616
|
+
* if (something) {
|
|
617
|
+
* return qb.where('something', '=', something)
|
|
618
|
+
* } else {
|
|
619
|
+
* return qb.where('somethingElse', '=', somethingElse)
|
|
620
|
+
* }
|
|
621
|
+
* })
|
|
622
|
+
* .execute()
|
|
623
|
+
* ```
|
|
624
|
+
*
|
|
625
|
+
* The next example uses a helper funtion `log` to log a query:
|
|
626
|
+
*
|
|
627
|
+
* ```ts
|
|
628
|
+
* function log<T extends AnyQueryBuilder>(qb: T): T {
|
|
629
|
+
* console.log(qb.compile())
|
|
630
|
+
* return qb
|
|
631
|
+
* }
|
|
632
|
+
*
|
|
633
|
+
* db.selectFrom('person')
|
|
634
|
+
* .selectAll()
|
|
635
|
+
* .call(log)
|
|
636
|
+
* .execute()
|
|
637
|
+
* ```
|
|
638
|
+
*/
|
|
639
|
+
call<T>(func: (qb: this) => T): T;
|
|
640
|
+
/**
|
|
641
|
+
* Gives an alias for the query. This method is only useful for sub queries.
|
|
642
|
+
*
|
|
643
|
+
* ### Examples
|
|
644
|
+
*
|
|
645
|
+
* ```ts
|
|
646
|
+
* await db.selectFrom('pet')
|
|
647
|
+
* .selectAll('pet')
|
|
648
|
+
* .select(
|
|
649
|
+
* (qb) => qb.selectFrom('person')
|
|
650
|
+
* .select('first_name')
|
|
651
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
652
|
+
* .as('owner_first_name')
|
|
653
|
+
* )
|
|
654
|
+
* .execute()
|
|
655
|
+
* ```
|
|
656
|
+
*/
|
|
657
|
+
as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
|
|
658
|
+
/**
|
|
659
|
+
* Change the output type of the query.
|
|
660
|
+
*
|
|
661
|
+
* You should only use this method as the last resort if the types
|
|
662
|
+
* don't support your use case.
|
|
663
|
+
*/
|
|
664
|
+
castTo<T>(): SelectQueryBuilder<DB, TB, T>;
|
|
665
|
+
withPlugin(plugin: KyselyPlugin): SelectQueryBuilder<DB, TB, O>;
|
|
666
|
+
toOperationNode(): SelectQueryNode;
|
|
667
|
+
compile(): CompiledQuery;
|
|
668
|
+
/**
|
|
669
|
+
* Executes the query and returns an array of rows.
|
|
670
|
+
*
|
|
671
|
+
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
672
|
+
*/
|
|
673
|
+
execute(): Promise<O[]>;
|
|
674
|
+
/**
|
|
675
|
+
* Executes the query and returns the first result or undefined if
|
|
676
|
+
* the query returned no result.
|
|
677
|
+
*/
|
|
678
|
+
executeTakeFirst(): Promise<SingleResultType<O>>;
|
|
679
|
+
/**
|
|
680
|
+
* Executes the query and returns the first result or throws if
|
|
681
|
+
* the query returned no result.
|
|
682
|
+
*
|
|
683
|
+
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
684
|
+
* provide a custom error class as the only argument to throw a different
|
|
685
|
+
* error.
|
|
686
|
+
*/
|
|
687
|
+
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
|
|
688
|
+
}
|
|
689
|
+
export interface SelectQueryBuilderProps {
|
|
690
|
+
readonly queryId: QueryId;
|
|
691
|
+
readonly queryNode: SelectQueryNode;
|
|
692
|
+
readonly executor: QueryExecutor;
|
|
693
|
+
readonly parseContext: ParseContext;
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
|
|
697
|
+
*/
|
|
698
|
+
export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> {
|
|
699
|
+
#private;
|
|
700
|
+
constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
|
|
701
|
+
/**
|
|
702
|
+
* @private
|
|
703
|
+
*
|
|
704
|
+
* This needs to be here just so that the typings work. Without this
|
|
705
|
+
* the generated .d.ts file contains no reference to the type param A
|
|
706
|
+
* which causes this type to be equal to AliasedQueryBuilder with any A
|
|
707
|
+
* as long as D, TB and O are the same.
|
|
708
|
+
*/
|
|
709
|
+
protected get alias(): A;
|
|
710
|
+
toOperationNode(): AliasNode;
|
|
711
|
+
}
|