kysely 0.27.4 → 0.27.6
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/.renovaterc.json +3 -0
- package/CODE_OF_CONDUCT.md +183 -0
- package/CONTRIBUTING.md +121 -23
- package/FUNDING.md +25 -0
- package/README.md +13 -2
- package/deno.check.d.ts +86 -0
- package/deno.check.json +21 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
- package/dist/cjs/driver/dummy-driver.d.ts +13 -12
- package/dist/cjs/driver/dummy-driver.js +13 -12
- package/dist/cjs/dynamic/dynamic.d.ts +6 -6
- package/dist/cjs/dynamic/dynamic.js +6 -6
- package/dist/cjs/expression/expression-builder.d.ts +154 -61
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
- package/dist/cjs/expression/expression.d.ts +40 -5
- package/dist/cjs/helpers/mssql.d.ts +74 -14
- package/dist/cjs/helpers/mssql.js +74 -14
- package/dist/cjs/helpers/mysql.d.ts +14 -10
- package/dist/cjs/helpers/mysql.js +14 -10
- package/dist/cjs/helpers/postgres.d.ts +7 -4
- package/dist/cjs/helpers/postgres.js +7 -4
- package/dist/cjs/helpers/sqlite.d.ts +41 -16
- package/dist/cjs/helpers/sqlite.js +41 -16
- package/dist/cjs/kysely.d.ts +99 -41
- package/dist/cjs/kysely.js +60 -36
- package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/migration/migrator.d.ts +90 -15
- package/dist/cjs/migration/migrator.js +95 -17
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/data-type-node.js +12 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
- package/dist/cjs/operation-node/query-node.d.ts +4 -0
- package/dist/cjs/operation-node/query-node.js +8 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -8
- package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
- package/dist/cjs/parser/insert-values-parser.js +3 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
- package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +26 -0
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/cjs/query-builder/delete-query-builder.js +76 -26
- package/dist/cjs/query-builder/function-module.d.ts +35 -88
- package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/cjs/query-builder/insert-query-builder.js +188 -52
- package/dist/cjs/query-builder/insert-result.d.ts +10 -5
- package/dist/cjs/query-builder/insert-result.js +10 -5
- package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
- package/dist/cjs/query-builder/json-path-builder.js +8 -5
- package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/cjs/query-builder/merge-query-builder.js +68 -6
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
- package/dist/cjs/query-builder/output-interface.d.ts +50 -7
- package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
- package/dist/cjs/query-builder/select-query-builder.js +7 -7
- package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
- package/dist/cjs/query-builder/update-query-builder.js +75 -10
- package/dist/cjs/query-builder/update-result.d.ts +2 -2
- package/dist/cjs/query-builder/update-result.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +5 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
- package/dist/cjs/query-creator.d.ts +66 -18
- package/dist/cjs/query-creator.js +2 -2
- package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
- package/dist/cjs/raw-builder/sql.d.ts +27 -8
- package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
- package/dist/cjs/schema/alter-column-builder.js +17 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
- package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
- package/dist/cjs/schema/column-definition-builder.js +283 -26
- package/dist/cjs/schema/create-table-builder.d.ts +86 -33
- package/dist/cjs/schema/create-table-builder.js +86 -33
- package/dist/cjs/util/column-type.d.ts +5 -9
- package/dist/cjs/util/require-all-props.d.ts +4 -2
- package/dist/cjs/util/require-all-props.js +4 -2
- package/dist/cjs/util/streamable.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +4 -2
- package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
- package/dist/esm/driver/dummy-driver.d.ts +13 -12
- package/dist/esm/driver/dummy-driver.js +13 -12
- package/dist/esm/dynamic/dynamic.d.ts +6 -6
- package/dist/esm/dynamic/dynamic.js +6 -6
- package/dist/esm/expression/expression-builder.d.ts +154 -61
- package/dist/esm/expression/expression-wrapper.d.ts +92 -23
- package/dist/esm/expression/expression.d.ts +40 -5
- package/dist/esm/helpers/mssql.d.ts +74 -14
- package/dist/esm/helpers/mssql.js +74 -14
- package/dist/esm/helpers/mysql.d.ts +14 -10
- package/dist/esm/helpers/mysql.js +14 -10
- package/dist/esm/helpers/postgres.d.ts +7 -4
- package/dist/esm/helpers/postgres.js +7 -4
- package/dist/esm/helpers/sqlite.d.ts +41 -16
- package/dist/esm/helpers/sqlite.js +41 -16
- package/dist/esm/kysely.d.ts +99 -41
- package/dist/esm/kysely.js +60 -36
- package/dist/esm/migration/file-migration-provider.d.ts +2 -2
- package/dist/esm/migration/file-migration-provider.js +2 -2
- package/dist/esm/migration/migrator.d.ts +90 -15
- package/dist/esm/migration/migrator.js +95 -17
- package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/esm/operation-node/aggregate-function-node.js +9 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/data-type-node.js +12 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/esm/operation-node/operation-node-transformer.js +14 -3
- package/dist/esm/operation-node/query-node.d.ts +4 -0
- package/dist/esm/operation-node/query-node.js +8 -0
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -8
- package/dist/esm/operation-node/update-query-node.d.ts +1 -0
- package/dist/esm/parser/insert-values-parser.js +3 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/esm/plugin/camel-case/camel-case.js +4 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
- package/dist/esm/plugin/noop-plugin.d.ts +28 -6
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +26 -0
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/esm/query-builder/delete-query-builder.js +76 -26
- package/dist/esm/query-builder/function-module.d.ts +35 -88
- package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/esm/query-builder/insert-query-builder.js +188 -52
- package/dist/esm/query-builder/insert-result.d.ts +10 -5
- package/dist/esm/query-builder/insert-result.js +10 -5
- package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
- package/dist/esm/query-builder/json-path-builder.js +8 -5
- package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/esm/query-builder/merge-query-builder.js +68 -6
- package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/esm/query-builder/on-conflict-builder.js +41 -16
- package/dist/esm/query-builder/output-interface.d.ts +50 -7
- package/dist/esm/query-builder/returning-interface.d.ts +5 -5
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
- package/dist/esm/query-builder/select-query-builder.js +7 -7
- package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
- package/dist/esm/query-builder/update-query-builder.js +75 -10
- package/dist/esm/query-builder/update-result.d.ts +2 -2
- package/dist/esm/query-builder/update-result.js +2 -2
- package/dist/esm/query-builder/where-interface.d.ts +5 -1
- package/dist/esm/query-compiler/default-query-compiler.js +20 -0
- package/dist/esm/query-creator.d.ts +66 -18
- package/dist/esm/query-creator.js +2 -2
- package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
- package/dist/esm/raw-builder/sql.d.ts +27 -8
- package/dist/esm/schema/alter-column-builder.d.ts +17 -3
- package/dist/esm/schema/alter-column-builder.js +17 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
- package/dist/esm/schema/column-definition-builder.d.ts +283 -26
- package/dist/esm/schema/column-definition-builder.js +283 -26
- package/dist/esm/schema/create-table-builder.d.ts +86 -33
- package/dist/esm/schema/create-table-builder.js +86 -33
- package/dist/esm/util/column-type.d.ts +5 -9
- package/dist/esm/util/require-all-props.d.ts +4 -2
- package/dist/esm/util/require-all-props.js +4 -2
- package/dist/esm/util/streamable.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +4 -2
- package/package.json +28 -23
|
@@ -140,7 +140,7 @@ class InsertQueryBuilder {
|
|
|
140
140
|
* .insertInto('person')
|
|
141
141
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
142
142
|
* first_name: 'Jennifer',
|
|
143
|
-
* last_name: sql<string
|
|
143
|
+
* last_name: sql<string>`concat(${ani}, ${ston})`,
|
|
144
144
|
* middle_name: ref('first_name'),
|
|
145
145
|
* age: selectFrom('person')
|
|
146
146
|
* .select(fn.avg<number>('age').as('avg_age')),
|
|
@@ -168,7 +168,7 @@ class InsertQueryBuilder {
|
|
|
168
168
|
* You can also use the callback version of subqueries or raw expressions:
|
|
169
169
|
*
|
|
170
170
|
* ```ts
|
|
171
|
-
* db.with('jennifer', (db) => db
|
|
171
|
+
* await db.with('jennifer', (db) => db
|
|
172
172
|
* .selectFrom('person')
|
|
173
173
|
* .where('first_name', '=', 'Jennifer')
|
|
174
174
|
* .select(['id', 'first_name', 'gender'])
|
|
@@ -178,6 +178,24 @@ class InsertQueryBuilder {
|
|
|
178
178
|
* name: eb.selectFrom('jennifer').select('first_name'),
|
|
179
179
|
* species: 'cat',
|
|
180
180
|
* }))
|
|
181
|
+
* .execute()
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* The generated SQL (PostgreSQL):
|
|
185
|
+
*
|
|
186
|
+
* ```sql
|
|
187
|
+
* with "jennifer" as (
|
|
188
|
+
* select "id", "first_name", "gender"
|
|
189
|
+
* from "person"
|
|
190
|
+
* where "first_name" = $1
|
|
191
|
+
* limit $2
|
|
192
|
+
* )
|
|
193
|
+
* insert into "pet" ("owner_id", "name", "species")
|
|
194
|
+
* values (
|
|
195
|
+
* (select "id" from "jennifer"),
|
|
196
|
+
* (select "first_name" from "jennifer"),
|
|
197
|
+
* $3
|
|
198
|
+
* )
|
|
181
199
|
* ```
|
|
182
200
|
*/
|
|
183
201
|
values(insert) {
|
|
@@ -200,9 +218,10 @@ class InsertQueryBuilder {
|
|
|
200
218
|
* ### Examples
|
|
201
219
|
*
|
|
202
220
|
* ```ts
|
|
203
|
-
* db.insertInto('person')
|
|
221
|
+
* await db.insertInto('person')
|
|
204
222
|
* .columns(['first_name'])
|
|
205
223
|
* .expression((eb) => eb.selectFrom('pet').select('pet.name'))
|
|
224
|
+
* .execute()
|
|
206
225
|
* ```
|
|
207
226
|
*
|
|
208
227
|
* The generated SQL (PostgreSQL):
|
|
@@ -270,6 +289,12 @@ class InsertQueryBuilder {
|
|
|
270
289
|
* .defaultValues()
|
|
271
290
|
* .execute()
|
|
272
291
|
* ```
|
|
292
|
+
*
|
|
293
|
+
* The generated SQL (PostgreSQL):
|
|
294
|
+
*
|
|
295
|
+
* ```sql
|
|
296
|
+
* insert into "person" default values
|
|
297
|
+
* ```
|
|
273
298
|
*/
|
|
274
299
|
defaultValues() {
|
|
275
300
|
return new InsertQueryBuilder({
|
|
@@ -279,6 +304,37 @@ class InsertQueryBuilder {
|
|
|
279
304
|
}),
|
|
280
305
|
});
|
|
281
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* This can be used to add any additional SQL to the end of the query.
|
|
309
|
+
*
|
|
310
|
+
* ### Examples
|
|
311
|
+
*
|
|
312
|
+
* ```ts
|
|
313
|
+
* import { sql } from 'kysely'
|
|
314
|
+
*
|
|
315
|
+
* await db.insertInto('person')
|
|
316
|
+
* .values({
|
|
317
|
+
* first_name: 'John',
|
|
318
|
+
* last_name: 'Doe',
|
|
319
|
+
* gender: 'male',
|
|
320
|
+
* })
|
|
321
|
+
* .modifyEnd(sql`-- This is a comment`)
|
|
322
|
+
* .execute()
|
|
323
|
+
* ```
|
|
324
|
+
*
|
|
325
|
+
* The generated SQL (MySQL):
|
|
326
|
+
*
|
|
327
|
+
* ```sql
|
|
328
|
+
* insert into `person` ("first_name", "last_name", "gender")
|
|
329
|
+
* values (?, ?, ?) -- This is a comment
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
modifyEnd(modifier) {
|
|
333
|
+
return new InsertQueryBuilder({
|
|
334
|
+
...this.#props,
|
|
335
|
+
queryNode: query_node_js_1.QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
|
|
336
|
+
});
|
|
337
|
+
}
|
|
282
338
|
/**
|
|
283
339
|
* Changes an `insert into` query to an `insert ignore into` query.
|
|
284
340
|
*
|
|
@@ -296,9 +352,19 @@ class InsertQueryBuilder {
|
|
|
296
352
|
* ```ts
|
|
297
353
|
* await db.insertInto('person')
|
|
298
354
|
* .ignore()
|
|
299
|
-
* .values(
|
|
355
|
+
* .values({
|
|
356
|
+
* first_name: 'John',
|
|
357
|
+
* last_name: 'Doe',
|
|
358
|
+
* gender: 'female',
|
|
359
|
+
* })
|
|
300
360
|
* .execute()
|
|
301
361
|
* ```
|
|
362
|
+
*
|
|
363
|
+
* The generated SQL (MySQL):
|
|
364
|
+
*
|
|
365
|
+
* ```sql
|
|
366
|
+
* insert ignore into `person` ("first_name", "last_name", "gender") values (?, ?, ?)
|
|
367
|
+
* ```
|
|
302
368
|
*/
|
|
303
369
|
ignore() {
|
|
304
370
|
return new InsertQueryBuilder({
|
|
@@ -318,6 +384,8 @@ class InsertQueryBuilder {
|
|
|
318
384
|
* Insert the first 5 rows:
|
|
319
385
|
*
|
|
320
386
|
* ```ts
|
|
387
|
+
* import { sql } from 'kysely'
|
|
388
|
+
*
|
|
321
389
|
* await db.insertInto('person')
|
|
322
390
|
* .top(5)
|
|
323
391
|
* .columns(['first_name', 'gender'])
|
|
@@ -336,6 +404,8 @@ class InsertQueryBuilder {
|
|
|
336
404
|
* Insert the first 50 percent of rows:
|
|
337
405
|
*
|
|
338
406
|
* ```ts
|
|
407
|
+
* import { sql } from 'kysely'
|
|
408
|
+
*
|
|
339
409
|
* await db.insertInto('person')
|
|
340
410
|
* .top(50, 'percent')
|
|
341
411
|
* .columns(['first_name', 'gender'])
|
|
@@ -371,6 +441,7 @@ class InsertQueryBuilder {
|
|
|
371
441
|
* .values({
|
|
372
442
|
* name: 'Catto',
|
|
373
443
|
* species: 'cat',
|
|
444
|
+
* owner_id: 3,
|
|
374
445
|
* })
|
|
375
446
|
* .onConflict((oc) => oc
|
|
376
447
|
* .column('name')
|
|
@@ -382,10 +453,10 @@ class InsertQueryBuilder {
|
|
|
382
453
|
* The generated SQL (PostgreSQL):
|
|
383
454
|
*
|
|
384
455
|
* ```sql
|
|
385
|
-
* insert into "pet" ("name", "species")
|
|
386
|
-
* values ($1, $2)
|
|
456
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
457
|
+
* values ($1, $2, $3)
|
|
387
458
|
* on conflict ("name")
|
|
388
|
-
* do update set "species" = $
|
|
459
|
+
* do update set "species" = $4
|
|
389
460
|
* ```
|
|
390
461
|
*
|
|
391
462
|
* You can provide the name of the constraint instead of a column name:
|
|
@@ -396,6 +467,7 @@ class InsertQueryBuilder {
|
|
|
396
467
|
* .values({
|
|
397
468
|
* name: 'Catto',
|
|
398
469
|
* species: 'cat',
|
|
470
|
+
* owner_id: 3,
|
|
399
471
|
* })
|
|
400
472
|
* .onConflict((oc) => oc
|
|
401
473
|
* .constraint('pet_name_key')
|
|
@@ -407,10 +479,10 @@ class InsertQueryBuilder {
|
|
|
407
479
|
* The generated SQL (PostgreSQL):
|
|
408
480
|
*
|
|
409
481
|
* ```sql
|
|
410
|
-
* insert into "pet" ("name", "species")
|
|
411
|
-
* values ($1, $2)
|
|
482
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
483
|
+
* values ($1, $2, $3)
|
|
412
484
|
* on conflict on constraint "pet_name_key"
|
|
413
|
-
* do update set "species" = $
|
|
485
|
+
* do update set "species" = $4
|
|
414
486
|
* ```
|
|
415
487
|
*
|
|
416
488
|
* You can also specify an expression as the conflict target in case
|
|
@@ -424,6 +496,7 @@ class InsertQueryBuilder {
|
|
|
424
496
|
* .values({
|
|
425
497
|
* name: 'Catto',
|
|
426
498
|
* species: 'cat',
|
|
499
|
+
* owner_id: 3,
|
|
427
500
|
* })
|
|
428
501
|
* .onConflict((oc) => oc
|
|
429
502
|
* .expression(sql<string>`lower(name)`)
|
|
@@ -435,10 +508,10 @@ class InsertQueryBuilder {
|
|
|
435
508
|
* The generated SQL (PostgreSQL):
|
|
436
509
|
*
|
|
437
510
|
* ```sql
|
|
438
|
-
* insert into "pet" ("name", "species")
|
|
439
|
-
* values ($1, $2)
|
|
511
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
512
|
+
* values ($1, $2, $3)
|
|
440
513
|
* on conflict (lower(name))
|
|
441
|
-
* do update set "species" = $
|
|
514
|
+
* do update set "species" = $4
|
|
442
515
|
* ```
|
|
443
516
|
*
|
|
444
517
|
* You can add a filter for the update statement like this:
|
|
@@ -449,11 +522,12 @@ class InsertQueryBuilder {
|
|
|
449
522
|
* .values({
|
|
450
523
|
* name: 'Catto',
|
|
451
524
|
* species: 'cat',
|
|
525
|
+
* owner_id: 3,
|
|
452
526
|
* })
|
|
453
527
|
* .onConflict((oc) => oc
|
|
454
528
|
* .column('name')
|
|
455
529
|
* .doUpdateSet({ species: 'hamster' })
|
|
456
|
-
* .where('excluded.name', '!=', 'Catto'
|
|
530
|
+
* .where('excluded.name', '!=', 'Catto')
|
|
457
531
|
* )
|
|
458
532
|
* .execute()
|
|
459
533
|
* ```
|
|
@@ -461,11 +535,11 @@ class InsertQueryBuilder {
|
|
|
461
535
|
* The generated SQL (PostgreSQL):
|
|
462
536
|
*
|
|
463
537
|
* ```sql
|
|
464
|
-
* insert into "pet" ("name", "species")
|
|
465
|
-
* values ($1, $2)
|
|
538
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
539
|
+
* values ($1, $2, $3)
|
|
466
540
|
* on conflict ("name")
|
|
467
|
-
* do update set "species" = $
|
|
468
|
-
* where "excluded"."name" != $
|
|
541
|
+
* do update set "species" = $4
|
|
542
|
+
* where "excluded"."name" != $5
|
|
469
543
|
* ```
|
|
470
544
|
*
|
|
471
545
|
* You can create an `on conflict do nothing` clauses like this:
|
|
@@ -476,6 +550,7 @@ class InsertQueryBuilder {
|
|
|
476
550
|
* .values({
|
|
477
551
|
* name: 'Catto',
|
|
478
552
|
* species: 'cat',
|
|
553
|
+
* owner_id: 3,
|
|
479
554
|
* })
|
|
480
555
|
* .onConflict((oc) => oc
|
|
481
556
|
* .column('name')
|
|
@@ -487,8 +562,8 @@ class InsertQueryBuilder {
|
|
|
487
562
|
* The generated SQL (PostgreSQL):
|
|
488
563
|
*
|
|
489
564
|
* ```sql
|
|
490
|
-
* insert into "pet" ("name", "species")
|
|
491
|
-
* values ($1, $2)
|
|
565
|
+
* insert into "pet" ("name", "species", "owner_id")
|
|
566
|
+
* values ($1, $2, $3)
|
|
492
567
|
* on conflict ("name") do nothing
|
|
493
568
|
* ```
|
|
494
569
|
*
|
|
@@ -497,8 +572,13 @@ class InsertQueryBuilder {
|
|
|
497
572
|
* `ExpressionBuilder`:
|
|
498
573
|
*
|
|
499
574
|
* ```ts
|
|
500
|
-
* db.insertInto('person')
|
|
501
|
-
* .values(
|
|
575
|
+
* await db.insertInto('person')
|
|
576
|
+
* .values({
|
|
577
|
+
* id: 1,
|
|
578
|
+
* first_name: 'John',
|
|
579
|
+
* last_name: 'Doe',
|
|
580
|
+
* gender: 'male',
|
|
581
|
+
* })
|
|
502
582
|
* .onConflict(oc => oc
|
|
503
583
|
* .column('id')
|
|
504
584
|
* .doUpdateSet({
|
|
@@ -506,6 +586,18 @@ class InsertQueryBuilder {
|
|
|
506
586
|
* last_name: (eb) => eb.ref('excluded.last_name')
|
|
507
587
|
* })
|
|
508
588
|
* )
|
|
589
|
+
* .execute()
|
|
590
|
+
* ```
|
|
591
|
+
*
|
|
592
|
+
* The generated SQL (PostgreSQL):
|
|
593
|
+
*
|
|
594
|
+
* ```sql
|
|
595
|
+
* insert into "person" ("id", "first_name", "last_name", "gender")
|
|
596
|
+
* values ($1, $2, $3, $4)
|
|
597
|
+
* on conflict ("id")
|
|
598
|
+
* do update set
|
|
599
|
+
* "first_name" = "excluded"."first_name",
|
|
600
|
+
* "last_name" = "excluded"."last_name"
|
|
509
601
|
* ```
|
|
510
602
|
*/
|
|
511
603
|
onConflict(callback) {
|
|
@@ -532,8 +624,22 @@ class InsertQueryBuilder {
|
|
|
532
624
|
* ```ts
|
|
533
625
|
* await db
|
|
534
626
|
* .insertInto('person')
|
|
535
|
-
* .values(
|
|
536
|
-
*
|
|
627
|
+
* .values({
|
|
628
|
+
* id: 1,
|
|
629
|
+
* first_name: 'John',
|
|
630
|
+
* last_name: 'Doe',
|
|
631
|
+
* gender: 'male',
|
|
632
|
+
* })
|
|
633
|
+
* .onDuplicateKeyUpdate({ updated_at: new Date().toISOString() })
|
|
634
|
+
* .execute()
|
|
635
|
+
* ```
|
|
636
|
+
*
|
|
637
|
+
* The generated SQL (MySQL):
|
|
638
|
+
*
|
|
639
|
+
* ```sql
|
|
640
|
+
* insert into `person` (`id`, `first_name`, `last_name`, `gender`)
|
|
641
|
+
* values (?, ?, ?, ?)
|
|
642
|
+
* on duplicate key update `updated_at` = ?
|
|
537
643
|
* ```
|
|
538
644
|
*/
|
|
539
645
|
onDuplicateKeyUpdate(update) {
|
|
@@ -574,16 +680,17 @@ class InsertQueryBuilder {
|
|
|
574
680
|
* ### Examples
|
|
575
681
|
*
|
|
576
682
|
* ```ts
|
|
577
|
-
* db.insertInto('person')
|
|
578
|
-
* .values({ first_name: 'James', last_name: 'Smith',
|
|
683
|
+
* await db.insertInto('person')
|
|
684
|
+
* .values({ first_name: 'James', last_name: 'Smith', gender: 'male' })
|
|
579
685
|
* .returning(['first_name'])
|
|
580
686
|
* .clearReturning()
|
|
687
|
+
* .execute()
|
|
581
688
|
* ```
|
|
582
689
|
*
|
|
583
690
|
* The generated SQL(PostgreSQL):
|
|
584
691
|
*
|
|
585
692
|
* ```sql
|
|
586
|
-
* insert into "person" ("
|
|
693
|
+
* insert into "person" ("first_name", "last_name", "gender") values ($1, $2, $3)
|
|
587
694
|
* ```
|
|
588
695
|
*/
|
|
589
696
|
clearReturning() {
|
|
@@ -604,13 +711,15 @@ class InsertQueryBuilder {
|
|
|
604
711
|
* The next example uses a helper function `log` to log a query:
|
|
605
712
|
*
|
|
606
713
|
* ```ts
|
|
714
|
+
* import type { Compilable } from 'kysely'
|
|
715
|
+
*
|
|
607
716
|
* function log<T extends Compilable>(qb: T): T {
|
|
608
717
|
* console.log(qb.compile())
|
|
609
718
|
* return qb
|
|
610
719
|
* }
|
|
611
720
|
*
|
|
612
|
-
* db.
|
|
613
|
-
* .
|
|
721
|
+
* await db.insertInto('person')
|
|
722
|
+
* .values({ first_name: 'John', last_name: 'Doe', gender: 'male' })
|
|
614
723
|
* .$call(log)
|
|
615
724
|
* .execute()
|
|
616
725
|
* ```
|
|
@@ -631,7 +740,9 @@ class InsertQueryBuilder {
|
|
|
631
740
|
* ### Examples
|
|
632
741
|
*
|
|
633
742
|
* ```ts
|
|
634
|
-
*
|
|
743
|
+
* import type { NewPerson } from 'type-editor' // imaginary module
|
|
744
|
+
*
|
|
745
|
+
* async function insertPerson(values: NewPerson, returnLastName: boolean) {
|
|
635
746
|
* return await db
|
|
636
747
|
* .insertInto('person')
|
|
637
748
|
* .values(values)
|
|
@@ -646,11 +757,11 @@ class InsertQueryBuilder {
|
|
|
646
757
|
* the code. In the example above the return type of the `insertPerson` function is:
|
|
647
758
|
*
|
|
648
759
|
* ```ts
|
|
649
|
-
* {
|
|
760
|
+
* Promise<{
|
|
650
761
|
* id: number
|
|
651
762
|
* first_name: string
|
|
652
763
|
* last_name?: string
|
|
653
|
-
* }
|
|
764
|
+
* }>
|
|
654
765
|
* ```
|
|
655
766
|
*/
|
|
656
767
|
$if(condition, func) {
|
|
@@ -688,23 +799,41 @@ class InsertQueryBuilder {
|
|
|
688
799
|
* Turn this code:
|
|
689
800
|
*
|
|
690
801
|
* ```ts
|
|
802
|
+
* import type { Person } from 'type-editor' // imaginary module
|
|
803
|
+
*
|
|
691
804
|
* const person = await db.insertInto('person')
|
|
692
|
-
* .values({
|
|
805
|
+
* .values({
|
|
806
|
+
* first_name: 'John',
|
|
807
|
+
* last_name: 'Doe',
|
|
808
|
+
* gender: 'male',
|
|
809
|
+
* nullable_column: 'hell yeah!'
|
|
810
|
+
* })
|
|
693
811
|
* .returningAll()
|
|
694
812
|
* .executeTakeFirstOrThrow()
|
|
695
813
|
*
|
|
696
|
-
* if (
|
|
814
|
+
* if (isWithNoNullValue(person)) {
|
|
697
815
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
698
816
|
* }
|
|
817
|
+
*
|
|
818
|
+
* function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
|
|
819
|
+
* return person.nullable_column != null
|
|
820
|
+
* }
|
|
699
821
|
* ```
|
|
700
822
|
*
|
|
701
823
|
* Into this:
|
|
702
824
|
*
|
|
703
825
|
* ```ts
|
|
826
|
+
* import type { NotNull } from 'kysely'
|
|
827
|
+
*
|
|
704
828
|
* const person = await db.insertInto('person')
|
|
705
|
-
* .values({
|
|
829
|
+
* .values({
|
|
830
|
+
* first_name: 'John',
|
|
831
|
+
* last_name: 'Doe',
|
|
832
|
+
* gender: 'male',
|
|
833
|
+
* nullable_column: 'hell yeah!'
|
|
834
|
+
* })
|
|
706
835
|
* .returningAll()
|
|
707
|
-
* .$narrowType<{ nullable_column:
|
|
836
|
+
* .$narrowType<{ nullable_column: NotNull }>()
|
|
708
837
|
* .executeTakeFirstOrThrow()
|
|
709
838
|
*
|
|
710
839
|
* functionThatExpectsPersonWithNonNullValue(person)
|
|
@@ -736,22 +865,29 @@ class InsertQueryBuilder {
|
|
|
736
865
|
* ### Examples
|
|
737
866
|
*
|
|
738
867
|
* ```ts
|
|
739
|
-
*
|
|
740
|
-
*
|
|
741
|
-
*
|
|
742
|
-
*
|
|
743
|
-
* .
|
|
744
|
-
*
|
|
745
|
-
*
|
|
746
|
-
*
|
|
747
|
-
*
|
|
748
|
-
*
|
|
749
|
-
* .
|
|
750
|
-
*
|
|
751
|
-
*
|
|
752
|
-
*
|
|
753
|
-
*
|
|
754
|
-
*
|
|
868
|
+
* import type { NewPerson, NewPet, Species } from 'type-editor' // imaginary module
|
|
869
|
+
*
|
|
870
|
+
* async function insertPersonAndPet(person: NewPerson, pet: Omit<NewPet, 'owner_id'>) {
|
|
871
|
+
* return await db
|
|
872
|
+
* .with('new_person', (qb) => qb
|
|
873
|
+
* .insertInto('person')
|
|
874
|
+
* .values(person)
|
|
875
|
+
* .returning('id')
|
|
876
|
+
* .$assertType<{ id: number }>()
|
|
877
|
+
* )
|
|
878
|
+
* .with('new_pet', (qb) => qb
|
|
879
|
+
* .insertInto('pet')
|
|
880
|
+
* .values((eb) => ({
|
|
881
|
+
* owner_id: eb.selectFrom('new_person').select('id'),
|
|
882
|
+
* ...pet
|
|
883
|
+
* }))
|
|
884
|
+
* .returning(['name as pet_name', 'species'])
|
|
885
|
+
* .$assertType<{ pet_name: string, species: Species }>()
|
|
886
|
+
* )
|
|
887
|
+
* .selectFrom(['new_person', 'new_pet'])
|
|
888
|
+
* .selectAll()
|
|
889
|
+
* .executeTakeFirstOrThrow()
|
|
890
|
+
* }
|
|
755
891
|
* ```
|
|
756
892
|
*/
|
|
757
893
|
$assertType() {
|
|
@@ -13,12 +13,17 @@
|
|
|
13
13
|
* ### Examples
|
|
14
14
|
*
|
|
15
15
|
* ```ts
|
|
16
|
-
*
|
|
17
|
-
* .insertInto('person')
|
|
18
|
-
* .values(person)
|
|
19
|
-
* .executeTakeFirst()
|
|
16
|
+
* import type { NewPerson } from 'type-editor' // imaginary module
|
|
20
17
|
*
|
|
21
|
-
*
|
|
18
|
+
* async function insertPerson(person: NewPerson) {
|
|
19
|
+
* const result = await db
|
|
20
|
+
* .insertInto('person')
|
|
21
|
+
* .values(person)
|
|
22
|
+
* .executeTakeFirstOrThrow()
|
|
23
|
+
*
|
|
24
|
+
* console.log(result.insertId) // relevant on MySQL
|
|
25
|
+
* console.log(result.numInsertedOrUpdatedRows) // always relevant
|
|
26
|
+
* }
|
|
22
27
|
* ```
|
|
23
28
|
*/
|
|
24
29
|
export declare class InsertResult {
|
|
@@ -16,12 +16,17 @@ exports.InsertResult = void 0;
|
|
|
16
16
|
* ### Examples
|
|
17
17
|
*
|
|
18
18
|
* ```ts
|
|
19
|
-
*
|
|
20
|
-
* .insertInto('person')
|
|
21
|
-
* .values(person)
|
|
22
|
-
* .executeTakeFirst()
|
|
19
|
+
* import type { NewPerson } from 'type-editor' // imaginary module
|
|
23
20
|
*
|
|
24
|
-
*
|
|
21
|
+
* async function insertPerson(person: NewPerson) {
|
|
22
|
+
* const result = await db
|
|
23
|
+
* .insertInto('person')
|
|
24
|
+
* .values(person)
|
|
25
|
+
* .executeTakeFirstOrThrow()
|
|
26
|
+
*
|
|
27
|
+
* console.log(result.insertId) // relevant on MySQL
|
|
28
|
+
* console.log(result.numInsertedOrUpdatedRows) // always relevant
|
|
29
|
+
* }
|
|
25
30
|
* ```
|
|
26
31
|
*/
|
|
27
32
|
class InsertResult {
|
|
@@ -18,9 +18,12 @@ export declare class JSONPathBuilder<S, O = S> {
|
|
|
18
18
|
* ### Examples
|
|
19
19
|
*
|
|
20
20
|
* ```ts
|
|
21
|
-
* db.selectFrom('person')
|
|
22
|
-
*
|
|
23
|
-
* )
|
|
21
|
+
* await db.selectFrom('person')
|
|
22
|
+
* .select(eb =>
|
|
23
|
+
* eb.ref('nicknames', '->').at(0).as('primary_nickname')
|
|
24
|
+
* )
|
|
25
|
+
* .execute()
|
|
26
|
+
* ```
|
|
24
27
|
*
|
|
25
28
|
* The generated SQL (PostgreSQL):
|
|
26
29
|
*
|
|
@@ -130,11 +133,19 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
130
133
|
* All expressions need to have this getter for complicated type-related reasons.
|
|
131
134
|
* Simply add this getter for your expression and always return `undefined` from it:
|
|
132
135
|
*
|
|
136
|
+
* ### Examples
|
|
137
|
+
*
|
|
133
138
|
* ```ts
|
|
139
|
+
* import { type Expression, type OperationNode, sql } from 'kysely'
|
|
140
|
+
*
|
|
134
141
|
* class SomeExpression<T> implements Expression<T> {
|
|
135
142
|
* get expressionType(): T | undefined {
|
|
136
143
|
* return undefined
|
|
137
144
|
* }
|
|
145
|
+
*
|
|
146
|
+
* toOperationNode(): OperationNode {
|
|
147
|
+
* return sql`some sql here`.toOperationNode()
|
|
148
|
+
* }
|
|
138
149
|
* }
|
|
139
150
|
* ```
|
|
140
151
|
*
|
|
@@ -163,7 +174,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
163
174
|
*
|
|
164
175
|
* The generated SQL (PostgreSQL):
|
|
165
176
|
*
|
|
166
|
-
* ```
|
|
177
|
+
* ```sql
|
|
167
178
|
* select "first_name" = $1 as "is_jennifer"
|
|
168
179
|
* from "person"
|
|
169
180
|
* ```
|
|
@@ -172,6 +183,8 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
172
183
|
/**
|
|
173
184
|
* Returns an aliased version of the expression.
|
|
174
185
|
*
|
|
186
|
+
* ### Examples
|
|
187
|
+
*
|
|
175
188
|
* In addition to slapping `as "the_alias"` at the end of the expression,
|
|
176
189
|
* this method also provides strict typing:
|
|
177
190
|
*
|
|
@@ -180,7 +193,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
180
193
|
* .selectFrom('person')
|
|
181
194
|
* .select((eb) =>
|
|
182
195
|
* // `eb.fn<string>` returns an AliasableExpression<string>
|
|
183
|
-
* eb.fn<string>('concat', ['first_name' eb.val(' '), 'last_name']).as('full_name')
|
|
196
|
+
* eb.fn<string>('concat', ['first_name', eb.val(' '), 'last_name']).as('full_name')
|
|
184
197
|
* )
|
|
185
198
|
* .executeTakeFirstOrThrow()
|
|
186
199
|
*
|
|
@@ -190,7 +203,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
190
203
|
*
|
|
191
204
|
* The generated SQL (PostgreSQL):
|
|
192
205
|
*
|
|
193
|
-
* ```
|
|
206
|
+
* ```sql
|
|
194
207
|
* select
|
|
195
208
|
* concat("first_name", $1, "last_name") as "full_name"
|
|
196
209
|
* from
|
|
@@ -201,6 +214,8 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
201
214
|
* provide the alias as the only type argument:
|
|
202
215
|
*
|
|
203
216
|
* ```ts
|
|
217
|
+
* import { sql } from 'kysely'
|
|
218
|
+
*
|
|
204
219
|
* const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`
|
|
205
220
|
*
|
|
206
221
|
* // The alias is `t(a, b)` which specifies the column names
|
|
@@ -215,11 +230,12 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
215
230
|
* .expression(
|
|
216
231
|
* db.selectFrom(aliasedValues).select(['t.a', 't.b'])
|
|
217
232
|
* )
|
|
233
|
+
* .execute()
|
|
218
234
|
* ```
|
|
219
235
|
*
|
|
220
236
|
* The generated SQL (PostgreSQL):
|
|
221
237
|
*
|
|
222
|
-
* ```
|
|
238
|
+
* ```sql
|
|
223
239
|
* insert into "person" ("first_name", "last_name")
|
|
224
240
|
* from (values (1, 'foo')) as t(a, b)
|
|
225
241
|
* select "t"."a", "t"."b"
|
|
@@ -232,16 +248,24 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
232
248
|
* This method call doesn't change the SQL in any way. This methods simply
|
|
233
249
|
* returns a copy of this `JSONPathBuilder` with a new output type.
|
|
234
250
|
*/
|
|
235
|
-
$castTo<
|
|
236
|
-
$notNull():
|
|
251
|
+
$castTo<O2>(): TraversedJSONPathBuilder<S, O2>;
|
|
252
|
+
$notNull(): TraversedJSONPathBuilder<S, Exclude<O, null>>;
|
|
237
253
|
/**
|
|
238
254
|
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
239
255
|
*
|
|
256
|
+
* ### Examples
|
|
257
|
+
*
|
|
240
258
|
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
241
259
|
* template tag to build the node:
|
|
242
260
|
*
|
|
243
261
|
* ```ts
|
|
262
|
+
* import { type Expression, type OperationNode, sql } from 'kysely'
|
|
263
|
+
*
|
|
244
264
|
* class SomeExpression<T> implements Expression<T> {
|
|
265
|
+
* get expressionType(): T | undefined {
|
|
266
|
+
* return undefined
|
|
267
|
+
* }
|
|
268
|
+
*
|
|
245
269
|
* toOperationNode(): OperationNode {
|
|
246
270
|
* return sql`some sql here`.toOperationNode()
|
|
247
271
|
* }
|
|
@@ -26,9 +26,12 @@ class JSONPathBuilder {
|
|
|
26
26
|
* ### Examples
|
|
27
27
|
*
|
|
28
28
|
* ```ts
|
|
29
|
-
* db.selectFrom('person')
|
|
30
|
-
*
|
|
31
|
-
* )
|
|
29
|
+
* await db.selectFrom('person')
|
|
30
|
+
* .select(eb =>
|
|
31
|
+
* eb.ref('nicknames', '->').at(0).as('primary_nickname')
|
|
32
|
+
* )
|
|
33
|
+
* .execute()
|
|
34
|
+
* ```
|
|
32
35
|
*
|
|
33
36
|
* The generated SQL (PostgreSQL):
|
|
34
37
|
*
|
|
@@ -163,10 +166,10 @@ class TraversedJSONPathBuilder extends JSONPathBuilder {
|
|
|
163
166
|
* returns a copy of this `JSONPathBuilder` with a new output type.
|
|
164
167
|
*/
|
|
165
168
|
$castTo() {
|
|
166
|
-
return new
|
|
169
|
+
return new TraversedJSONPathBuilder(this.#node);
|
|
167
170
|
}
|
|
168
171
|
$notNull() {
|
|
169
|
-
return new
|
|
172
|
+
return new TraversedJSONPathBuilder(this.#node);
|
|
170
173
|
}
|
|
171
174
|
toOperationNode() {
|
|
172
175
|
return this.#node;
|