kysely 0.26.0 → 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 +299 -28
- 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 +74 -24
- 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 +1 -1
- 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 +60 -4
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +143 -44
- 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 +245 -86
- package/dist/cjs/query-builder/select-query-builder.js +72 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +106 -25
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +71 -24
- 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 +299 -28
- 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 +74 -24
- 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 +1 -1
- 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 +60 -4
- package/dist/esm/query-builder/on-conflict-builder.d.ts +143 -44
- 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 +245 -86
- package/dist/esm/query-builder/select-query-builder.js +72 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +106 -25
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +71 -24
- 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,24 +78,53 @@ 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) -->
|
|
100
82
|
*
|
|
101
|
-
*
|
|
83
|
+
* You can use the `and` function to create a simple equality
|
|
84
|
+
* filter using an object
|
|
102
85
|
*
|
|
103
86
|
* ```ts
|
|
104
87
|
* const persons = await db
|
|
105
88
|
* .selectFrom('person')
|
|
106
89
|
* .selectAll()
|
|
107
|
-
* .where((
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
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) -->
|
|
109
|
+
*
|
|
110
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
111
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
112
|
+
* example:
|
|
113
|
+
*
|
|
114
|
+
* ```ts
|
|
115
|
+
* const persons = await db
|
|
116
|
+
* .selectFrom('person')
|
|
117
|
+
* .selectAll()
|
|
118
|
+
* // 1. Using the `or` method on the expression builder:
|
|
119
|
+
* .where((eb) => eb.or([
|
|
120
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
121
|
+
* eb('first_name', '=', 'Sylvester')
|
|
116
122
|
* ]))
|
|
123
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
124
|
+
* // created expressions:
|
|
125
|
+
* .where((eb) =>
|
|
126
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
127
|
+
* )
|
|
117
128
|
* .execute()
|
|
118
129
|
* ```
|
|
119
130
|
*
|
|
@@ -123,19 +134,23 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
123
134
|
* select *
|
|
124
135
|
* from "person"
|
|
125
136
|
* where (
|
|
126
|
-
* ("first_name" = $1
|
|
127
|
-
*
|
|
128
|
-
* ("
|
|
137
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
138
|
+
* and
|
|
139
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
129
140
|
* )
|
|
130
141
|
* ```
|
|
131
142
|
*
|
|
132
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
143
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
133
144
|
*
|
|
134
145
|
* You can add expressions conditionally like this:
|
|
135
146
|
*
|
|
136
147
|
* ```ts
|
|
148
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
149
|
+
*
|
|
137
150
|
* const firstName: string | undefined = 'Jennifer'
|
|
138
151
|
* const lastName: string | undefined = 'Aniston'
|
|
152
|
+
* const under18 = true
|
|
153
|
+
* const over60 = true
|
|
139
154
|
*
|
|
140
155
|
* let query = db
|
|
141
156
|
* .selectFrom('person')
|
|
@@ -151,6 +166,23 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
151
166
|
* query = query.where('last_name', '=', lastName)
|
|
152
167
|
* }
|
|
153
168
|
*
|
|
169
|
+
* if (under18 || over60) {
|
|
170
|
+
* // Conditional OR expressions can be added like this.
|
|
171
|
+
* query = query.where((eb) => {
|
|
172
|
+
* const ors: Expression<SqlBool>[] = []
|
|
173
|
+
*
|
|
174
|
+
* if (under18) {
|
|
175
|
+
* ors.push(eb('age', '<', 18))
|
|
176
|
+
* }
|
|
177
|
+
*
|
|
178
|
+
* if (over60) {
|
|
179
|
+
* ors.push(eb('age', '>', 60))
|
|
180
|
+
* }
|
|
181
|
+
*
|
|
182
|
+
* return eb.or(ors)
|
|
183
|
+
* })
|
|
184
|
+
* }
|
|
185
|
+
*
|
|
154
186
|
* const persons = await query.execute()
|
|
155
187
|
* ```
|
|
156
188
|
*
|
|
@@ -203,7 +235,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
203
235
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
204
236
|
* ```
|
|
205
237
|
*
|
|
206
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
238
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
207
239
|
*
|
|
208
240
|
* For complex `where` expressions you can pass in a single callback and
|
|
209
241
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -215,10 +247,10 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
215
247
|
* const persons = await db
|
|
216
248
|
* .selectFrom('person')
|
|
217
249
|
* .selectAll('person')
|
|
218
|
-
* .where(({
|
|
250
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
219
251
|
* or([
|
|
220
|
-
*
|
|
221
|
-
*
|
|
252
|
+
* eb('first_name', '=', firstName),
|
|
253
|
+
* eb('age', '<', maxAge)
|
|
222
254
|
* ]),
|
|
223
255
|
* not(exists(
|
|
224
256
|
* selectFrom('pet')
|
|
@@ -293,8 +325,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
293
325
|
* ```
|
|
294
326
|
*/
|
|
295
327
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
296
|
-
where(
|
|
297
|
-
where(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
|
|
328
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
298
329
|
/**
|
|
299
330
|
* Adds a `where` clause where both sides of the operator are references
|
|
300
331
|
* to columns.
|
|
@@ -352,8 +383,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
352
383
|
* instead of a `where` statement.
|
|
353
384
|
*/
|
|
354
385
|
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
|
|
355
|
-
having(
|
|
356
|
-
having(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
|
|
386
|
+
having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
|
|
357
387
|
/**
|
|
358
388
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
359
389
|
* instead of a `where` statement.
|
|
@@ -467,7 +497,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
467
497
|
* import { sql } from 'kysely'
|
|
468
498
|
*
|
|
469
499
|
* const persons = await db.selectFrom('person')
|
|
470
|
-
* .select(({ selectFrom, or
|
|
500
|
+
* .select(({ eb, selectFrom, or }) => [
|
|
471
501
|
* // Select a correlated subquery
|
|
472
502
|
* selectFrom('pet')
|
|
473
503
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
@@ -479,8 +509,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
479
509
|
* // Build and select an expression using
|
|
480
510
|
* // the expression builder
|
|
481
511
|
* or([
|
|
482
|
-
*
|
|
483
|
-
*
|
|
512
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
513
|
+
* eb('first_name', '=', 'Arnold')
|
|
484
514
|
* ]).as('is_jennifer_or_arnold'),
|
|
485
515
|
*
|
|
486
516
|
* // Select a raw sql expression
|
|
@@ -717,7 +747,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
717
747
|
* ```
|
|
718
748
|
*/
|
|
719
749
|
selectAll<T extends TB>(table: ReadonlyArray<T>): SelectQueryBuilder<DB, TB, O & AllSelection<DB, T>>;
|
|
720
|
-
selectAll<T extends TB>(table: T): SelectQueryBuilder<DB, TB, Selectable<DB[T]>>;
|
|
750
|
+
selectAll<T extends TB>(table: T): SelectQueryBuilder<DB, TB, O & Selectable<DB[T]>>;
|
|
721
751
|
selectAll(): SelectQueryBuilder<DB, TB, O & AllSelection<DB, TB>>;
|
|
722
752
|
/**
|
|
723
753
|
* Joins another table to the query using an inner join.
|
|
@@ -894,14 +924,28 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
894
924
|
/**
|
|
895
925
|
* Adds an `order by` clause to the query.
|
|
896
926
|
*
|
|
897
|
-
* `orderBy` calls are additive.
|
|
898
|
-
*
|
|
927
|
+
* `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
|
|
928
|
+
* the existing order by clause.
|
|
899
929
|
*
|
|
900
|
-
*
|
|
901
|
-
*
|
|
930
|
+
* In a single call you can add a single column/expression or multiple columns/expressions.
|
|
931
|
+
*
|
|
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`).
|
|
902
935
|
*
|
|
903
936
|
* ### Examples
|
|
904
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
|
+
*
|
|
905
949
|
* ```ts
|
|
906
950
|
* await db
|
|
907
951
|
* .selectFrom('person')
|
|
@@ -919,6 +963,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
919
963
|
* order by "id" asc, "fn" desc
|
|
920
964
|
* ```
|
|
921
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
|
+
*
|
|
922
976
|
* The order by expression can also be a raw sql expression or a subquery
|
|
923
977
|
* in addition to column references:
|
|
924
978
|
*
|
|
@@ -978,7 +1032,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
978
1032
|
* order by "fn" asc
|
|
979
1033
|
* ```
|
|
980
1034
|
*/
|
|
981
|
-
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>;
|
|
982
1038
|
/**
|
|
983
1039
|
* Adds a `group by` clause to the query.
|
|
984
1040
|
*
|
|
@@ -1132,8 +1188,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1132
1188
|
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
1133
1189
|
* .orderBy('name')
|
|
1134
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
|
+
* ```
|
|
1135
1203
|
*/
|
|
1136
|
-
union(expression:
|
|
1204
|
+
union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1137
1205
|
/**
|
|
1138
1206
|
* Combines another select query or raw expression to this query using `union all`.
|
|
1139
1207
|
*
|
|
@@ -1147,8 +1215,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1147
1215
|
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1148
1216
|
* .orderBy('name')
|
|
1149
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
|
+
* ```
|
|
1150
1230
|
*/
|
|
1151
|
-
unionAll(expression:
|
|
1231
|
+
unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1152
1232
|
/**
|
|
1153
1233
|
* Combines another select query or raw expression to this query using `intersect`.
|
|
1154
1234
|
*
|
|
@@ -1162,8 +1242,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1162
1242
|
* .intersect(db.selectFrom('pet').select(['id', 'name']))
|
|
1163
1243
|
* .orderBy('name')
|
|
1164
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
|
+
* ```
|
|
1165
1257
|
*/
|
|
1166
|
-
intersect(expression:
|
|
1258
|
+
intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1167
1259
|
/**
|
|
1168
1260
|
* Combines another select query or raw expression to this query using `intersect all`.
|
|
1169
1261
|
*
|
|
@@ -1177,8 +1269,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1177
1269
|
* .intersectAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1178
1270
|
* .orderBy('name')
|
|
1179
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
|
+
* ```
|
|
1180
1284
|
*/
|
|
1181
|
-
intersectAll(expression:
|
|
1285
|
+
intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1182
1286
|
/**
|
|
1183
1287
|
* Combines another select query or raw expression to this query using `except`.
|
|
1184
1288
|
*
|
|
@@ -1192,8 +1296,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1192
1296
|
* .except(db.selectFrom('pet').select(['id', 'name']))
|
|
1193
1297
|
* .orderBy('name')
|
|
1194
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
|
+
* ```
|
|
1195
1311
|
*/
|
|
1196
|
-
except(expression:
|
|
1312
|
+
except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1197
1313
|
/**
|
|
1198
1314
|
* Combines another select query or raw expression to this query using `except all`.
|
|
1199
1315
|
*
|
|
@@ -1207,8 +1323,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1207
1323
|
* .exceptAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1208
1324
|
* .orderBy('name')
|
|
1209
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
|
+
* ```
|
|
1210
1338
|
*/
|
|
1211
|
-
exceptAll(expression:
|
|
1339
|
+
exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1212
1340
|
/**
|
|
1213
1341
|
* Gives an alias for the query. This method is only useful for sub queries.
|
|
1214
1342
|
*
|
|
@@ -1414,7 +1542,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1414
1542
|
* )
|
|
1415
1543
|
* ```
|
|
1416
1544
|
*/
|
|
1417
|
-
$if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<
|
|
1545
|
+
$if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<O2>>;
|
|
1418
1546
|
/**
|
|
1419
1547
|
* Change the output type of the query.
|
|
1420
1548
|
*
|
|
@@ -1422,6 +1550,54 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1422
1550
|
* don't support your use case.
|
|
1423
1551
|
*/
|
|
1424
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'>;
|
|
1425
1601
|
/**
|
|
1426
1602
|
* Narrows (parts of) the output type of the query.
|
|
1427
1603
|
*
|
|
@@ -1607,31 +1783,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1607
1783
|
*/
|
|
1608
1784
|
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
|
|
1609
1785
|
}
|
|
1786
|
+
export declare function createSelectQueryBuilder<DB, TB extends keyof DB, O>(props: SelectQueryBuilderProps): SelectQueryBuilder<DB, TB, O>;
|
|
1610
1787
|
export interface SelectQueryBuilderProps {
|
|
1611
1788
|
readonly queryId: QueryId;
|
|
1612
1789
|
readonly queryNode: SelectQueryNode;
|
|
1613
1790
|
readonly executor: QueryExecutor;
|
|
1614
1791
|
}
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
*/
|
|
1618
|
-
export declare class AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> implements AliasedExpression<O, A> {
|
|
1619
|
-
#private;
|
|
1620
|
-
constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
|
|
1621
|
-
/** @private */
|
|
1622
|
-
/**
|
|
1623
|
-
* Returns the aliased expression.
|
|
1624
|
-
*/
|
|
1625
|
-
get expression(): Expression<O>;
|
|
1626
|
-
/** @private */
|
|
1627
|
-
/**
|
|
1628
|
-
* Returns the alias.
|
|
1629
|
-
*/
|
|
1630
|
-
get alias(): A;
|
|
1631
|
-
/**
|
|
1632
|
-
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
1633
|
-
*/
|
|
1634
|
-
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>;
|
|
1635
1794
|
}
|
|
1636
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;
|
|
1637
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>;
|