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
|
@@ -28,9 +28,10 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
28
28
|
* A simple comparison:
|
|
29
29
|
*
|
|
30
30
|
* ```ts
|
|
31
|
-
*
|
|
31
|
+
* const result = await db.selectFrom('person')
|
|
32
32
|
* .selectAll()
|
|
33
33
|
* .where((eb) => eb('first_name', '=', 'Jennifer'))
|
|
34
|
+
* .execute()
|
|
34
35
|
* ```
|
|
35
36
|
*
|
|
36
37
|
* The generated SQL (PostgreSQL):
|
|
@@ -45,9 +46,10 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
45
46
|
* a column reference, you can use {@link ref}:
|
|
46
47
|
*
|
|
47
48
|
* ```ts
|
|
48
|
-
*
|
|
49
|
+
* const result = await db.selectFrom('person')
|
|
49
50
|
* .selectAll()
|
|
50
51
|
* .where((eb) => eb('first_name', '=', eb.ref('last_name')))
|
|
52
|
+
* .execute()
|
|
51
53
|
* ```
|
|
52
54
|
*
|
|
53
55
|
* The generated SQL (PostgreSQL):
|
|
@@ -61,11 +63,12 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
61
63
|
* In the following example `eb` is used to increment an integer column:
|
|
62
64
|
*
|
|
63
65
|
* ```ts
|
|
64
|
-
* db.updateTable('person')
|
|
66
|
+
* await db.updateTable('person')
|
|
65
67
|
* .set((eb) => ({
|
|
66
68
|
* age: eb('age', '+', 1)
|
|
67
69
|
* }))
|
|
68
|
-
* .where('id', '=',
|
|
70
|
+
* .where('id', '=', 3)
|
|
71
|
+
* .execute()
|
|
69
72
|
* ```
|
|
70
73
|
*
|
|
71
74
|
* The generated SQL (PostgreSQL):
|
|
@@ -80,15 +83,28 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
80
83
|
* can be any expression:
|
|
81
84
|
*
|
|
82
85
|
* ```ts
|
|
83
|
-
*
|
|
86
|
+
* const result = await db.selectFrom('person')
|
|
84
87
|
* .selectAll()
|
|
85
88
|
* .where((eb) => eb(
|
|
86
|
-
* eb.fn('lower', ['first_name']),
|
|
89
|
+
* eb.fn<string>('lower', ['first_name']),
|
|
87
90
|
* 'in',
|
|
88
91
|
* eb.selectFrom('pet')
|
|
89
92
|
* .select('pet.name')
|
|
90
93
|
* .where('pet.species', '=', 'cat')
|
|
91
94
|
* ))
|
|
95
|
+
* .execute()
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* The generated SQL (PostgreSQL):
|
|
99
|
+
*
|
|
100
|
+
* ```sql
|
|
101
|
+
* select *
|
|
102
|
+
* from "person"
|
|
103
|
+
* where lower("first_name") in (
|
|
104
|
+
* select "pet"."name"
|
|
105
|
+
* from "pet"
|
|
106
|
+
* where "pet"."species" = $1
|
|
107
|
+
* )
|
|
92
108
|
* ```
|
|
93
109
|
*/
|
|
94
110
|
<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: OP, rhs: VE): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
@@ -98,13 +114,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
98
114
|
* ### Examples
|
|
99
115
|
*
|
|
100
116
|
* ```ts
|
|
101
|
-
* db.selectFrom('person')
|
|
117
|
+
* const result = await db.selectFrom('person')
|
|
102
118
|
* .where(({ eb, exists, selectFrom }) =>
|
|
103
119
|
* eb('first_name', '=', 'Jennifer').and(
|
|
104
120
|
* exists(selectFrom('pet').whereRef('owner_id', '=', 'person.id').select('pet.id'))
|
|
105
121
|
* )
|
|
106
122
|
* )
|
|
107
123
|
* .selectAll()
|
|
124
|
+
* .execute()
|
|
108
125
|
* ```
|
|
109
126
|
*
|
|
110
127
|
* The generated SQL (PostgreSQL):
|
|
@@ -126,7 +143,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
126
143
|
* table of the database even if it doesn't produce valid SQL.
|
|
127
144
|
*
|
|
128
145
|
* ```ts
|
|
129
|
-
* await db.selectFrom('person')
|
|
146
|
+
* const result = await db.selectFrom('person')
|
|
130
147
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
131
148
|
* .select((eb) => [
|
|
132
149
|
* 'person.id',
|
|
@@ -173,7 +190,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
173
190
|
* ])
|
|
174
191
|
* .execute()
|
|
175
192
|
*
|
|
176
|
-
* console.log(result[0]
|
|
193
|
+
* console.log(result[0]?.owner_name)
|
|
177
194
|
* ```
|
|
178
195
|
*
|
|
179
196
|
* The generated SQL (PostgreSQL):
|
|
@@ -205,11 +222,9 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
205
222
|
* Kitchen sink example with 2 flavors of `case` operator:
|
|
206
223
|
*
|
|
207
224
|
* ```ts
|
|
208
|
-
* import { sql } from 'kysely'
|
|
209
|
-
*
|
|
210
225
|
* const { title, name } = await db
|
|
211
226
|
* .selectFrom('person')
|
|
212
|
-
* .where('id', '=',
|
|
227
|
+
* .where('id', '=', 123)
|
|
213
228
|
* .select((eb) => [
|
|
214
229
|
* eb.fn.coalesce('last_name', 'first_name').as('name'),
|
|
215
230
|
* eb
|
|
@@ -219,7 +234,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
219
234
|
* .when('gender', '=', 'female')
|
|
220
235
|
* .then(
|
|
221
236
|
* eb
|
|
222
|
-
* .case('
|
|
237
|
+
* .case('marital_status')
|
|
223
238
|
* .when('single')
|
|
224
239
|
* .then('Ms.')
|
|
225
240
|
* .else('Mrs.')
|
|
@@ -239,7 +254,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
239
254
|
* case
|
|
240
255
|
* when "gender" = $1 then $2
|
|
241
256
|
* when "gender" = $3 then
|
|
242
|
-
* case "
|
|
257
|
+
* case "marital_status"
|
|
243
258
|
* when $4 then $5
|
|
244
259
|
* else $6
|
|
245
260
|
* end
|
|
@@ -265,72 +280,112 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
265
280
|
* This function can be used to pass in a column reference instead:
|
|
266
281
|
*
|
|
267
282
|
* ```ts
|
|
268
|
-
* db.selectFrom('person')
|
|
283
|
+
* const result = await db.selectFrom('person')
|
|
269
284
|
* .selectAll('person')
|
|
270
285
|
* .where((eb) => eb.or([
|
|
271
286
|
* eb('first_name', '=', eb.ref('last_name')),
|
|
272
287
|
* eb('first_name', '=', eb.ref('middle_name'))
|
|
273
288
|
* ]))
|
|
289
|
+
* .execute()
|
|
290
|
+
* ```
|
|
291
|
+
*
|
|
292
|
+
* The generated SQL (PostgreSQL):
|
|
293
|
+
*
|
|
294
|
+
* ```sql
|
|
295
|
+
* select "person".*
|
|
296
|
+
* from "person"
|
|
297
|
+
* where "first_name" = "last_name" or "first_name" = "middle_name"
|
|
274
298
|
* ```
|
|
275
299
|
*
|
|
276
300
|
* In the next example we use the `ref` method to reference columns of the virtual
|
|
277
301
|
* table `excluded` in a type-safe way to create an upsert operation:
|
|
278
302
|
*
|
|
279
303
|
* ```ts
|
|
280
|
-
* db.insertInto('person')
|
|
281
|
-
* .values(
|
|
304
|
+
* await db.insertInto('person')
|
|
305
|
+
* .values({
|
|
306
|
+
* id: 3,
|
|
307
|
+
* first_name: 'Jennifer',
|
|
308
|
+
* last_name: 'Aniston',
|
|
309
|
+
* gender: 'female',
|
|
310
|
+
* })
|
|
282
311
|
* .onConflict((oc) => oc
|
|
283
312
|
* .column('id')
|
|
284
313
|
* .doUpdateSet(({ ref }) => ({
|
|
285
314
|
* first_name: ref('excluded.first_name'),
|
|
286
|
-
* last_name: ref('excluded.last_name')
|
|
315
|
+
* last_name: ref('excluded.last_name'),
|
|
316
|
+
* gender: ref('excluded.gender'),
|
|
287
317
|
* }))
|
|
288
318
|
* )
|
|
319
|
+
* .execute()
|
|
320
|
+
* ```
|
|
321
|
+
*
|
|
322
|
+
* The generated SQL (PostgreSQL):
|
|
323
|
+
*
|
|
324
|
+
* ```sql
|
|
325
|
+
* insert into "person" ("id", "first_name", "last_name", "gender")
|
|
326
|
+
* values ($1, $2, $3, $4)
|
|
327
|
+
* on conflict ("id") do update set
|
|
328
|
+
* "first_name" = "excluded"."first_name",
|
|
329
|
+
* "last_name" = "excluded"."last_name",
|
|
330
|
+
* "gender" = "excluded"."gender"
|
|
289
331
|
* ```
|
|
290
332
|
*
|
|
291
333
|
* In the next example we use `ref` in a raw sql expression. Unless you want
|
|
292
334
|
* to be as type-safe as possible, this is probably overkill:
|
|
293
335
|
*
|
|
294
336
|
* ```ts
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
337
|
+
* import { sql } from 'kysely'
|
|
338
|
+
*
|
|
339
|
+
* await db.updateTable('pet')
|
|
340
|
+
* .set((eb) => ({
|
|
341
|
+
* name: sql<string>`concat(${eb.ref('pet.name')}, ${' the animal'})`
|
|
342
|
+
* }))
|
|
343
|
+
* .execute()
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* The generated SQL (PostgreSQL):
|
|
347
|
+
*
|
|
348
|
+
* ```sql
|
|
349
|
+
* update "pet" set "name" = concat("pet"."name", $1)
|
|
298
350
|
* ```
|
|
299
351
|
*
|
|
300
352
|
* In the next example we use `ref` to reference a nested JSON property:
|
|
301
353
|
*
|
|
302
354
|
* ```ts
|
|
303
|
-
* db.selectFrom('person')
|
|
355
|
+
* const result = await db.selectFrom('person')
|
|
304
356
|
* .where(({ eb, ref }) => eb(
|
|
305
|
-
* ref('
|
|
357
|
+
* ref('profile', '->').key('addresses').at(0).key('city'),
|
|
306
358
|
* '=',
|
|
307
|
-
* '
|
|
359
|
+
* 'San Diego'
|
|
308
360
|
* ))
|
|
309
361
|
* .selectAll()
|
|
362
|
+
* .execute()
|
|
310
363
|
* ```
|
|
311
364
|
*
|
|
312
365
|
* The generated SQL (PostgreSQL):
|
|
313
366
|
*
|
|
314
367
|
* ```sql
|
|
315
|
-
* select * from "person" where "
|
|
368
|
+
* select * from "person" where "profile"->'addresses'->0->'city' = $1
|
|
316
369
|
* ```
|
|
317
370
|
*
|
|
318
371
|
* You can also compile to a JSON path expression by using the `->$`or `->>$` operator:
|
|
319
372
|
*
|
|
320
373
|
* ```ts
|
|
321
|
-
* db.selectFrom('person')
|
|
374
|
+
* const result = await db.selectFrom('person')
|
|
322
375
|
* .select(({ ref }) =>
|
|
323
|
-
* ref('
|
|
376
|
+
* ref('profile', '->$')
|
|
377
|
+
* .key('addresses')
|
|
324
378
|
* .at('last')
|
|
325
|
-
* .key('
|
|
326
|
-
* .as('
|
|
379
|
+
* .key('city')
|
|
380
|
+
* .as('current_city')
|
|
327
381
|
* )
|
|
382
|
+
* .execute()
|
|
328
383
|
* ```
|
|
329
384
|
*
|
|
330
385
|
* The generated SQL (MySQL):
|
|
331
386
|
*
|
|
332
387
|
* ```sql
|
|
333
|
-
* select `
|
|
388
|
+
* select `profile`->'$.addresses[last].city' as `current_city` from `person`
|
|
334
389
|
* ```
|
|
335
390
|
*/
|
|
336
391
|
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
@@ -343,13 +398,13 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
343
398
|
* ### Examples
|
|
344
399
|
*
|
|
345
400
|
* ```ts
|
|
346
|
-
* db.updateTable('person')
|
|
347
|
-
* .set('
|
|
348
|
-
* '
|
|
349
|
-
* eb.jsonPath<'
|
|
350
|
-
* eb.val('
|
|
401
|
+
* await db.updateTable('person')
|
|
402
|
+
* .set('profile', (eb) => eb.fn('json_set', [
|
|
403
|
+
* 'profile',
|
|
404
|
+
* eb.jsonPath<'profile'>().key('addresses').at('last').key('city'),
|
|
405
|
+
* eb.val('San Diego')
|
|
351
406
|
* ]))
|
|
352
|
-
* .where('id', '=',
|
|
407
|
+
* .where('id', '=', 3)
|
|
353
408
|
* .execute()
|
|
354
409
|
* ```
|
|
355
410
|
*
|
|
@@ -357,16 +412,21 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
357
412
|
*
|
|
358
413
|
* ```sql
|
|
359
414
|
* update `person`
|
|
360
|
-
* set `
|
|
361
|
-
* where `id` =
|
|
415
|
+
* set `profile` = json_set(`profile`, '$.addresses[last].city', $1)
|
|
416
|
+
* where `id` = $2
|
|
362
417
|
* ```
|
|
363
418
|
*/
|
|
364
419
|
jsonPath<$ extends StringReference<DB, TB> = never>(): IsNever<$> extends true ? KyselyTypeError<"You must provide a column reference as this method's $ generic"> : JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, $>>;
|
|
365
420
|
/**
|
|
366
421
|
* Creates a table reference.
|
|
367
422
|
*
|
|
423
|
+
* ### Examples
|
|
424
|
+
*
|
|
368
425
|
* ```ts
|
|
369
|
-
*
|
|
426
|
+
* import { sql } from 'kysely'
|
|
427
|
+
* import type { Pet } from 'type-editor' // imaginary module
|
|
428
|
+
*
|
|
429
|
+
* const result = await db.selectFrom('person')
|
|
370
430
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
371
431
|
* .select(eb => [
|
|
372
432
|
* 'person.id',
|
|
@@ -384,6 +444,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
384
444
|
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
385
445
|
* group by "person"."id"
|
|
386
446
|
* ```
|
|
447
|
+
*
|
|
448
|
+
* If you need a column reference, use {@link ref}.
|
|
387
449
|
*/
|
|
388
450
|
table<T extends TB & string>(table: T): ExpressionWrapper<DB, TB, Selectable<DB[T]>>;
|
|
389
451
|
/**
|
|
@@ -399,13 +461,30 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
399
461
|
* be used to pass in a value instead:
|
|
400
462
|
*
|
|
401
463
|
* ```ts
|
|
402
|
-
*
|
|
464
|
+
* const result = await db.selectFrom('person')
|
|
465
|
+
* .selectAll()
|
|
466
|
+
* .where((eb) => eb(
|
|
467
|
+
* eb.val('cat'),
|
|
468
|
+
* '=',
|
|
469
|
+
* eb.fn.any(
|
|
470
|
+
* eb.selectFrom('pet')
|
|
471
|
+
* .select('species')
|
|
472
|
+
* .whereRef('owner_id', '=', 'person.id')
|
|
473
|
+
* )
|
|
474
|
+
* ))
|
|
475
|
+
* .execute()
|
|
403
476
|
* ```
|
|
404
477
|
*
|
|
405
478
|
* The generated SQL (PostgreSQL):
|
|
406
479
|
*
|
|
407
480
|
* ```sql
|
|
408
|
-
*
|
|
481
|
+
* select *
|
|
482
|
+
* from "person"
|
|
483
|
+
* where $1 = any(
|
|
484
|
+
* select "species"
|
|
485
|
+
* from "pet"
|
|
486
|
+
* where "owner_id" = "person"."id"
|
|
487
|
+
* )
|
|
409
488
|
* ```
|
|
410
489
|
*/
|
|
411
490
|
val<VE>(value: VE): ExpressionWrapper<DB, TB, ExtractTypeFromValueExpression<VE>>;
|
|
@@ -418,7 +497,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
418
497
|
* ### Examples
|
|
419
498
|
*
|
|
420
499
|
* ```ts
|
|
421
|
-
* db.selectFrom('person')
|
|
500
|
+
* const result = await db.selectFrom('person')
|
|
422
501
|
* .selectAll('person')
|
|
423
502
|
* .where(({ eb, refTuple, tuple }) => eb(
|
|
424
503
|
* refTuple('first_name', 'last_name'),
|
|
@@ -428,6 +507,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
428
507
|
* tuple('Sylvester', 'Stallone')
|
|
429
508
|
* ]
|
|
430
509
|
* ))
|
|
510
|
+
* .execute()
|
|
431
511
|
* ```
|
|
432
512
|
*
|
|
433
513
|
* The generated SQL (PostgreSQL):
|
|
@@ -451,7 +531,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
451
531
|
* function:
|
|
452
532
|
*
|
|
453
533
|
* ```ts
|
|
454
|
-
* db.selectFrom('person')
|
|
534
|
+
* const result = await db.selectFrom('person')
|
|
455
535
|
* .selectAll('person')
|
|
456
536
|
* .where(({ eb, refTuple, selectFrom }) => eb(
|
|
457
537
|
* refTuple('first_name', 'last_name'),
|
|
@@ -461,6 +541,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
461
541
|
* .where('species', '!=', 'cat')
|
|
462
542
|
* .$asTuple('name', 'species')
|
|
463
543
|
* ))
|
|
544
|
+
* .execute()
|
|
464
545
|
* ```
|
|
465
546
|
*
|
|
466
547
|
* The generated SQL (PostgreSQL):
|
|
@@ -493,7 +574,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
493
574
|
* ### Examples
|
|
494
575
|
*
|
|
495
576
|
* ```ts
|
|
496
|
-
* db.selectFrom('person')
|
|
577
|
+
* const result = await db.selectFrom('person')
|
|
497
578
|
* .selectAll('person')
|
|
498
579
|
* .where(({ eb, refTuple, tuple }) => eb(
|
|
499
580
|
* refTuple('first_name', 'last_name'),
|
|
@@ -503,6 +584,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
503
584
|
* tuple('Sylvester', 'Stallone')
|
|
504
585
|
* ]
|
|
505
586
|
* ))
|
|
587
|
+
* .execute()
|
|
506
588
|
* ```
|
|
507
589
|
*
|
|
508
590
|
* The generated SQL (PostgreSQL):
|
|
@@ -535,8 +617,9 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
535
617
|
* ### Examples
|
|
536
618
|
*
|
|
537
619
|
* ```ts
|
|
538
|
-
* db.selectFrom('person')
|
|
620
|
+
* const result = await db.selectFrom('person')
|
|
539
621
|
* .select((eb) => eb.lit(1).as('one'))
|
|
622
|
+
* .execute()
|
|
540
623
|
* ```
|
|
541
624
|
*
|
|
542
625
|
* The generated SQL (PostgreSQL):
|
|
@@ -557,11 +640,12 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
557
640
|
* ### Examples
|
|
558
641
|
*
|
|
559
642
|
* ```ts
|
|
560
|
-
* db.selectFrom('person')
|
|
643
|
+
* const result = await db.selectFrom('person')
|
|
561
644
|
* .select((eb) => [
|
|
562
645
|
* 'first_name',
|
|
563
646
|
* eb.unary('-', 'age').as('negative_age')
|
|
564
647
|
* ])
|
|
648
|
+
* .execute()
|
|
565
649
|
* ```
|
|
566
650
|
*
|
|
567
651
|
* The generated SQL (PostgreSQL):
|
|
@@ -602,9 +686,10 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
602
686
|
* ### Examples
|
|
603
687
|
*
|
|
604
688
|
* ```ts
|
|
605
|
-
* db.selectFrom('person')
|
|
689
|
+
* const result = await db.selectFrom('person')
|
|
606
690
|
* .selectAll()
|
|
607
691
|
* .where((eb) => eb.between('age', 40, 60))
|
|
692
|
+
* .execute()
|
|
608
693
|
* ```
|
|
609
694
|
*
|
|
610
695
|
* The generated SQL (PostgreSQL):
|
|
@@ -620,9 +705,10 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
620
705
|
* ### Examples
|
|
621
706
|
*
|
|
622
707
|
* ```ts
|
|
623
|
-
* db.selectFrom('person')
|
|
708
|
+
* const result = await db.selectFrom('person')
|
|
624
709
|
* .selectAll()
|
|
625
710
|
* .where((eb) => eb.betweenSymmetric('age', 40, 60))
|
|
711
|
+
* .execute()
|
|
626
712
|
* ```
|
|
627
713
|
*
|
|
628
714
|
* The generated SQL (PostgreSQL):
|
|
@@ -646,13 +732,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
646
732
|
* statement:
|
|
647
733
|
*
|
|
648
734
|
* ```ts
|
|
649
|
-
* db.selectFrom('person')
|
|
735
|
+
* const result = await db.selectFrom('person')
|
|
650
736
|
* .selectAll('person')
|
|
651
737
|
* .where((eb) => eb.and([
|
|
652
738
|
* eb('first_name', '=', 'Jennifer'),
|
|
653
|
-
* eb('
|
|
654
|
-
* eb('
|
|
739
|
+
* eb('first_name', '=', 'Arnold'),
|
|
740
|
+
* eb('first_name', '=', 'Sylvester')
|
|
655
741
|
* ]))
|
|
742
|
+
* .execute()
|
|
656
743
|
* ```
|
|
657
744
|
*
|
|
658
745
|
* The generated SQL (PostgreSQL):
|
|
@@ -671,12 +758,13 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
671
758
|
* equality comparisons:
|
|
672
759
|
*
|
|
673
760
|
* ```ts
|
|
674
|
-
* db.selectFrom('person')
|
|
761
|
+
* const result = await db.selectFrom('person')
|
|
675
762
|
* .selectAll('person')
|
|
676
763
|
* .where((eb) => eb.and({
|
|
677
764
|
* first_name: 'Jennifer',
|
|
678
765
|
* last_name: 'Aniston'
|
|
679
766
|
* }))
|
|
767
|
+
* .execute()
|
|
680
768
|
* ```
|
|
681
769
|
*
|
|
682
770
|
* The generated SQL (PostgreSQL):
|
|
@@ -706,13 +794,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
706
794
|
* statement:
|
|
707
795
|
*
|
|
708
796
|
* ```ts
|
|
709
|
-
* db.selectFrom('person')
|
|
797
|
+
* const result = await db.selectFrom('person')
|
|
710
798
|
* .selectAll('person')
|
|
711
799
|
* .where((eb) => eb.or([
|
|
712
800
|
* eb('first_name', '=', 'Jennifer'),
|
|
713
|
-
* eb('
|
|
714
|
-
* eb('
|
|
801
|
+
* eb('first_name', '=', 'Arnold'),
|
|
802
|
+
* eb('first_name', '=', 'Sylvester')
|
|
715
803
|
* ]))
|
|
804
|
+
* .execute()
|
|
716
805
|
* ```
|
|
717
806
|
*
|
|
718
807
|
* The generated SQL (PostgreSQL):
|
|
@@ -731,12 +820,13 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
731
820
|
* equality comparisons:
|
|
732
821
|
*
|
|
733
822
|
* ```ts
|
|
734
|
-
* db.selectFrom('person')
|
|
823
|
+
* const result = await db.selectFrom('person')
|
|
735
824
|
* .selectAll('person')
|
|
736
825
|
* .where((eb) => eb.or({
|
|
737
826
|
* first_name: 'Jennifer',
|
|
738
827
|
* last_name: 'Aniston'
|
|
739
828
|
* }))
|
|
829
|
+
* .execute()
|
|
740
830
|
* ```
|
|
741
831
|
*
|
|
742
832
|
* The generated SQL (PostgreSQL):
|
|
@@ -758,9 +848,10 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
758
848
|
* ### Examples
|
|
759
849
|
*
|
|
760
850
|
* ```ts
|
|
761
|
-
* db.selectFrom('person')
|
|
851
|
+
* const result = await db.selectFrom('person')
|
|
762
852
|
* .selectAll('person')
|
|
763
|
-
* .where((eb) => eb(eb.parens('age', '+', 1), '/', 100), '<', 0.1)
|
|
853
|
+
* .where((eb) => eb(eb.parens('age', '+', 1), '/', 100), '<', 0.1)
|
|
854
|
+
* .execute()
|
|
764
855
|
* ```
|
|
765
856
|
*
|
|
766
857
|
* The generated SQL (PostgreSQL):
|
|
@@ -774,13 +865,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
774
865
|
* You can also pass in any expression as the only argument:
|
|
775
866
|
*
|
|
776
867
|
* ```ts
|
|
777
|
-
* db.selectFrom('person')
|
|
868
|
+
* const result = await db.selectFrom('person')
|
|
778
869
|
* .selectAll('person')
|
|
779
870
|
* .where((eb) => eb.parens(
|
|
780
|
-
* eb('age', '=', 1).or('age', '=', 2)
|
|
871
|
+
* eb('age', '=', 1).or('age', '=', 2)
|
|
781
872
|
* ).and(
|
|
782
873
|
* eb('first_name', '=', 'Jennifer').or('first_name', '=', 'Arnold')
|
|
783
874
|
* ))
|
|
875
|
+
* .execute()
|
|
784
876
|
* ```
|
|
785
877
|
*
|
|
786
878
|
* The generated SQL (PostgreSQL):
|
|
@@ -802,12 +894,13 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
802
894
|
* ### Examples
|
|
803
895
|
*
|
|
804
896
|
* ```ts
|
|
805
|
-
* db.selectFrom('person')
|
|
897
|
+
* const result = await db.selectFrom('person')
|
|
806
898
|
* .select((eb) => [
|
|
807
899
|
* 'id',
|
|
808
900
|
* 'first_name',
|
|
809
901
|
* eb.cast<number>('age', 'integer').as('age')
|
|
810
902
|
* ])
|
|
903
|
+
* .execute()
|
|
811
904
|
* ```
|
|
812
905
|
*
|
|
813
906
|
* The generated SQL (PostgreSQL):
|