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
|
@@ -6,7 +6,7 @@ import { SelectExpression, SelectArg } from '../parser/select-parser.js';
|
|
|
6
6
|
import { ReturningRow } from '../parser/returning-parser.js';
|
|
7
7
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
8
8
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
|
-
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
|
|
9
|
+
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
10
10
|
import { UpdateQueryNode } from '../operation-node/update-query-node.js';
|
|
11
11
|
import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
|
|
12
12
|
import { Compilable } from '../util/compilable.js';
|
|
@@ -14,7 +14,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
14
14
|
import { QueryId } from '../util/query-id.js';
|
|
15
15
|
import { UpdateResult } from './update-result.js';
|
|
16
16
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
17
|
-
import {
|
|
17
|
+
import { WhereInterface } from './where-interface.js';
|
|
18
18
|
import { ReturningInterface } from './returning-interface.js';
|
|
19
19
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
20
20
|
import { Selectable } from '../util/column-type.js';
|
|
@@ -23,6 +23,7 @@ import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
|
23
23
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
24
24
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
25
25
|
import { Streamable } from '../util/streamable.js';
|
|
26
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
26
27
|
export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
27
28
|
#private;
|
|
28
29
|
constructor(props: UpdateQueryBuilderProps);
|
|
@@ -79,24 +80,53 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
79
80
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
80
81
|
* ```
|
|
81
82
|
*
|
|
82
|
-
* <!-- siteExample("where", "
|
|
83
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
83
84
|
*
|
|
84
|
-
*
|
|
85
|
+
* You can use the `and` function to create a simple equality
|
|
86
|
+
* filter using an object
|
|
85
87
|
*
|
|
86
88
|
* ```ts
|
|
87
89
|
* const persons = await db
|
|
88
90
|
* .selectFrom('person')
|
|
89
91
|
* .selectAll()
|
|
90
|
-
* .where((
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
92
|
+
* .where((eb) => eb.and({
|
|
93
|
+
* first_name: 'Jennifer',
|
|
94
|
+
* last_name: eb.ref('first_name')
|
|
95
|
+
* }))
|
|
96
|
+
* .execute()
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* The generated SQL (PostgreSQL):
|
|
100
|
+
*
|
|
101
|
+
* ```sql
|
|
102
|
+
* select *
|
|
103
|
+
* from "person"
|
|
104
|
+
* where (
|
|
105
|
+
* "first_name" = $1
|
|
106
|
+
* and "last_name" = "first_name"
|
|
107
|
+
* )
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
111
|
+
*
|
|
112
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
113
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
114
|
+
* example:
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* const persons = await db
|
|
118
|
+
* .selectFrom('person')
|
|
119
|
+
* .selectAll()
|
|
120
|
+
* // 1. Using the `or` method on the expression builder:
|
|
121
|
+
* .where((eb) => eb.or([
|
|
122
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
123
|
+
* eb('first_name', '=', 'Sylvester')
|
|
99
124
|
* ]))
|
|
125
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
126
|
+
* // created expressions:
|
|
127
|
+
* .where((eb) =>
|
|
128
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
129
|
+
* )
|
|
100
130
|
* .execute()
|
|
101
131
|
* ```
|
|
102
132
|
*
|
|
@@ -106,19 +136,23 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
106
136
|
* select *
|
|
107
137
|
* from "person"
|
|
108
138
|
* where (
|
|
109
|
-
* ("first_name" = $1
|
|
110
|
-
*
|
|
111
|
-
* ("
|
|
139
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
140
|
+
* and
|
|
141
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
112
142
|
* )
|
|
113
143
|
* ```
|
|
114
144
|
*
|
|
115
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
145
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
116
146
|
*
|
|
117
147
|
* You can add expressions conditionally like this:
|
|
118
148
|
*
|
|
119
149
|
* ```ts
|
|
150
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
151
|
+
*
|
|
120
152
|
* const firstName: string | undefined = 'Jennifer'
|
|
121
153
|
* const lastName: string | undefined = 'Aniston'
|
|
154
|
+
* const under18 = true
|
|
155
|
+
* const over60 = true
|
|
122
156
|
*
|
|
123
157
|
* let query = db
|
|
124
158
|
* .selectFrom('person')
|
|
@@ -134,6 +168,23 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
134
168
|
* query = query.where('last_name', '=', lastName)
|
|
135
169
|
* }
|
|
136
170
|
*
|
|
171
|
+
* if (under18 || over60) {
|
|
172
|
+
* // Conditional OR expressions can be added like this.
|
|
173
|
+
* query = query.where((eb) => {
|
|
174
|
+
* const ors: Expression<SqlBool>[] = []
|
|
175
|
+
*
|
|
176
|
+
* if (under18) {
|
|
177
|
+
* ors.push(eb('age', '<', 18))
|
|
178
|
+
* }
|
|
179
|
+
*
|
|
180
|
+
* if (over60) {
|
|
181
|
+
* ors.push(eb('age', '>', 60))
|
|
182
|
+
* }
|
|
183
|
+
*
|
|
184
|
+
* return eb.or(ors)
|
|
185
|
+
* })
|
|
186
|
+
* }
|
|
187
|
+
*
|
|
137
188
|
* const persons = await query.execute()
|
|
138
189
|
* ```
|
|
139
190
|
*
|
|
@@ -186,7 +237,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
186
237
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
187
238
|
* ```
|
|
188
239
|
*
|
|
189
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
240
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
190
241
|
*
|
|
191
242
|
* For complex `where` expressions you can pass in a single callback and
|
|
192
243
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -198,10 +249,10 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
198
249
|
* const persons = await db
|
|
199
250
|
* .selectFrom('person')
|
|
200
251
|
* .selectAll('person')
|
|
201
|
-
* .where(({
|
|
252
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
202
253
|
* or([
|
|
203
|
-
*
|
|
204
|
-
*
|
|
254
|
+
* eb('first_name', '=', firstName),
|
|
255
|
+
* eb('age', '<', maxAge)
|
|
205
256
|
* ]),
|
|
206
257
|
* not(exists(
|
|
207
258
|
* selectFrom('pet')
|
|
@@ -276,8 +327,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
276
327
|
* ```
|
|
277
328
|
*/
|
|
278
329
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
279
|
-
where(
|
|
280
|
-
where(expression: Expression<any>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
330
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
281
331
|
/**
|
|
282
332
|
* Adds a `where` clause where both sides of the operator are references
|
|
283
333
|
* to columns.
|
|
@@ -544,7 +594,38 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
544
594
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
545
595
|
* ```
|
|
546
596
|
*
|
|
547
|
-
*
|
|
597
|
+
* <!-- siteExample("update", "Complex values", 20) -->
|
|
598
|
+
*
|
|
599
|
+
* As always, you can provide a callback to the `set` method to get access
|
|
600
|
+
* to an expression builder:
|
|
601
|
+
*
|
|
602
|
+
* ```ts
|
|
603
|
+
* const result = await db
|
|
604
|
+
* .updateTable('person')
|
|
605
|
+
* .set((eb) => ({
|
|
606
|
+
* age: eb('age', '+', 1),
|
|
607
|
+
* first_name: eb.selectFrom('pet').select('name').limit(1),
|
|
608
|
+
* last_name: 'updated',
|
|
609
|
+
* }))
|
|
610
|
+
* .where('id', '=', '1')
|
|
611
|
+
* .executeTakeFirst()
|
|
612
|
+
*
|
|
613
|
+
* console.log(result.numUpdatedRows)
|
|
614
|
+
* ```
|
|
615
|
+
*
|
|
616
|
+
* The generated SQL (PostgreSQL):
|
|
617
|
+
*
|
|
618
|
+
* ```sql
|
|
619
|
+
* update "person"
|
|
620
|
+
* set
|
|
621
|
+
* "first_name" = (select "name" from "pet" limit $1),
|
|
622
|
+
* "age" = "age" + $2,
|
|
623
|
+
* "last_name" = $3
|
|
624
|
+
* where
|
|
625
|
+
* "id" = $4
|
|
626
|
+
* ```
|
|
627
|
+
*
|
|
628
|
+
* On PostgreSQL you can chain `returning` to the query to get
|
|
548
629
|
* the updated rows' columns (or any other expression) as the
|
|
549
630
|
* return value:
|
|
550
631
|
*
|
|
@@ -726,7 +807,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
726
807
|
* }
|
|
727
808
|
* ```
|
|
728
809
|
*/
|
|
729
|
-
$if<O2>(condition: boolean, func: (qb: this) => UpdateQueryBuilder<
|
|
810
|
+
$if<O2>(condition: boolean, func: (qb: this) => UpdateQueryBuilder<any, any, any, O2>): O2 extends UpdateResult ? UpdateQueryBuilder<DB, UT, TB, UpdateResult> : O2 extends O & infer E ? UpdateQueryBuilder<DB, UT, TB, O & Partial<E>> : UpdateQueryBuilder<DB, UT, TB, Partial<O2>>;
|
|
730
811
|
/**
|
|
731
812
|
* Change the output type of the query.
|
|
732
813
|
*
|
|
@@ -20,13 +20,13 @@ class UpdateQueryBuilder {
|
|
|
20
20
|
where(...args) {
|
|
21
21
|
return new UpdateQueryBuilder({
|
|
22
22
|
...this.#props,
|
|
23
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
23
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
whereRef(lhs, op, rhs) {
|
|
27
27
|
return new UpdateQueryBuilder({
|
|
28
28
|
...this.#props,
|
|
29
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
29
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
clearWhere() {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Expression } from '../expression/expression.js';
|
|
2
1
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
3
2
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
4
3
|
import { SqlBool } from '../util/type-utils.js';
|
|
5
|
-
import {
|
|
4
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
6
5
|
export interface WhereInterface<DB, TB extends keyof DB> {
|
|
7
6
|
/**
|
|
8
7
|
* Adds a `where` expression to the query.
|
|
@@ -57,24 +56,53 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
57
56
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
58
57
|
* ```
|
|
59
58
|
*
|
|
60
|
-
* <!-- siteExample("where", "
|
|
59
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
61
60
|
*
|
|
62
|
-
*
|
|
61
|
+
* You can use the `and` function to create a simple equality
|
|
62
|
+
* filter using an object
|
|
63
63
|
*
|
|
64
64
|
* ```ts
|
|
65
65
|
* const persons = await db
|
|
66
66
|
* .selectFrom('person')
|
|
67
67
|
* .selectAll()
|
|
68
|
-
* .where((
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
68
|
+
* .where((eb) => eb.and({
|
|
69
|
+
* first_name: 'Jennifer',
|
|
70
|
+
* last_name: eb.ref('first_name')
|
|
71
|
+
* }))
|
|
72
|
+
* .execute()
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* The generated SQL (PostgreSQL):
|
|
76
|
+
*
|
|
77
|
+
* ```sql
|
|
78
|
+
* select *
|
|
79
|
+
* from "person"
|
|
80
|
+
* where (
|
|
81
|
+
* "first_name" = $1
|
|
82
|
+
* and "last_name" = "first_name"
|
|
83
|
+
* )
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
87
|
+
*
|
|
88
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
89
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
90
|
+
* example:
|
|
91
|
+
*
|
|
92
|
+
* ```ts
|
|
93
|
+
* const persons = await db
|
|
94
|
+
* .selectFrom('person')
|
|
95
|
+
* .selectAll()
|
|
96
|
+
* // 1. Using the `or` method on the expression builder:
|
|
97
|
+
* .where((eb) => eb.or([
|
|
98
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
99
|
+
* eb('first_name', '=', 'Sylvester')
|
|
77
100
|
* ]))
|
|
101
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
102
|
+
* // created expressions:
|
|
103
|
+
* .where((eb) =>
|
|
104
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
105
|
+
* )
|
|
78
106
|
* .execute()
|
|
79
107
|
* ```
|
|
80
108
|
*
|
|
@@ -84,19 +112,23 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
84
112
|
* select *
|
|
85
113
|
* from "person"
|
|
86
114
|
* where (
|
|
87
|
-
* ("first_name" = $1
|
|
88
|
-
*
|
|
89
|
-
* ("
|
|
115
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
116
|
+
* and
|
|
117
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
90
118
|
* )
|
|
91
119
|
* ```
|
|
92
120
|
*
|
|
93
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
121
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
94
122
|
*
|
|
95
123
|
* You can add expressions conditionally like this:
|
|
96
124
|
*
|
|
97
125
|
* ```ts
|
|
126
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
127
|
+
*
|
|
98
128
|
* const firstName: string | undefined = 'Jennifer'
|
|
99
129
|
* const lastName: string | undefined = 'Aniston'
|
|
130
|
+
* const under18 = true
|
|
131
|
+
* const over60 = true
|
|
100
132
|
*
|
|
101
133
|
* let query = db
|
|
102
134
|
* .selectFrom('person')
|
|
@@ -112,6 +144,23 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
112
144
|
* query = query.where('last_name', '=', lastName)
|
|
113
145
|
* }
|
|
114
146
|
*
|
|
147
|
+
* if (under18 || over60) {
|
|
148
|
+
* // Conditional OR expressions can be added like this.
|
|
149
|
+
* query = query.where((eb) => {
|
|
150
|
+
* const ors: Expression<SqlBool>[] = []
|
|
151
|
+
*
|
|
152
|
+
* if (under18) {
|
|
153
|
+
* ors.push(eb('age', '<', 18))
|
|
154
|
+
* }
|
|
155
|
+
*
|
|
156
|
+
* if (over60) {
|
|
157
|
+
* ors.push(eb('age', '>', 60))
|
|
158
|
+
* }
|
|
159
|
+
*
|
|
160
|
+
* return eb.or(ors)
|
|
161
|
+
* })
|
|
162
|
+
* }
|
|
163
|
+
*
|
|
115
164
|
* const persons = await query.execute()
|
|
116
165
|
* ```
|
|
117
166
|
*
|
|
@@ -164,7 +213,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
164
213
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
165
214
|
* ```
|
|
166
215
|
*
|
|
167
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
216
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
168
217
|
*
|
|
169
218
|
* For complex `where` expressions you can pass in a single callback and
|
|
170
219
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -176,10 +225,10 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
176
225
|
* const persons = await db
|
|
177
226
|
* .selectFrom('person')
|
|
178
227
|
* .selectAll('person')
|
|
179
|
-
* .where(({
|
|
228
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
180
229
|
* or([
|
|
181
|
-
*
|
|
182
|
-
*
|
|
230
|
+
* eb('first_name', '=', firstName),
|
|
231
|
+
* eb('age', '<', maxAge)
|
|
183
232
|
* ]),
|
|
184
233
|
* not(exists(
|
|
185
234
|
* selectFrom('pet')
|
|
@@ -254,8 +303,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
254
303
|
* ```
|
|
255
304
|
*/
|
|
256
305
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
|
|
257
|
-
where(
|
|
258
|
-
where(expression: Expression<any>): WhereInterface<DB, TB>;
|
|
306
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): WhereInterface<DB, TB>;
|
|
259
307
|
/**
|
|
260
308
|
* Adds a `where` clause where both sides of the operator are references
|
|
261
309
|
* to columns.
|
|
@@ -328,4 +376,3 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
328
376
|
*/
|
|
329
377
|
clearWhere(): WhereInterface<DB, TB>;
|
|
330
378
|
}
|
|
331
|
-
export type WhereExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
|
|
@@ -87,6 +87,7 @@ import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
|
|
|
87
87
|
import { JSONPathNode } from '../operation-node/json-path-node.js';
|
|
88
88
|
import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js';
|
|
89
89
|
import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
|
|
90
|
+
import { TupleNode } from '../operation-node/tuple-node.js';
|
|
90
91
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
91
92
|
#private;
|
|
92
93
|
protected get numParameters(): number;
|
|
@@ -113,6 +114,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
113
114
|
protected visitOr(node: OrNode): void;
|
|
114
115
|
protected visitValue(node: ValueNode): void;
|
|
115
116
|
protected visitValueList(node: ValueListNode): void;
|
|
117
|
+
protected visitTuple(node: TupleNode): void;
|
|
116
118
|
protected visitPrimitiveValueList(node: PrimitiveValueListNode): void;
|
|
117
119
|
protected visitParens(node: ParensNode): void;
|
|
118
120
|
protected visitJoin(node: JoinNode): void;
|
|
@@ -194,4 +196,5 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
194
196
|
protected sanitizeIdentifier(identifier: string): string;
|
|
195
197
|
protected addParameter(parameter: unknown): void;
|
|
196
198
|
protected appendImmediateValue(value: unknown): void;
|
|
199
|
+
protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray<SelectModifierNode>;
|
|
197
200
|
}
|
|
@@ -4,6 +4,7 @@ exports.DefaultQueryCompiler = void 0;
|
|
|
4
4
|
const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
|
|
5
5
|
const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
|
|
6
6
|
const operator_node_js_1 = require("../operation-node/operator-node.js");
|
|
7
|
+
const parens_node_js_1 = require("../operation-node/parens-node.js");
|
|
7
8
|
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
8
9
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
9
10
|
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
@@ -29,6 +30,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
29
30
|
}
|
|
30
31
|
visitSelectQuery(node) {
|
|
31
32
|
const wrapInParens = this.parentNode !== undefined &&
|
|
33
|
+
!parens_node_js_1.ParensNode.is(this.parentNode) &&
|
|
32
34
|
!insert_query_node_js_1.InsertQueryNode.is(this.parentNode) &&
|
|
33
35
|
!create_view_node_js_1.CreateViewNode.is(this.parentNode) &&
|
|
34
36
|
!set_operation_node_js_1.SetOperationNode.is(this.parentNode);
|
|
@@ -43,20 +45,23 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
43
45
|
this.visitNode(node.with);
|
|
44
46
|
this.append(' ');
|
|
45
47
|
}
|
|
46
|
-
this.append('select
|
|
48
|
+
this.append('select');
|
|
47
49
|
if (node.distinctOn) {
|
|
48
|
-
this.compileDistinctOn(node.distinctOn);
|
|
49
50
|
this.append(' ');
|
|
51
|
+
this.compileDistinctOn(node.distinctOn);
|
|
50
52
|
}
|
|
51
|
-
if (node.frontModifiers
|
|
52
|
-
this.compileList(node.frontModifiers, ' ');
|
|
53
|
+
if (node.frontModifiers?.length) {
|
|
53
54
|
this.append(' ');
|
|
55
|
+
this.compileList(node.frontModifiers, ' ');
|
|
54
56
|
}
|
|
55
57
|
if (node.selections) {
|
|
58
|
+
this.append(' ');
|
|
56
59
|
this.compileList(node.selections);
|
|
60
|
+
}
|
|
61
|
+
if (node.from) {
|
|
57
62
|
this.append(' ');
|
|
63
|
+
this.visitNode(node.from);
|
|
58
64
|
}
|
|
59
|
-
this.visitNode(node.from);
|
|
60
65
|
if (node.joins) {
|
|
61
66
|
this.append(' ');
|
|
62
67
|
this.compileList(node.joins, ' ');
|
|
@@ -89,9 +94,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
89
94
|
this.append(' ');
|
|
90
95
|
this.visitNode(node.offset);
|
|
91
96
|
}
|
|
92
|
-
if (node.endModifiers
|
|
97
|
+
if (node.endModifiers?.length) {
|
|
93
98
|
this.append(' ');
|
|
94
|
-
this.compileList(node.endModifiers, ' ');
|
|
99
|
+
this.compileList(this.sortSelectModifiers([...node.endModifiers]), ' ');
|
|
95
100
|
}
|
|
96
101
|
if (wrapInParens) {
|
|
97
102
|
this.append(')');
|
|
@@ -273,6 +278,11 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
273
278
|
this.compileList(node.values);
|
|
274
279
|
this.append(')');
|
|
275
280
|
}
|
|
281
|
+
visitTuple(node) {
|
|
282
|
+
this.append('(');
|
|
283
|
+
this.compileList(node.values);
|
|
284
|
+
this.append(')');
|
|
285
|
+
}
|
|
276
286
|
visitPrimitiveValueList(node) {
|
|
277
287
|
this.append('(');
|
|
278
288
|
const { values } = node;
|
|
@@ -653,6 +663,12 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
653
663
|
visitCommonTableExpression(node) {
|
|
654
664
|
this.visitNode(node.name);
|
|
655
665
|
this.append(' as ');
|
|
666
|
+
if ((0, object_utils_js_1.isBoolean)(node.materialized)) {
|
|
667
|
+
if (!node.materialized) {
|
|
668
|
+
this.append('not ');
|
|
669
|
+
}
|
|
670
|
+
this.append('materialized ');
|
|
671
|
+
}
|
|
656
672
|
this.visitNode(node.expression);
|
|
657
673
|
}
|
|
658
674
|
visitCommonTableExpressionName(node) {
|
|
@@ -1056,6 +1072,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
1056
1072
|
throw new Error(`invalid immediate value ${value}`);
|
|
1057
1073
|
}
|
|
1058
1074
|
}
|
|
1075
|
+
sortSelectModifiers(arr) {
|
|
1076
|
+
arr.sort((left, right) => left.modifier && right.modifier
|
|
1077
|
+
? SELECT_MODIFIER_PRIORITY[left.modifier] -
|
|
1078
|
+
SELECT_MODIFIER_PRIORITY[right.modifier]
|
|
1079
|
+
: 1);
|
|
1080
|
+
return (0, object_utils_js_1.freeze)(arr);
|
|
1081
|
+
}
|
|
1059
1082
|
}
|
|
1060
1083
|
exports.DefaultQueryCompiler = DefaultQueryCompiler;
|
|
1061
1084
|
const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({
|
|
@@ -1067,6 +1090,15 @@ const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({
|
|
|
1067
1090
|
SkipLocked: 'skip locked',
|
|
1068
1091
|
Distinct: 'distinct',
|
|
1069
1092
|
});
|
|
1093
|
+
const SELECT_MODIFIER_PRIORITY = (0, object_utils_js_1.freeze)({
|
|
1094
|
+
ForKeyShare: 1,
|
|
1095
|
+
ForNoKeyUpdate: 1,
|
|
1096
|
+
ForUpdate: 1,
|
|
1097
|
+
ForShare: 1,
|
|
1098
|
+
NoWait: 2,
|
|
1099
|
+
SkipLocked: 2,
|
|
1100
|
+
Distinct: 0,
|
|
1101
|
+
});
|
|
1070
1102
|
const JOIN_TYPE_SQL = (0, object_utils_js_1.freeze)({
|
|
1071
1103
|
InnerJoin: 'inner join',
|
|
1072
1104
|
LeftJoin: 'left join',
|
|
@@ -10,6 +10,8 @@ import { InsertResult } from './query-builder/insert-result.js';
|
|
|
10
10
|
import { DeleteResult } from './query-builder/delete-result.js';
|
|
11
11
|
import { UpdateResult } from './query-builder/update-result.js';
|
|
12
12
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
13
|
+
import { CTEBuilderCallback } from './query-builder/cte-builder.js';
|
|
14
|
+
import { SelectArg, SelectExpression, Selection } from './parser/select-parser.js';
|
|
13
15
|
export declare class QueryCreator<DB> {
|
|
14
16
|
#private;
|
|
15
17
|
constructor(props: QueryCreatorProps);
|
|
@@ -125,6 +127,54 @@ export declare class QueryCreator<DB> {
|
|
|
125
127
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
126
128
|
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>;
|
|
127
129
|
selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
130
|
+
/**
|
|
131
|
+
* Creates a `select` query builder without a `from` clause.
|
|
132
|
+
*
|
|
133
|
+
* If you want to create a `select from` query, use the `selectFrom` method instead.
|
|
134
|
+
* This one can be used to create a plain `select` statement without a `from` clause.
|
|
135
|
+
*
|
|
136
|
+
* This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
|
|
137
|
+
* documentation for more examples.
|
|
138
|
+
*
|
|
139
|
+
* ### Examples
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* const result = db.select((eb) => [
|
|
143
|
+
* eb.selectFrom('person')
|
|
144
|
+
* .select('id')
|
|
145
|
+
* .where('first_name', '=', 'Jennifer')
|
|
146
|
+
* .limit(1)
|
|
147
|
+
* .as('jennifer_id'),
|
|
148
|
+
*
|
|
149
|
+
* eb.selectFrom('pet')
|
|
150
|
+
* .select('id')
|
|
151
|
+
* .where('name', '=', 'Doggo')
|
|
152
|
+
* .limit(1)
|
|
153
|
+
* .as('doggo_id')
|
|
154
|
+
* ])
|
|
155
|
+
* .executeTakeFirstOrThrow()
|
|
156
|
+
*
|
|
157
|
+
* console.log(result.jennifer_id)
|
|
158
|
+
* console.log(result.doggo_id)
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* The generated SQL (PostgreSQL):
|
|
162
|
+
*
|
|
163
|
+
* ```sql
|
|
164
|
+
* select (
|
|
165
|
+
* select "id"
|
|
166
|
+
* from "person"
|
|
167
|
+
* where "first_name" = $1
|
|
168
|
+
* limit $2
|
|
169
|
+
* ) as "jennifer_id", (
|
|
170
|
+
* select "id"
|
|
171
|
+
* from "pet"
|
|
172
|
+
* where "name" = $3
|
|
173
|
+
* limit $4
|
|
174
|
+
* ) as "doggo_id"
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
selectNoFrom<SE extends SelectExpression<DB, never>>(selection: SelectArg<DB, never, SE>): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
|
|
128
178
|
/**
|
|
129
179
|
* Creates an insert query.
|
|
130
180
|
*
|
|
@@ -310,14 +360,36 @@ export declare class QueryCreator<DB> {
|
|
|
310
360
|
* .selectAll()
|
|
311
361
|
* .execute()
|
|
312
362
|
* ```
|
|
363
|
+
*
|
|
364
|
+
* The first argument can also be a callback. The callback is passed
|
|
365
|
+
* a `CTEBuilder` instance that can be used to configure the CTE:
|
|
366
|
+
*
|
|
367
|
+
* ```ts
|
|
368
|
+
* await db
|
|
369
|
+
* .with(
|
|
370
|
+
* (cte) => cte('jennifers').materialized(),
|
|
371
|
+
* (db) => db
|
|
372
|
+
* .selectFrom('person')
|
|
373
|
+
* .where('first_name', '=', 'Jennifer')
|
|
374
|
+
* .select(['id', 'age'])
|
|
375
|
+
* )
|
|
376
|
+
* .selectFrom('jennifers')
|
|
377
|
+
* .selectAll()
|
|
378
|
+
* .execute()
|
|
379
|
+
* ```
|
|
313
380
|
*/
|
|
314
|
-
with<N extends string, E extends CommonTableExpression<DB, N>>(
|
|
381
|
+
with<N extends string, E extends CommonTableExpression<DB, N>>(nameOrBuilder: N | CTEBuilderCallback<N>, expression: E): QueryCreatorWithCommonTableExpression<DB, N, E>;
|
|
315
382
|
/**
|
|
316
383
|
* Creates a recursive `with` query (Common Table Expression).
|
|
317
384
|
*
|
|
385
|
+
* Note that recursiveness is a property of the whole `with` statement.
|
|
386
|
+
* You cannot have recursive and non-recursive CTEs in a same `with` statement.
|
|
387
|
+
* Therefore the recursiveness is determined by the **first** `with` or
|
|
388
|
+
* `withRecusive` call you make.
|
|
389
|
+
*
|
|
318
390
|
* See the {@link with} method for examples and more documentation.
|
|
319
391
|
*/
|
|
320
|
-
withRecursive<N extends string, E extends RecursiveCommonTableExpression<DB, N>>(
|
|
392
|
+
withRecursive<N extends string, E extends RecursiveCommonTableExpression<DB, N>>(nameOrBuilder: N | CTEBuilderCallback<N>, expression: E): QueryCreatorWithCommonTableExpression<DB, N, E>;
|
|
321
393
|
/**
|
|
322
394
|
* Returns a copy of this query creator instance with the given plugin installed.
|
|
323
395
|
*/
|