kysely 0.26.2 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
- package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/driver.js +1 -0
- package/dist/cjs/driver/runtime-driver.js +5 -1
- package/dist/cjs/driver/single-connection-provider.js +7 -8
- package/dist/cjs/expression/expression-builder.d.ts +66 -73
- package/dist/cjs/expression/expression-builder.js +8 -17
- package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
- package/dist/cjs/helpers/mssql.d.ts +152 -0
- package/dist/cjs/helpers/mssql.js +160 -0
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/sqlite.d.ts +3 -3
- package/dist/cjs/index.d.ts +8 -2
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.js +12 -16
- package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
- package/dist/cjs/operation-node/add-index-node.js +31 -0
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +17 -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 +2 -0
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
- package/dist/cjs/parser/binary-operation-parser.js +1 -1
- package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
- package/dist/cjs/parser/expression-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +3 -2
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +20 -9
- package/dist/cjs/parser/update-set-parser.d.ts +5 -2
- package/dist/cjs/parser/update-set-parser.js +13 -3
- package/dist/cjs/parser/value-parser.d.ts +2 -2
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/cjs/query-builder/case-builder.d.ts +5 -4
- package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/cjs/query-builder/function-module.d.ts +98 -27
- package/dist/cjs/query-builder/function-module.js +17 -3
- package/dist/cjs/query-builder/having-interface.d.ts +3 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/cjs/query-builder/insert-query-builder.js +3 -3
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +8 -1
- package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
- package/dist/cjs/query-builder/json-path-builder.js +6 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
- package/dist/cjs/query-builder/over-builder.d.ts +2 -2
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
- package/dist/cjs/query-builder/select-query-builder.js +5 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +3 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
- package/dist/cjs/query-creator.d.ts +5 -3
- package/dist/cjs/query-creator.js +0 -47
- package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
- package/dist/cjs/schema/alter-table-builder.js +59 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
- package/dist/cjs/schema/column-definition-builder.js +27 -0
- package/dist/cjs/schema/create-index-builder.d.ts +23 -0
- package/dist/cjs/schema/create-index-builder.js +30 -0
- package/dist/cjs/schema/create-table-builder.d.ts +28 -2
- package/dist/cjs/schema/create-table-builder.js +38 -3
- package/dist/cjs/schema/create-view-builder.d.ts +2 -2
- package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/unique-constraint-builder.js +24 -0
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/log.js +5 -1
- package/dist/cjs/util/object-utils.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +27 -20
- package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/esm/dialect/dialect-adapter-base.js +3 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
- package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/driver.js +1 -0
- package/dist/esm/driver/runtime-driver.js +5 -1
- package/dist/esm/driver/single-connection-provider.js +7 -8
- package/dist/esm/expression/expression-builder.d.ts +66 -73
- package/dist/esm/expression/expression-builder.js +10 -19
- package/dist/esm/expression/expression-wrapper.d.ts +8 -8
- package/dist/esm/helpers/mssql.d.ts +152 -0
- package/dist/esm/helpers/mssql.js +155 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/sqlite.d.ts +3 -3
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.js +12 -16
- package/dist/esm/operation-node/add-index-node.d.ts +21 -0
- package/dist/esm/operation-node/add-index-node.js +29 -0
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/create-index-node.d.ts +1 -0
- package/dist/esm/operation-node/create-table-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +17 -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 +2 -0
- package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/esm/operation-node/unique-constraint-node.js +8 -1
- package/dist/esm/parser/binary-operation-parser.js +1 -1
- package/dist/esm/parser/coalesce-parser.d.ts +12 -2
- package/dist/esm/parser/expression-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +3 -2
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +20 -9
- package/dist/esm/parser/update-set-parser.d.ts +5 -2
- package/dist/esm/parser/update-set-parser.js +10 -1
- package/dist/esm/parser/value-parser.d.ts +2 -2
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/esm/query-builder/case-builder.d.ts +5 -4
- package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/esm/query-builder/function-module.d.ts +98 -27
- package/dist/esm/query-builder/function-module.js +17 -3
- package/dist/esm/query-builder/having-interface.d.ts +3 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/esm/query-builder/insert-query-builder.js +4 -4
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +8 -1
- package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
- package/dist/esm/query-builder/json-path-builder.js +6 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/esm/query-builder/on-conflict-builder.js +2 -7
- package/dist/esm/query-builder/over-builder.d.ts +2 -2
- package/dist/esm/query-builder/returning-interface.d.ts +3 -2
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
- package/dist/esm/query-builder/select-query-builder.js +5 -2
- package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +3 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/esm/query-compiler/default-query-compiler.js +65 -12
- package/dist/esm/query-creator.d.ts +5 -3
- package/dist/esm/query-creator.js +0 -47
- package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
- package/dist/esm/schema/alter-table-builder.d.ts +41 -1
- package/dist/esm/schema/alter-table-builder.js +59 -2
- package/dist/esm/schema/column-definition-builder.d.ts +25 -0
- package/dist/esm/schema/column-definition-builder.js +27 -0
- package/dist/esm/schema/create-index-builder.d.ts +23 -0
- package/dist/esm/schema/create-index-builder.js +30 -0
- package/dist/esm/schema/create-table-builder.d.ts +28 -2
- package/dist/esm/schema/create-table-builder.js +38 -3
- package/dist/esm/schema/create-view-builder.d.ts +2 -2
- package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/unique-constraint-builder.js +21 -0
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/log.js +5 -1
- package/dist/esm/util/object-utils.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +27 -20
- package/helpers/mssql.d.ts +1 -0
- package/helpers/mssql.js +1 -0
- package/package.json +17 -6
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
2
1
|
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
3
2
|
import { Expression } from '../expression/expression.js';
|
|
4
|
-
import {
|
|
3
|
+
import { ExtractTypeFromCoalesce1, ExtractTypeFromCoalesce3, ExtractTypeFromCoalesce2, ExtractTypeFromCoalesce4, ExtractTypeFromCoalesce5 } from '../parser/coalesce-parser.js';
|
|
5
4
|
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js';
|
|
6
5
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
7
|
-
import {
|
|
6
|
+
import { IsNever } from '../util/type-utils.js';
|
|
8
7
|
import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
|
|
9
|
-
import {
|
|
8
|
+
import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
|
|
9
|
+
import { Selectable } from '../util/column-type.js';
|
|
10
10
|
/**
|
|
11
11
|
* Helpers for type safe SQL function calls.
|
|
12
12
|
*
|
|
@@ -17,21 +17,47 @@ import { SelectQueryBuilder } from './select-query-builder.js';
|
|
|
17
17
|
*
|
|
18
18
|
* <!-- siteExample("select", "Function calls", 60) -->
|
|
19
19
|
*
|
|
20
|
-
* This example
|
|
20
|
+
* This example shows how to create function calls. These examples also work in any
|
|
21
|
+
* other place (`where` calls, updates, inserts etc.). The only difference is that you
|
|
22
|
+
* leave out the alias (the `as` call) if you use these in any other place than `select`.
|
|
21
23
|
*
|
|
22
24
|
* ```ts
|
|
25
|
+
* import { sql } from 'kysely'
|
|
26
|
+
*
|
|
23
27
|
* const result = await db.selectFrom('person')
|
|
24
28
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
25
|
-
* .select(({ fn }) => [
|
|
29
|
+
* .select(({ fn, val, ref }) => [
|
|
26
30
|
* 'person.id',
|
|
27
31
|
*
|
|
28
32
|
* // The `fn` module contains the most common
|
|
29
33
|
* // functions.
|
|
30
34
|
* fn.count<number>('pet.id').as('pet_count'),
|
|
31
35
|
*
|
|
32
|
-
* // You can call any function
|
|
33
|
-
* //
|
|
34
|
-
*
|
|
36
|
+
* // You can call any function by calling `fn`
|
|
37
|
+
* // directly. The arguments are treated as column
|
|
38
|
+
* // references by default. If you want to pass in
|
|
39
|
+
* // values, use the `val` function.
|
|
40
|
+
* fn<string>('concat', [
|
|
41
|
+
* val('Ms. '),
|
|
42
|
+
* 'first_name',
|
|
43
|
+
* val(' '),
|
|
44
|
+
* 'last_name'
|
|
45
|
+
* ]).as('full_name_with_title'),
|
|
46
|
+
*
|
|
47
|
+
* // You can call any aggregate function using the
|
|
48
|
+
* // `fn.agg` function.
|
|
49
|
+
* fn.agg<string[]>('array_agg', ['pet.name']).as('pet_names'),
|
|
50
|
+
*
|
|
51
|
+
* // And once again, you can use the `sql`
|
|
52
|
+
* // template tag. The template tag substitutions
|
|
53
|
+
* // are treated as values by default. If you want
|
|
54
|
+
* // to reference columns, you can use the `ref`
|
|
55
|
+
* // function.
|
|
56
|
+
* sql<string>`concat(
|
|
57
|
+
* ${ref('first_name')},
|
|
58
|
+
* ' ',
|
|
59
|
+
* ${ref('last_name')}
|
|
60
|
+
* )`.as('full_name')
|
|
35
61
|
* ])
|
|
36
62
|
* .groupBy('person.id')
|
|
37
63
|
* .having((eb) => eb.fn.count('pet.id'), '>', 10)
|
|
@@ -44,11 +70,13 @@ import { SelectQueryBuilder } from './select-query-builder.js';
|
|
|
44
70
|
* select
|
|
45
71
|
* "person"."id",
|
|
46
72
|
* count("pet"."id") as "pet_count",
|
|
47
|
-
*
|
|
73
|
+
* concat($1, "first_name", $2, "last_name") as "full_name_with_title",
|
|
74
|
+
* array_agg("pet"."name") as "pet_names",
|
|
75
|
+
* concat("first_name", ' ', "last_name") as "full_name"
|
|
48
76
|
* from "person"
|
|
49
77
|
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
50
78
|
* group by "person"."id"
|
|
51
|
-
* having count("pet"."id") > $
|
|
79
|
+
* having count("pet"."id") > $3
|
|
52
80
|
* ```
|
|
53
81
|
*/
|
|
54
82
|
export interface FunctionModule<DB, TB extends keyof DB> {
|
|
@@ -81,7 +109,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
81
109
|
* .where(sql`upper(first_name)`, '=', 'JENNIFER')
|
|
82
110
|
* ```
|
|
83
111
|
*/
|
|
84
|
-
<
|
|
112
|
+
<O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
|
|
85
113
|
/**
|
|
86
114
|
* Creates an aggregate function call.
|
|
87
115
|
*
|
|
@@ -110,7 +138,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
110
138
|
* from "person"
|
|
111
139
|
* ```
|
|
112
140
|
*/
|
|
113
|
-
agg<O
|
|
141
|
+
agg<O, RE extends ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
114
142
|
/**
|
|
115
143
|
* Calls the `avg` function for the column or expression given as the argument.
|
|
116
144
|
*
|
|
@@ -169,7 +197,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
169
197
|
* .execute()
|
|
170
198
|
* ```
|
|
171
199
|
*/
|
|
172
|
-
avg<O extends number | string | null = number | string,
|
|
200
|
+
avg<O extends number | string | null = number | string, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
173
201
|
/**
|
|
174
202
|
* Calls the `coalesce` function for given arguments.
|
|
175
203
|
*
|
|
@@ -230,7 +258,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
230
258
|
* select coalesce(avg("age"), 0) as "avg_age" from "person" where "first_name" = $1
|
|
231
259
|
* ```
|
|
232
260
|
*/
|
|
233
|
-
coalesce<
|
|
261
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>>(v1: V1): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce1<DB, TB, V1>>;
|
|
262
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce2<DB, TB, V1, V2>>;
|
|
263
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce3<DB, TB, V1, V2, V3>>;
|
|
264
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce4<DB, TB, V1, V2, V3, V4>>;
|
|
265
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>, V5 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4, v5: V5): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce5<DB, TB, V1, V2, V3, V4, V5>>;
|
|
234
266
|
/**
|
|
235
267
|
* Calls the `count` function for the column or expression given as the argument.
|
|
236
268
|
*
|
|
@@ -281,7 +313,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
281
313
|
* .execute()
|
|
282
314
|
* ```
|
|
283
315
|
*/
|
|
284
|
-
count<O extends number | string | bigint,
|
|
316
|
+
count<O extends number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
285
317
|
/**
|
|
286
318
|
* Calls the `count` function with `*` or `table.*` as argument.
|
|
287
319
|
*
|
|
@@ -395,12 +427,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
395
427
|
*
|
|
396
428
|
* ```ts
|
|
397
429
|
* db.selectFrom('toy')
|
|
398
|
-
* .select((eb) => eb.fn.max<number | null
|
|
430
|
+
* .select((eb) => eb.fn.max<number | null>('price').as('max_price'))
|
|
399
431
|
* .execute()
|
|
400
432
|
* ```
|
|
401
433
|
*/
|
|
402
|
-
max<O extends number | string | bigint | null =
|
|
403
|
-
max<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
434
|
+
max<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
|
|
404
435
|
/**
|
|
405
436
|
* Calls the `min` function for the column or expression given as the argument.
|
|
406
437
|
*
|
|
@@ -443,12 +474,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
443
474
|
*
|
|
444
475
|
* ```ts
|
|
445
476
|
* db.selectFrom('toy')
|
|
446
|
-
* .select((eb) => eb.fn.min<number | null
|
|
477
|
+
* .select((eb) => eb.fn.min<number | null>('price').as('min_price'))
|
|
447
478
|
* .execute()
|
|
448
479
|
* ```
|
|
449
480
|
*/
|
|
450
|
-
min<O extends number | string | bigint | null =
|
|
451
|
-
min<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
481
|
+
min<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
|
|
452
482
|
/**
|
|
453
483
|
* Calls the `sum` function for the column or expression given as the argument.
|
|
454
484
|
*
|
|
@@ -507,7 +537,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
507
537
|
* .execute()
|
|
508
538
|
* ```
|
|
509
539
|
*/
|
|
510
|
-
sum<O extends number | string | bigint | null = number | string | bigint,
|
|
540
|
+
sum<O extends number | string | bigint | null = number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
511
541
|
/**
|
|
512
542
|
* Calls the `any` function for the column or expression given as the argument.
|
|
513
543
|
*
|
|
@@ -538,10 +568,51 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
538
568
|
* ```
|
|
539
569
|
*/
|
|
540
570
|
any<RE extends StringReference<DB, TB>>(expr: RE): Exclude<ExtractTypeFromStringReference<DB, TB, RE>, null> extends ReadonlyArray<infer I> ? ExpressionWrapper<DB, TB, I> : KyselyTypeError<'any(expr) call failed: expr must be an array'>;
|
|
541
|
-
any<T>(subquery:
|
|
571
|
+
any<T>(subquery: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
|
|
542
572
|
any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
|
|
573
|
+
/**
|
|
574
|
+
* Creates a json_agg function call.
|
|
575
|
+
*
|
|
576
|
+
* This function is only available on PostgreSQL.
|
|
577
|
+
*
|
|
578
|
+
* ```ts
|
|
579
|
+
* db.selectFrom('person')
|
|
580
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
581
|
+
* .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')])
|
|
582
|
+
* .groupBy('person.first_name')
|
|
583
|
+
* .execute()
|
|
584
|
+
* ```
|
|
585
|
+
*
|
|
586
|
+
* The generated SQL (PostgreSQL):
|
|
587
|
+
*
|
|
588
|
+
* ```sql
|
|
589
|
+
* select "first_name", json_agg("pet") as "pets"
|
|
590
|
+
* from "person"
|
|
591
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
592
|
+
* group by "person"."first_name"
|
|
593
|
+
* ```
|
|
594
|
+
*/
|
|
595
|
+
jsonAgg<T extends (TB & string) | Expression<unknown>>(table: T): AggregateFunctionBuilder<DB, TB, T extends TB ? Selectable<DB[T]>[] : T extends Expression<infer O> ? O[] : never>;
|
|
596
|
+
/**
|
|
597
|
+
* Creates a to_json function call.
|
|
598
|
+
*
|
|
599
|
+
* This function is only available on PostgreSQL.
|
|
600
|
+
*
|
|
601
|
+
* ```ts
|
|
602
|
+
* db.selectFrom('person')
|
|
603
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
604
|
+
* .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')])
|
|
605
|
+
* .execute()
|
|
606
|
+
* ```
|
|
607
|
+
*
|
|
608
|
+
* The generated SQL (PostgreSQL):
|
|
609
|
+
*
|
|
610
|
+
* ```sql
|
|
611
|
+
* select "first_name", to_json("pet") as "pet"
|
|
612
|
+
* from "person"
|
|
613
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
614
|
+
* ```
|
|
615
|
+
*/
|
|
616
|
+
toJson<T extends (TB & string) | Expression<unknown>>(table: T): ExpressionWrapper<DB, TB, T extends TB ? Selectable<DB[T]> : T extends Expression<infer O> ? O : never>;
|
|
543
617
|
}
|
|
544
618
|
export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
|
|
545
|
-
type OutputBoundStringReference<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = IsAny<O> extends true ? C : Equals<ExtractTypeFromReferenceExpression<DB, TB, C> | null, O | null> extends true ? C : never;
|
|
546
|
-
type StringReferenceBoundAggregateFunctionBuilder<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = AggregateFunctionBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C> | (IsAny<O> extends true ? never : null extends O ? null : never)>;
|
|
547
|
-
export {};
|
|
@@ -5,9 +5,11 @@ import { FunctionNode } from '../operation-node/function-node.js';
|
|
|
5
5
|
import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
|
|
6
6
|
import { parseSelectAll } from '../parser/select-parser.js';
|
|
7
7
|
import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
|
|
8
|
+
import { isString } from '../util/object-utils.js';
|
|
9
|
+
import { parseTable } from '../parser/table-parser.js';
|
|
8
10
|
export function createFunctionModule() {
|
|
9
11
|
const fn = (name, args) => {
|
|
10
|
-
return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args)));
|
|
12
|
+
return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args ?? [])));
|
|
11
13
|
};
|
|
12
14
|
const agg = (name, args) => {
|
|
13
15
|
return new AggregateFunctionBuilder({
|
|
@@ -19,8 +21,8 @@ export function createFunctionModule() {
|
|
|
19
21
|
avg(column) {
|
|
20
22
|
return agg('avg', [column]);
|
|
21
23
|
},
|
|
22
|
-
coalesce(
|
|
23
|
-
return fn('coalesce',
|
|
24
|
+
coalesce(...values) {
|
|
25
|
+
return fn('coalesce', values);
|
|
24
26
|
},
|
|
25
27
|
count(column) {
|
|
26
28
|
return agg('count', [column]);
|
|
@@ -42,5 +44,17 @@ export function createFunctionModule() {
|
|
|
42
44
|
any(column) {
|
|
43
45
|
return fn('any', [column]);
|
|
44
46
|
},
|
|
47
|
+
jsonAgg(table) {
|
|
48
|
+
return new AggregateFunctionBuilder({
|
|
49
|
+
aggregateFunctionNode: AggregateFunctionNode.create('json_agg', [
|
|
50
|
+
isString(table) ? parseTable(table) : table.toOperationNode(),
|
|
51
|
+
]),
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
toJson(table) {
|
|
55
|
+
return new ExpressionWrapper(FunctionNode.create('to_json', [
|
|
56
|
+
isString(table) ? parseTable(table) : table.toOperationNode(),
|
|
57
|
+
]));
|
|
58
|
+
},
|
|
45
59
|
});
|
|
46
60
|
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
2
|
-
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
3
2
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
4
|
-
import { SqlBool } from '../util/type-utils.js';
|
|
5
3
|
export interface HavingInterface<DB, TB extends keyof DB> {
|
|
6
4
|
/**
|
|
7
5
|
* Just like {@link WhereInterface.where | where} but adds a `having` statement
|
|
8
6
|
* instead of a `where` statement.
|
|
9
7
|
*/
|
|
10
|
-
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs:
|
|
11
|
-
having(expression:
|
|
8
|
+
having<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): HavingInterface<DB, TB>;
|
|
9
|
+
having<E>(expression: E): HavingInterface<DB, TB>;
|
|
12
10
|
/**
|
|
13
11
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
14
12
|
* instead of a `where` statement.
|
|
15
13
|
*/
|
|
16
|
-
havingRef
|
|
14
|
+
havingRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): HavingInterface<DB, TB>;
|
|
17
15
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
2
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
-
import { SelectExpression,
|
|
3
|
+
import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
|
|
4
4
|
import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
|
|
5
5
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
6
6
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
7
7
|
import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
|
|
8
|
-
import {
|
|
8
|
+
import { UpdateObjectExpression } from '../parser/update-set-parser.js';
|
|
9
9
|
import { Compilable } from '../util/compilable.js';
|
|
10
10
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
11
11
|
import { QueryId } from '../util/query-id.js';
|
|
12
12
|
import { InsertResult } from './insert-result.js';
|
|
13
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
|
-
import { ReturningRow } from '../parser/returning-parser.js';
|
|
14
|
+
import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
15
15
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
16
16
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
17
17
|
import { ReturningInterface } from './returning-interface.js';
|
|
@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
60
60
|
* })
|
|
61
61
|
* .executeTakeFirst()
|
|
62
62
|
*
|
|
63
|
+
* // `insertId` is only available on dialects that
|
|
64
|
+
* // automatically return the id of the inserted row
|
|
65
|
+
* // such as MySQL and SQLite. On PostgreSQL, for example,
|
|
66
|
+
* // you need to add a `returning` clause to the query to
|
|
67
|
+
* // get anything out. See the "returning data" example.
|
|
63
68
|
* console.log(result.insertId)
|
|
64
69
|
* ```
|
|
65
70
|
*
|
|
66
|
-
* The generated SQL (
|
|
71
|
+
* The generated SQL (MySQL):
|
|
67
72
|
*
|
|
68
73
|
* ```sql
|
|
69
|
-
* insert into
|
|
74
|
+
* insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?)
|
|
70
75
|
* ```
|
|
71
76
|
*
|
|
72
77
|
* <!-- siteExample("insert", "Multiple rows", 20) -->
|
|
@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
131
136
|
* ```ts
|
|
132
137
|
* import { sql } from 'kysely'
|
|
133
138
|
*
|
|
139
|
+
* const ani = "Ani"
|
|
140
|
+
* const ston = "ston"
|
|
141
|
+
*
|
|
134
142
|
* const result = await db
|
|
135
143
|
* .insertInto('person')
|
|
136
144
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
137
145
|
* first_name: 'Jennifer',
|
|
138
|
-
* last_name: sql
|
|
146
|
+
* last_name: sql`concat(${ani}, ${ston})`,
|
|
139
147
|
* middle_name: ref('first_name'),
|
|
140
148
|
* age: selectFrom('person')
|
|
141
149
|
* .select(fn.avg<number>('age')
|
|
@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
147
155
|
* The generated SQL (PostgreSQL):
|
|
148
156
|
*
|
|
149
157
|
* ```sql
|
|
150
|
-
* insert into "person" (
|
|
151
|
-
*
|
|
158
|
+
* insert into "person" (
|
|
159
|
+
* "first_name",
|
|
160
|
+
* "last_name",
|
|
161
|
+
* "middle_name",
|
|
162
|
+
* "age"
|
|
163
|
+
* )
|
|
164
|
+
* values (
|
|
165
|
+
* $1,
|
|
166
|
+
* concat($2, $3),
|
|
167
|
+
* "first_name",
|
|
168
|
+
* (select avg("age") as "avg_age" from "person")
|
|
169
|
+
* )
|
|
152
170
|
* ```
|
|
153
171
|
*
|
|
154
172
|
* You can also use the callback version of subqueries or raw expressions:
|
|
@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
208
226
|
* .select((eb) => [
|
|
209
227
|
* 'pet.name',
|
|
210
228
|
* eb.val('Petson').as('last_name'),
|
|
211
|
-
* eb.
|
|
229
|
+
* eb.lit(7).as('age'),
|
|
212
230
|
* ])
|
|
213
231
|
* )
|
|
214
232
|
* .execute()
|
|
@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
218
236
|
*
|
|
219
237
|
* ```sql
|
|
220
238
|
* insert into "person" ("first_name", "last_name", "age")
|
|
221
|
-
* select "pet"."name", $1 as "
|
|
239
|
+
* select "pet"."name", $1 as "last_name", 7 as "age from "pet"
|
|
222
240
|
* ```
|
|
223
241
|
*/
|
|
224
242
|
expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
|
|
@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
414
432
|
* .onDuplicateKeyUpdate({ species: 'hamster' })
|
|
415
433
|
* ```
|
|
416
434
|
*/
|
|
417
|
-
onDuplicateKeyUpdate(update:
|
|
435
|
+
onDuplicateKeyUpdate(update: UpdateObjectExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
418
436
|
/**
|
|
419
437
|
* Allows you to return data from modified rows.
|
|
420
438
|
*
|
|
@@ -474,7 +492,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
474
492
|
* .executeTakeFirst()
|
|
475
493
|
* ```
|
|
476
494
|
*/
|
|
477
|
-
returning<SE extends SelectExpression<DB, TB>>(
|
|
495
|
+
returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
496
|
+
returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
|
|
497
|
+
returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
478
498
|
/**
|
|
479
499
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
480
500
|
* that support `returning` such as PostgreSQL.
|
|
@@ -3,7 +3,7 @@ import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
|
|
|
3
3
|
import { parseInsertExpression, } from '../parser/insert-values-parser.js';
|
|
4
4
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
5
5
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
6
|
-
import {
|
|
6
|
+
import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
|
|
7
7
|
import { preventAwait } from '../util/prevent-await.js';
|
|
8
8
|
import { freeze } from '../util/object-utils.js';
|
|
9
9
|
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
@@ -75,7 +75,7 @@ export class InsertQueryBuilder {
|
|
|
75
75
|
* .select((eb) => [
|
|
76
76
|
* 'pet.name',
|
|
77
77
|
* eb.val('Petson').as('last_name'),
|
|
78
|
-
* eb.
|
|
78
|
+
* eb.lit(7).as('age'),
|
|
79
79
|
* ])
|
|
80
80
|
* )
|
|
81
81
|
* .execute()
|
|
@@ -85,7 +85,7 @@ export class InsertQueryBuilder {
|
|
|
85
85
|
*
|
|
86
86
|
* ```sql
|
|
87
87
|
* insert into "person" ("first_name", "last_name", "age")
|
|
88
|
-
* select "pet"."name", $1 as "
|
|
88
|
+
* select "pet"."name", $1 as "last_name", 7 as "age from "pet"
|
|
89
89
|
* ```
|
|
90
90
|
*/
|
|
91
91
|
expression(expression) {
|
|
@@ -308,7 +308,7 @@ export class InsertQueryBuilder {
|
|
|
308
308
|
return new InsertQueryBuilder({
|
|
309
309
|
...this.#props,
|
|
310
310
|
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
311
|
-
onDuplicateKey: OnDuplicateKeyNode.create(
|
|
311
|
+
onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObjectExpression(update)),
|
|
312
312
|
}),
|
|
313
313
|
});
|
|
314
314
|
}
|
|
@@ -23,7 +23,14 @@
|
|
|
23
23
|
*/
|
|
24
24
|
export declare class InsertResult {
|
|
25
25
|
/**
|
|
26
|
-
* The auto incrementing primary key
|
|
26
|
+
* The auto incrementing primary key of the inserted row.
|
|
27
|
+
*
|
|
28
|
+
* This property can be undefined when the query contains an `on conflict`
|
|
29
|
+
* clause that makes the query succeed even when nothing gets inserted.
|
|
30
|
+
*
|
|
31
|
+
* This property is always undefined on dialects like PostgreSQL that
|
|
32
|
+
* don't return the inserted id by default. On those dialects you need
|
|
33
|
+
* to use the {@link ReturningInterface.returning | returning} method.
|
|
27
34
|
*/
|
|
28
35
|
readonly insertId: bigint | undefined;
|
|
29
36
|
/**
|
|
@@ -24,7 +24,14 @@
|
|
|
24
24
|
*/
|
|
25
25
|
export class InsertResult {
|
|
26
26
|
/**
|
|
27
|
-
* The auto incrementing primary key
|
|
27
|
+
* The auto incrementing primary key of the inserted row.
|
|
28
|
+
*
|
|
29
|
+
* This property can be undefined when the query contains an `on conflict`
|
|
30
|
+
* clause that makes the query succeed even when nothing gets inserted.
|
|
31
|
+
*
|
|
32
|
+
* This property is always undefined on dialects like PostgreSQL that
|
|
33
|
+
* don't return the inserted id by default. On those dialects you need
|
|
34
|
+
* to use the {@link ReturningInterface.returning | returning} method.
|
|
28
35
|
*/
|
|
29
36
|
insertId;
|
|
30
37
|
/**
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
|
+
import { JSONPathNode } from '../operation-node/json-path-node.js';
|
|
3
4
|
import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
|
|
4
5
|
import { OperationNode } from '../operation-node/operation-node.js';
|
|
5
6
|
export declare class JSONPathBuilder<S, O = S> {
|
|
6
7
|
#private;
|
|
7
|
-
constructor(node: JSONReferenceNode);
|
|
8
|
+
constructor(node: JSONReferenceNode | JSONPathNode);
|
|
8
9
|
/**
|
|
9
10
|
* Access an element of a JSON array in a specific location.
|
|
10
11
|
*
|
|
@@ -123,7 +124,7 @@ export declare class JSONPathBuilder<S, O = S> {
|
|
|
123
124
|
}
|
|
124
125
|
export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements AliasableExpression<O> {
|
|
125
126
|
#private;
|
|
126
|
-
constructor(node: JSONReferenceNode);
|
|
127
|
+
constructor(node: JSONReferenceNode | JSONPathNode);
|
|
127
128
|
/** @private */
|
|
128
129
|
/**
|
|
129
130
|
* All expressions need to have this getter for complicated type-related reasons.
|
|
@@ -132,9 +132,12 @@ export class JSONPathBuilder {
|
|
|
132
132
|
return this.#createBuilderWithPathLeg('Member', key);
|
|
133
133
|
}
|
|
134
134
|
#createBuilderWithPathLeg(legType, value) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
if (JSONReferenceNode.is(this.#node)) {
|
|
136
|
+
return new TraversedJSONPathBuilder(JSONReferenceNode.cloneWithTraversal(this.#node, JSONPathNode.is(this.#node.traversal)
|
|
137
|
+
? JSONPathNode.cloneWithLeg(this.#node.traversal, JSONPathLegNode.create(legType, value))
|
|
138
|
+
: JSONOperatorChainNode.cloneWithValue(this.#node.traversal, ValueNode.createImmediate(value))));
|
|
139
|
+
}
|
|
140
|
+
return new TraversedJSONPathBuilder(JSONPathNode.cloneWithLeg(this.#node, JSONPathLegNode.create(legType, value)));
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
143
|
export class TraversedJSONPathBuilder extends JSONPathBuilder {
|
|
@@ -4,7 +4,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
|
|
|
4
4
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
5
5
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
6
6
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
7
|
-
import {
|
|
7
|
+
import { UpdateObjectExpression } from '../parser/update-set-parser.js';
|
|
8
|
+
import { Updateable } from '../util/column-type.js';
|
|
8
9
|
import { AnyColumn, SqlBool } from '../util/type-utils.js';
|
|
9
10
|
import { WhereInterface } from './where-interface.js';
|
|
10
11
|
export declare class OnConflictBuilder<DB, TB extends keyof DB> implements WhereInterface<DB, TB> {
|
|
@@ -40,12 +41,6 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
40
41
|
* methods for alternative ways to specify the conflict target.
|
|
41
42
|
*/
|
|
42
43
|
expression(expression: Expression<any>): OnConflictBuilder<DB, TB>;
|
|
43
|
-
/**
|
|
44
|
-
* Specify an index predicate for the index target.
|
|
45
|
-
*
|
|
46
|
-
* See {@link WhereInterface.where} for more info.
|
|
47
|
-
*/
|
|
48
|
-
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OnConflictBuilder<DB, TB>;
|
|
49
44
|
/**
|
|
50
45
|
* Adds a `where` expression to the query.
|
|
51
46
|
*
|
|
@@ -345,13 +340,60 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
345
340
|
* .execute()
|
|
346
341
|
* ```
|
|
347
342
|
*/
|
|
348
|
-
where
|
|
343
|
+
where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OnConflictBuilder<DB, TB>;
|
|
344
|
+
where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): OnConflictBuilder<DB, TB>;
|
|
349
345
|
/**
|
|
350
|
-
*
|
|
346
|
+
* Adds a `where` clause where both sides of the operator are references
|
|
347
|
+
* to columns.
|
|
351
348
|
*
|
|
352
|
-
*
|
|
349
|
+
* The normal `where` method treats the right hand side argument as a
|
|
350
|
+
* value by default. `whereRef` treats it as a column reference. This method is
|
|
351
|
+
* expecially useful with joins and correlated subqueries.
|
|
352
|
+
*
|
|
353
|
+
* ### Examples
|
|
354
|
+
*
|
|
355
|
+
* Usage with a join:
|
|
356
|
+
*
|
|
357
|
+
* ```ts
|
|
358
|
+
* db.selectFrom(['person', 'pet'])
|
|
359
|
+
* .selectAll()
|
|
360
|
+
* .whereRef('person.first_name', '=', 'pet.name')
|
|
361
|
+
* ```
|
|
362
|
+
*
|
|
363
|
+
* The generated SQL (PostgreSQL):
|
|
364
|
+
*
|
|
365
|
+
* ```sql
|
|
366
|
+
* select * from "person", "pet" where "person"."first_name" = "pet"."name"
|
|
367
|
+
* ```
|
|
368
|
+
*
|
|
369
|
+
* Usage in a subquery:
|
|
370
|
+
*
|
|
371
|
+
* ```ts
|
|
372
|
+
* const persons = await db
|
|
373
|
+
* .selectFrom('person')
|
|
374
|
+
* .selectAll('person')
|
|
375
|
+
* .select((eb) => eb
|
|
376
|
+
* .selectFrom('pet')
|
|
377
|
+
* .select('name')
|
|
378
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
379
|
+
* .limit(1)
|
|
380
|
+
* .as('pet_name')
|
|
381
|
+
* )
|
|
382
|
+
* .execute()
|
|
383
|
+
* ```
|
|
384
|
+
*
|
|
385
|
+
* The generated SQL (PostgreSQL):
|
|
386
|
+
*
|
|
387
|
+
* ```sql
|
|
388
|
+
* select "person".*, (
|
|
389
|
+
* select "name"
|
|
390
|
+
* from "pet"
|
|
391
|
+
* where "pet"."owner_id" = "person"."id"
|
|
392
|
+
* limit $1
|
|
393
|
+
* ) as "pet_name"
|
|
394
|
+
* from "person"
|
|
353
395
|
*/
|
|
354
|
-
whereRef
|
|
396
|
+
whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): OnConflictBuilder<DB, TB>;
|
|
355
397
|
/**
|
|
356
398
|
* Clears all where expressions from the query.
|
|
357
399
|
*
|
|
@@ -435,7 +477,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
435
477
|
* )
|
|
436
478
|
* ```
|
|
437
479
|
*/
|
|
438
|
-
doUpdateSet(update:
|
|
480
|
+
doUpdateSet(update: UpdateObjectExpression<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
|
|
439
481
|
/**
|
|
440
482
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
441
483
|
* what the provided function returns.
|
|
@@ -446,7 +488,7 @@ export interface OnConflictBuilderProps {
|
|
|
446
488
|
readonly onConflictNode: OnConflictNode;
|
|
447
489
|
}
|
|
448
490
|
export type OnConflictDatabase<DB, TB extends keyof DB> = {
|
|
449
|
-
[K in keyof DB | 'excluded']: K extends keyof DB ? DB[K] : DB[TB]
|
|
491
|
+
[K in keyof DB | 'excluded']: Updateable<K extends keyof DB ? DB[K] : DB[TB]>;
|
|
450
492
|
};
|
|
451
493
|
export type OnConflictTables<TB> = TB | 'excluded';
|
|
452
494
|
export declare class OnConflictDoNothingBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
|
|
@@ -462,7 +504,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
462
504
|
*
|
|
463
505
|
* See {@link WhereInterface.where} for more info.
|
|
464
506
|
*/
|
|
465
|
-
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs:
|
|
507
|
+
where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OnConflictUpdateBuilder<DB, TB>;
|
|
466
508
|
/**
|
|
467
509
|
* Adds a `where` expression to the query.
|
|
468
510
|
*
|
|
@@ -762,13 +804,13 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
762
804
|
* .execute()
|
|
763
805
|
* ```
|
|
764
806
|
*/
|
|
765
|
-
where
|
|
807
|
+
where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): OnConflictUpdateBuilder<DB, TB>;
|
|
766
808
|
/**
|
|
767
809
|
* Specify a where condition for the update operation.
|
|
768
810
|
*
|
|
769
811
|
* See {@link WhereInterface.whereRef} for more info.
|
|
770
812
|
*/
|
|
771
|
-
whereRef
|
|
813
|
+
whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): OnConflictUpdateBuilder<DB, TB>;
|
|
772
814
|
/**
|
|
773
815
|
* Clears all where expressions from the query.
|
|
774
816
|
*
|