kysely 0.23.5 → 0.24.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/README.md +46 -24
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
- package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
- package/dist/cjs/driver/runtime-driver.js +4 -2
- package/dist/cjs/expression/expression-builder.d.ts +386 -0
- package/dist/cjs/expression/expression-builder.js +92 -0
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
- package/dist/cjs/expression/expression-wrapper.js +54 -0
- package/dist/cjs/expression/expression.d.ts +1 -1
- package/dist/cjs/helpers/postgres.d.ts +133 -0
- package/dist/cjs/helpers/postgres.js +141 -0
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/kysely.d.ts +10 -0
- package/dist/cjs/kysely.js +12 -1
- package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
- package/dist/cjs/migration/migrator.d.ts +5 -2
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -3
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/delete-query-node.js +0 -6
- package/dist/cjs/operation-node/function-node.d.ts +13 -0
- package/dist/cjs/operation-node/function-node.js +19 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +9 -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 +13 -2
- package/dist/cjs/operation-node/operator-node.js +38 -3
- package/dist/cjs/operation-node/query-node.d.ts +25 -8
- package/dist/cjs/operation-node/query-node.js +9 -2
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -6
- package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/update-query-node.js +0 -6
- package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
- package/dist/cjs/parser/binary-operation-parser.js +89 -39
- package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
- package/dist/cjs/parser/coalesce-parser.js +0 -9
- package/dist/cjs/parser/expression-parser.d.ts +7 -3
- package/dist/cjs/parser/expression-parser.js +3 -3
- package/dist/cjs/parser/group-by-parser.d.ts +3 -2
- package/dist/cjs/parser/group-by-parser.js +3 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
- package/dist/cjs/parser/insert-values-parser.js +19 -13
- package/dist/cjs/parser/join-parser.js +1 -1
- package/dist/cjs/parser/parse-utils.d.ts +0 -2
- package/dist/cjs/parser/parse-utils.js +1 -8
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -13
- package/dist/cjs/parser/select-parser.js +8 -4
- package/dist/cjs/parser/table-parser.d.ts +5 -3
- package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
- package/dist/cjs/parser/unary-operation-parser.js +9 -8
- package/dist/cjs/parser/update-set-parser.d.ts +4 -1
- package/dist/cjs/parser/update-set-parser.js +9 -4
- package/dist/cjs/parser/value-parser.d.ts +5 -0
- package/dist/cjs/parser/value-parser.js +1 -3
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
- package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
- package/dist/cjs/query-builder/delete-query-builder.d.ts +220 -201
- package/dist/cjs/query-builder/delete-query-builder.js +21 -27
- package/dist/cjs/query-builder/delete-result.js +3 -0
- package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
- package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
- package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
- package/dist/cjs/query-builder/function-module.d.ts +40 -12
- package/dist/cjs/query-builder/function-module.js +43 -329
- package/dist/cjs/query-builder/having-interface.d.ts +19 -16
- package/dist/cjs/query-builder/insert-query-builder.d.ts +75 -26
- package/dist/cjs/query-builder/insert-query-builder.js +21 -29
- package/dist/cjs/query-builder/insert-result.js +3 -0
- package/dist/cjs/query-builder/join-builder.d.ts +23 -26
- package/dist/cjs/query-builder/join-builder.js +17 -22
- package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
- package/dist/cjs/query-builder/no-result-error.js +5 -1
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
- package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
- package/dist/cjs/query-builder/over-builder.d.ts +5 -0
- package/dist/cjs/query-builder/over-builder.js +7 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +148 -237
- package/dist/cjs/query-builder/select-query-builder.js +333 -78
- package/dist/cjs/query-builder/update-query-builder.d.ts +145 -213
- package/dist/cjs/query-builder/update-query-builder.js +21 -115
- package/dist/cjs/query-builder/update-result.js +3 -0
- package/dist/cjs/query-builder/where-interface.d.ts +71 -184
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +17 -1
- package/dist/cjs/query-creator.d.ts +9 -2
- package/dist/cjs/query-creator.js +1 -24
- package/dist/cjs/query-executor/query-executor.d.ts +3 -3
- package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
- package/dist/cjs/raw-builder/raw-builder.js +13 -7
- package/dist/cjs/raw-builder/sql.d.ts +17 -9
- package/dist/cjs/raw-builder/sql.js +8 -2
- package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-column-builder.js +7 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
- package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
- package/dist/cjs/schema/column-definition-builder.js +8 -1
- package/dist/cjs/schema/create-index-builder.d.ts +51 -9
- package/dist/cjs/schema/create-index-builder.js +17 -0
- package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
- package/dist/cjs/schema/create-schema-builder.js +7 -0
- package/dist/cjs/schema/create-table-builder.d.ts +3 -1
- package/dist/cjs/schema/create-table-builder.js +3 -1
- package/dist/cjs/schema/create-type-builder.d.ts +5 -0
- package/dist/cjs/schema/create-type-builder.js +7 -0
- package/dist/cjs/schema/create-view-builder.d.ts +5 -0
- package/dist/cjs/schema/create-view-builder.js +7 -0
- package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-index-builder.js +7 -0
- package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-schema-builder.js +7 -0
- package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-table-builder.js +7 -0
- package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-type-builder.js +7 -0
- package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-view-builder.js +7 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
- package/dist/cjs/util/compilable.d.ts +1 -0
- package/dist/cjs/util/compilable.js +6 -0
- package/dist/cjs/util/explainable.d.ts +35 -0
- package/dist/cjs/util/log.d.ts +2 -0
- package/dist/cjs/util/object-utils.js +1 -1
- package/dist/cjs/util/streamable.d.ts +29 -0
- package/dist/cjs/util/streamable.js +2 -0
- package/dist/cjs/util/type-utils.d.ts +1 -0
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
- package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
- package/dist/esm/driver/runtime-driver.js +4 -2
- package/dist/esm/expression/expression-builder.d.ts +386 -0
- package/dist/esm/expression/expression-builder.js +88 -0
- package/dist/esm/expression/expression-wrapper.d.ts +92 -0
- package/dist/esm/expression/expression-wrapper.js +50 -0
- package/dist/esm/expression/expression.d.ts +1 -1
- package/dist/esm/helpers/postgres.d.ts +133 -0
- package/dist/esm/helpers/postgres.js +136 -0
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +10 -0
- package/dist/esm/kysely.js +13 -2
- package/dist/esm/migration/file-migration-provider.d.ts +5 -2
- package/dist/esm/migration/migrator.d.ts +5 -2
- package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -3
- package/dist/esm/operation-node/create-index-node.d.ts +2 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +0 -1
- package/dist/esm/operation-node/delete-query-node.js +0 -6
- package/dist/esm/operation-node/function-node.d.ts +13 -0
- package/dist/esm/operation-node/function-node.js +17 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +9 -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 +13 -2
- package/dist/esm/operation-node/operator-node.js +34 -3
- package/dist/esm/operation-node/query-node.d.ts +25 -8
- package/dist/esm/operation-node/query-node.js +9 -2
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -6
- package/dist/esm/operation-node/update-query-node.d.ts +0 -1
- package/dist/esm/operation-node/update-query-node.js +0 -6
- package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
- package/dist/esm/parser/binary-operation-parser.js +85 -37
- package/dist/esm/parser/coalesce-parser.d.ts +0 -2
- package/dist/esm/parser/coalesce-parser.js +1 -7
- package/dist/esm/parser/expression-parser.d.ts +7 -3
- package/dist/esm/parser/expression-parser.js +3 -3
- package/dist/esm/parser/group-by-parser.d.ts +3 -2
- package/dist/esm/parser/group-by-parser.js +3 -0
- package/dist/esm/parser/insert-values-parser.d.ts +4 -1
- package/dist/esm/parser/insert-values-parser.js +18 -12
- package/dist/esm/parser/join-parser.js +2 -2
- package/dist/esm/parser/parse-utils.d.ts +0 -2
- package/dist/esm/parser/parse-utils.js +0 -6
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +5 -13
- package/dist/esm/parser/select-parser.js +7 -3
- package/dist/esm/parser/table-parser.d.ts +5 -3
- package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
- package/dist/esm/parser/unary-operation-parser.js +8 -8
- package/dist/esm/parser/update-set-parser.d.ts +4 -1
- package/dist/esm/parser/update-set-parser.js +7 -2
- package/dist/esm/parser/value-parser.d.ts +5 -0
- package/dist/esm/parser/value-parser.js +1 -3
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
- package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
- package/dist/esm/query-builder/delete-query-builder.d.ts +220 -201
- package/dist/esm/query-builder/delete-query-builder.js +24 -30
- package/dist/esm/query-builder/delete-result.js +3 -0
- package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
- package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
- package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
- package/dist/esm/query-builder/function-module.d.ts +40 -12
- package/dist/esm/query-builder/function-module.js +42 -328
- package/dist/esm/query-builder/having-interface.d.ts +19 -16
- package/dist/esm/query-builder/insert-query-builder.d.ts +75 -26
- package/dist/esm/query-builder/insert-query-builder.js +25 -33
- package/dist/esm/query-builder/insert-result.js +3 -0
- package/dist/esm/query-builder/join-builder.d.ts +23 -26
- package/dist/esm/query-builder/join-builder.js +18 -23
- package/dist/esm/query-builder/no-result-error.d.ts +1 -0
- package/dist/esm/query-builder/no-result-error.js +3 -0
- package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
- package/dist/esm/query-builder/on-conflict-builder.js +54 -38
- package/dist/esm/query-builder/over-builder.d.ts +5 -0
- package/dist/esm/query-builder/over-builder.js +7 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +148 -237
- package/dist/esm/query-builder/select-query-builder.js +337 -82
- package/dist/esm/query-builder/update-query-builder.d.ts +145 -213
- package/dist/esm/query-builder/update-query-builder.js +25 -119
- package/dist/esm/query-builder/update-result.js +3 -0
- package/dist/esm/query-builder/where-interface.d.ts +71 -184
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +17 -1
- package/dist/esm/query-creator.d.ts +9 -2
- package/dist/esm/query-creator.js +1 -24
- package/dist/esm/query-executor/query-executor.d.ts +3 -3
- package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
- package/dist/esm/raw-builder/raw-builder.js +13 -7
- package/dist/esm/raw-builder/sql.d.ts +17 -9
- package/dist/esm/raw-builder/sql.js +8 -2
- package/dist/esm/schema/alter-column-builder.d.ts +5 -0
- package/dist/esm/schema/alter-column-builder.js +7 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
- package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
- package/dist/esm/schema/column-definition-builder.d.ts +6 -1
- package/dist/esm/schema/column-definition-builder.js +8 -1
- package/dist/esm/schema/create-index-builder.d.ts +51 -9
- package/dist/esm/schema/create-index-builder.js +17 -0
- package/dist/esm/schema/create-schema-builder.d.ts +5 -0
- package/dist/esm/schema/create-schema-builder.js +7 -0
- package/dist/esm/schema/create-table-builder.d.ts +3 -1
- package/dist/esm/schema/create-table-builder.js +3 -1
- package/dist/esm/schema/create-type-builder.d.ts +5 -0
- package/dist/esm/schema/create-type-builder.js +7 -0
- package/dist/esm/schema/create-view-builder.d.ts +5 -0
- package/dist/esm/schema/create-view-builder.js +7 -0
- package/dist/esm/schema/drop-index-builder.d.ts +5 -0
- package/dist/esm/schema/drop-index-builder.js +7 -0
- package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
- package/dist/esm/schema/drop-schema-builder.js +7 -0
- package/dist/esm/schema/drop-table-builder.d.ts +5 -0
- package/dist/esm/schema/drop-table-builder.js +7 -0
- package/dist/esm/schema/drop-type-builder.d.ts +5 -0
- package/dist/esm/schema/drop-type-builder.js +7 -0
- package/dist/esm/schema/drop-view-builder.d.ts +5 -0
- package/dist/esm/schema/drop-view-builder.js +7 -0
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
- package/dist/esm/util/compilable.d.ts +1 -0
- package/dist/esm/util/compilable.js +4 -1
- package/dist/esm/util/explainable.d.ts +35 -0
- package/dist/esm/util/log.d.ts +2 -0
- package/dist/esm/util/object-utils.js +1 -1
- package/dist/esm/util/streamable.d.ts +29 -0
- package/dist/esm/util/streamable.js +2 -0
- package/dist/esm/util/type-utils.d.ts +1 -0
- package/helpers/postgres.d.ts +1 -0
- package/helpers/postgres.js +1 -0
- package/package.json +20 -9
- package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
- package/dist/cjs/query-builder/expression-builder.js +0 -107
- package/dist/esm/query-builder/expression-builder.d.ts +0 -126
- package/dist/esm/query-builder/expression-builder.js +0 -104
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://discord.gg/xyBJ3GwvAm)
|
|
4
4
|
[](https://github.com/koskimas/kysely)
|
|
5
5
|
|
|
6
|
-
# [Kysely](https://
|
|
6
|
+
# [Kysely](https://kysely-org.github.io/kysely/index.html)
|
|
7
7
|
|
|
8
8
|
Kysely (pronounce “Key-Seh-Lee”) is a type-safe and autocompletion-friendly typescript SQL query builder. Inspired by
|
|
9
9
|
[knex](http://knexjs.org/). Mainly developed for [node.js](https://nodejs.org/en/) but also runs on [deno](https://deno.land/)
|
|
@@ -21,8 +21,8 @@ column names, aliases and types from selected subqueries, joined subqueries, `wi
|
|
|
21
21
|
much anything you can think of.
|
|
22
22
|
|
|
23
23
|
Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
|
|
24
|
-
hatches for these situations. See the [sql template tag](https://
|
|
25
|
-
and the [DynamicModule](https://
|
|
24
|
+
hatches for these situations. See the [sql template tag](https://kysely-org.github.io/kysely/interfaces/Sql.html)
|
|
25
|
+
and the [DynamicModule](https://kysely-org.github.io/kysely/classes/DynamicModule.html#ref) for more info.
|
|
26
26
|
|
|
27
27
|
All API documentation is written in the typing files and you can simply `cmd-click` on the module, class
|
|
28
28
|
or method you're using to see it. The same documentation is also hosted [here](https://github.com/koskimas/kysely).
|
|
@@ -69,7 +69,7 @@ npm install kysely better-sqlite3
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
More dialects will be added soon. Kysely also has a simple interface
|
|
72
|
-
for [3rd party dialects](https://
|
|
72
|
+
for [3rd party dialects](https://kysely-org.github.io/kysely/interfaces/Dialect.html).
|
|
73
73
|
|
|
74
74
|
### 3rd party dialects
|
|
75
75
|
|
|
@@ -80,6 +80,7 @@ for [3rd party dialects](https://koskimas.github.io/kysely/interfaces/Dialect.ht
|
|
|
80
80
|
- [SurrealDB](https://github.com/igalklebanov/kysely-surrealdb)
|
|
81
81
|
- [sqld](https://github.com/libsql/kysely-libsql)
|
|
82
82
|
- [Neon](https://github.com/seveibar/kysely-neon)
|
|
83
|
+
- [AWS S3 Select](https://github.com/igalklebanov/kysely-s3-select)
|
|
83
84
|
|
|
84
85
|
# Minimal example
|
|
85
86
|
|
|
@@ -189,16 +190,29 @@ type UpdateablePerson = Updateable<PersonTable>
|
|
|
189
190
|
|
|
190
191
|
# Generating types
|
|
191
192
|
|
|
192
|
-
|
|
193
|
-
|
|
193
|
+
To work with Kysely, you're required to provide a database schema type definition to the Kysely constructor.
|
|
194
|
+
|
|
195
|
+
In many cases, defining your database schema definitions manually is good enough.
|
|
196
|
+
|
|
197
|
+
However, when building production applications, its best to stay aligned with the
|
|
198
|
+
database schema, by automatically generating the database schema type definitions.
|
|
199
|
+
|
|
200
|
+
There are several ways to do this using 3rd party libraries:
|
|
201
|
+
|
|
202
|
+
- [kysely-codegen](https://github.com/RobinBlomberg/kysely-codegen) - This library
|
|
203
|
+
generates Kysely database schema type definitions by connecting to and introspecting
|
|
204
|
+
your database. This library works with all built-in dialects.
|
|
205
|
+
|
|
206
|
+
- [prisma-kysely](https://github.com/valtyr/prisma-kysely) - This library generates
|
|
207
|
+
Kysely database schema type definitions from your existing Prisma schemas.
|
|
194
208
|
|
|
195
209
|
# Query examples
|
|
196
210
|
|
|
197
211
|
## Select queries
|
|
198
212
|
|
|
199
213
|
You can find examples of select queries in the documentation of the
|
|
200
|
-
[select method](https://
|
|
201
|
-
the [where method](https://
|
|
214
|
+
[select method](https://kysely-org.github.io/kysely/classes/SelectQueryBuilder.html#select) and
|
|
215
|
+
the [where method](https://kysely-org.github.io/kysely/classes/SelectQueryBuilder.html#where)
|
|
202
216
|
among other places.
|
|
203
217
|
|
|
204
218
|
### Stream select query results
|
|
@@ -242,32 +256,36 @@ async function demo() {
|
|
|
242
256
|
|
|
243
257
|
## Update queries
|
|
244
258
|
|
|
245
|
-
See the [set method](https://
|
|
246
|
-
[updateTable method](https://
|
|
259
|
+
See the [set method](https://kysely-org.github.io/kysely/classes/UpdateQueryBuilder.html#set) and the
|
|
260
|
+
[updateTable method](https://kysely-org.github.io/kysely/classes/Kysely.html#updateTable)
|
|
247
261
|
documentation.
|
|
248
262
|
|
|
249
263
|
## Insert queries
|
|
250
264
|
|
|
251
|
-
See the [values method](https://
|
|
252
|
-
[insertInto method](https://
|
|
265
|
+
See the [values method](https://kysely-org.github.io/kysely/classes/InsertQueryBuilder.html#values) and the
|
|
266
|
+
[insertInto method](https://kysely-org.github.io/kysely/classes/Kysely.html#insertInto)
|
|
253
267
|
documentation.
|
|
254
268
|
|
|
255
269
|
## Delete queries
|
|
256
270
|
|
|
257
|
-
See the [deleteFrom method](https://
|
|
271
|
+
See the [deleteFrom method](https://kysely-org.github.io/kysely/classes/Kysely.html#deleteFrom)
|
|
258
272
|
documentation.
|
|
259
273
|
|
|
260
274
|
# Recipes
|
|
261
275
|
|
|
262
|
-
The [recipes](https://github.com/koskimas/kysely/tree/master/recipes) folder contains a bunch of small tutorials
|
|
276
|
+
The [recipes](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/) folder contains a bunch of small tutorials
|
|
263
277
|
or "recipes" for common use cases.
|
|
264
278
|
|
|
265
|
-
* [
|
|
266
|
-
* [
|
|
267
|
-
* [
|
|
268
|
-
* [
|
|
269
|
-
* [
|
|
270
|
-
* [
|
|
279
|
+
* [Expressions](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/expressions.md)
|
|
280
|
+
* [Conditional selects](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
|
|
281
|
+
* [Dealing with the `Type instantiation is excessively deep and possibly infinite` error](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/excessively-deep-types.md)
|
|
282
|
+
* [Deduplicate joins](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/deduplicate-joins.md)
|
|
283
|
+
* [Extending kysely](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/extending-kysely.md)
|
|
284
|
+
* [Introspecting relation metadata](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/introspecting-relation-metadata.md)
|
|
285
|
+
* [Raw SQL](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/raw-sql.md)
|
|
286
|
+
* [Relations](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/relations.md)
|
|
287
|
+
* [Schemas](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/schemas.md)
|
|
288
|
+
* [Splitting build, compile and execute code](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/splitting-build-compile-and-execute-code.md)
|
|
271
289
|
|
|
272
290
|
# Migrations
|
|
273
291
|
|
|
@@ -292,7 +310,7 @@ when you go back to previous version. The only argument for the functions is an
|
|
|
292
310
|
Migrations should never depend on the current code of your app because they need to work even when the app
|
|
293
311
|
changes. Migrations need to be "frozen in time".
|
|
294
312
|
|
|
295
|
-
The migrations can use the [Kysely.schema](https://
|
|
313
|
+
The migrations can use the [Kysely.schema](https://kysely-org.github.io/kysely/classes/SchemaModule.html)
|
|
296
314
|
module to modify the schema. Migrations can also run normal queries to modify data.
|
|
297
315
|
|
|
298
316
|
Execution order of the migrations is the alpabetical order of their names. An excellent way to name your
|
|
@@ -301,8 +319,8 @@ where multiple team members may add migrations at the same time in parallel comm
|
|
|
301
319
|
about the other migrations.
|
|
302
320
|
|
|
303
321
|
You don't need to store your migrations as separate files if you don't want to. You can easily
|
|
304
|
-
implement your own [MigrationProvider](https://
|
|
305
|
-
and give it to the [Migrator](https://
|
|
322
|
+
implement your own [MigrationProvider](https://kysely-org.github.io/kysely/interfaces/MigrationProvider.html)
|
|
323
|
+
and give it to the [Migrator](https://kysely-org.github.io/kysely/classes/Migrator.html) class
|
|
306
324
|
when you instantiate one.
|
|
307
325
|
|
|
308
326
|
### PostgreSQL migration example
|
|
@@ -390,7 +408,7 @@ await migrator.migrateToLatest(pathToMigrationsFolder)
|
|
|
390
408
|
```
|
|
391
409
|
|
|
392
410
|
to run all migrations that have not yet been run. See the
|
|
393
|
-
[Migrator](https://
|
|
411
|
+
[Migrator](https://kysely-org.github.io/kysely/classes/Migrator.html)
|
|
394
412
|
class's documentation for more info.
|
|
395
413
|
|
|
396
414
|
Kysely doesn't have a CLI for running migrations and probably never will. This is because Kysely's
|
|
@@ -572,3 +590,7 @@ a library for typescript from the ground up produces much better and simpler typ
|
|
|
572
590
|
# How to contribute to Kysely
|
|
573
591
|
|
|
574
592
|
See [CONTRIBUTING.md](./CONTRIBUTING.md).
|
|
593
|
+
|
|
594
|
+
# Sponsors
|
|
595
|
+
|
|
596
|
+
<a href="https://vercel.com/?utm_source=kysely&utm_campaign=oss"><img src="https://kysely.dev/img/powered-by-vercel.svg" alt="Powered by Vercel" /></a>
|
|
@@ -19,10 +19,10 @@ class MysqlAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
|
|
|
19
19
|
// is released using `release_lock`. This way we know that the lock is either
|
|
20
20
|
// released by us after successfull or failed migrations OR it's released by
|
|
21
21
|
// MySQL if the process gets killed for some reason.
|
|
22
|
-
await (0, sql_js_1.sql) `select get_lock(${sql_js_1.sql.
|
|
22
|
+
await (0, sql_js_1.sql) `select get_lock(${sql_js_1.sql.lit(LOCK_ID)}, ${sql_js_1.sql.lit(LOCK_TIMEOUT_SECONDS)})`.execute(db);
|
|
23
23
|
}
|
|
24
24
|
async releaseMigrationLock(db) {
|
|
25
|
-
await (0, sql_js_1.sql) `select release_lock(${sql_js_1.sql.
|
|
25
|
+
await (0, sql_js_1.sql) `select release_lock(${sql_js_1.sql.lit(LOCK_ID)})`.execute(db);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
exports.MysqlAdapter = MysqlAdapter;
|
|
@@ -42,7 +42,7 @@ declare class MysqlConnection implements DatabaseConnection {
|
|
|
42
42
|
#private;
|
|
43
43
|
constructor(rawConnection: MysqlPoolConnection);
|
|
44
44
|
executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
|
|
45
|
-
streamQuery<O>(compiledQuery: CompiledQuery,
|
|
45
|
+
streamQuery<O>(compiledQuery: CompiledQuery, _chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
|
|
46
46
|
[PRIVATE_RELEASE_METHOD](): void;
|
|
47
47
|
}
|
|
48
48
|
export {};
|
|
@@ -127,7 +127,7 @@ class MysqlConnection {
|
|
|
127
127
|
});
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
|
-
async *streamQuery(compiledQuery,
|
|
130
|
+
async *streamQuery(compiledQuery, _chunkSize) {
|
|
131
131
|
const stream = this.#rawConnection
|
|
132
132
|
.query(compiledQuery.sql, compiledQuery.parameters)
|
|
133
133
|
.stream({
|
|
@@ -14,7 +14,7 @@ class PostgresAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
|
|
|
14
14
|
}
|
|
15
15
|
async acquireMigrationLock(db) {
|
|
16
16
|
// Acquire a transaction level advisory lock.
|
|
17
|
-
await (0, sql_js_1.sql) `select pg_advisory_xact_lock(${sql_js_1.sql.
|
|
17
|
+
await (0, sql_js_1.sql) `select pg_advisory_xact_lock(${sql_js_1.sql.lit(LOCK_ID)})`.execute(db);
|
|
18
18
|
}
|
|
19
19
|
async releaseMigrationLock() {
|
|
20
20
|
// Nothing to do here. `pg_advisory_xact_lock` is automatically released at the
|
|
@@ -76,7 +76,7 @@ class RuntimeDriver {
|
|
|
76
76
|
return await executeQuery.call(connection, compiledQuery);
|
|
77
77
|
}
|
|
78
78
|
catch (error) {
|
|
79
|
-
this.#logError(error);
|
|
79
|
+
this.#logError(error, compiledQuery, startTime);
|
|
80
80
|
throw error;
|
|
81
81
|
}
|
|
82
82
|
finally {
|
|
@@ -84,10 +84,12 @@ class RuntimeDriver {
|
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
-
#logError(error) {
|
|
87
|
+
#logError(error, compiledQuery, startTime) {
|
|
88
88
|
this.#log.error(() => ({
|
|
89
89
|
level: 'error',
|
|
90
90
|
error,
|
|
91
|
+
query: compiledQuery,
|
|
92
|
+
queryDurationMillis: this.#calculateDurationMillis(startTime),
|
|
91
93
|
}));
|
|
92
94
|
}
|
|
93
95
|
#logQuery(compiledQuery, startTime) {
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
|
+
import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
|
|
3
|
+
import { FunctionModule } from '../query-builder/function-module.js';
|
|
4
|
+
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
|
+
import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
|
+
import { Expression } from './expression.js';
|
|
8
|
+
import { ExpressionWrapper } from './expression-wrapper.js';
|
|
9
|
+
import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
|
|
10
|
+
import { SqlBool } from '../util/type-utils.js';
|
|
11
|
+
import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
|
|
12
|
+
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
13
|
+
/**
|
|
14
|
+
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
15
|
+
* calls.
|
|
16
|
+
*
|
|
17
|
+
* The difference between this and {@link Kysely.fn} is that this one is more
|
|
18
|
+
* type safe. You can only refer to columns visible to the part of the query
|
|
19
|
+
* you are building. {@link Kysely.fn} allows you to refer to columns in any
|
|
20
|
+
* table of the database even if it doesn't produce valid SQL.
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* await db.selectFrom('person')
|
|
24
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
25
|
+
* .select((eb) => [
|
|
26
|
+
* 'person.id',
|
|
27
|
+
* eb.fn.count('pet.id').as('pet_count')
|
|
28
|
+
* ])
|
|
29
|
+
* .groupBy('person.id')
|
|
30
|
+
* .having(count('pet.id'), '>', 10)
|
|
31
|
+
* .execute()
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* The generated SQL (PostgreSQL):
|
|
35
|
+
*
|
|
36
|
+
* ```sql
|
|
37
|
+
* select "person"."id", count("pet"."id") as "pet_count"
|
|
38
|
+
* from "person"
|
|
39
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
40
|
+
* group by "person"."id"
|
|
41
|
+
* having count("pet"."id") > $1
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
get fn(): FunctionModule<DB, TB>;
|
|
45
|
+
/**
|
|
46
|
+
* Creates a subquery.
|
|
47
|
+
*
|
|
48
|
+
* The query builder returned by this method is typed in a way that you can refer to
|
|
49
|
+
* all tables of the parent query in addition to the subquery's tables.
|
|
50
|
+
*
|
|
51
|
+
* This method accepts all the same inputs as {@link QueryCreator.selectFrom}.
|
|
52
|
+
*
|
|
53
|
+
* ### Examples
|
|
54
|
+
*
|
|
55
|
+
* This example shows that you can refer to both `pet.owner_id` and `person.id`
|
|
56
|
+
* columns from the subquery. This is needed to be able to create correlated
|
|
57
|
+
* subqueries:
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* const result = await db.selectFrom('pet')
|
|
61
|
+
* .select((eb) => [
|
|
62
|
+
* 'pet.name',
|
|
63
|
+
* eb.selectFrom('person')
|
|
64
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
65
|
+
* .select('person.first_name')
|
|
66
|
+
* .as('owner_name')
|
|
67
|
+
* ])
|
|
68
|
+
* .execute()
|
|
69
|
+
*
|
|
70
|
+
* console.log(result[0].owner_name)
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* The generated SQL (PostgreSQL):
|
|
74
|
+
*
|
|
75
|
+
* ```sql
|
|
76
|
+
* select
|
|
77
|
+
* "pet"."name",
|
|
78
|
+
* ( select "person"."first_name"
|
|
79
|
+
* from "person"
|
|
80
|
+
* where "person"."id" = "pet"."owner_id"
|
|
81
|
+
* ) as "owner_name"
|
|
82
|
+
* from "pet"
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* You can use a normal query in place of `(qb) => qb.selectFrom(...)` but in
|
|
86
|
+
* that case Kysely typings wouldn't allow you to reference `pet.owner_id`
|
|
87
|
+
* because `pet` is not joined to that query.
|
|
88
|
+
*/
|
|
89
|
+
selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
90
|
+
selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
91
|
+
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
92
|
+
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
93
|
+
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
94
|
+
/**
|
|
95
|
+
* This can be used to reference columns.
|
|
96
|
+
*
|
|
97
|
+
* ### Examples
|
|
98
|
+
*
|
|
99
|
+
* By default the third argument of {@link bxp} and {@link cmpr} is a value.
|
|
100
|
+
* This function can be used to pass in a column reference instead:
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* db.selectFrom('person')
|
|
104
|
+
* .selectAll('person')
|
|
105
|
+
* .where(({ or, cmpr, ref }) => or([
|
|
106
|
+
* cmpr('first_name', '=', ref('last_name')),
|
|
107
|
+
* cmpr('first_name', '=', ref('middle_name'))
|
|
108
|
+
* ]))
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* In the next example we use the `ref` method to reference
|
|
112
|
+
* columns of the virtual table `excluded` in a type-safe way
|
|
113
|
+
* to create an upsert operation:
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* db.insertInto('person')
|
|
117
|
+
* .values(person)
|
|
118
|
+
* .onConflict((oc) => oc
|
|
119
|
+
* .column('id')
|
|
120
|
+
* .doUpdateSet(({ ref }) => ({
|
|
121
|
+
* first_name: ref('excluded.first_name'),
|
|
122
|
+
* last_name: ref('excluded.last_name')
|
|
123
|
+
* }))
|
|
124
|
+
* )
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
128
|
+
* want to be as type-safe as possible, this is probably overkill:
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* db.update('pet').set((eb) => ({
|
|
132
|
+
* name: sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
133
|
+
* }))
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
137
|
+
/**
|
|
138
|
+
* Returns a value expression.
|
|
139
|
+
*
|
|
140
|
+
* This can be used to pass in a value where a reference is taken by default.
|
|
141
|
+
*
|
|
142
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
143
|
+
*
|
|
144
|
+
* ### Examples
|
|
145
|
+
*
|
|
146
|
+
* The {@link cmpr} function takes a reference by default as the first argument. `val` could
|
|
147
|
+
* be used to pass in a value instead:
|
|
148
|
+
*
|
|
149
|
+
* ```ts
|
|
150
|
+
* cmpr(val(38), '=', ref('age'))
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* The generated SQL (PostgreSQL):
|
|
154
|
+
*
|
|
155
|
+
* ```sql
|
|
156
|
+
* $1 = "age"
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
val<VE>(value: VE): ExpressionWrapper<ExtractTypeFromValueExpressionOrList<VE>>;
|
|
160
|
+
/**
|
|
161
|
+
* Creates a binary comparison expression.
|
|
162
|
+
*
|
|
163
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
164
|
+
* See the examples for a couple of possible use cases.
|
|
165
|
+
*
|
|
166
|
+
* @see {@link bxp}
|
|
167
|
+
*
|
|
168
|
+
* ### Examples
|
|
169
|
+
*
|
|
170
|
+
* In this example we use `cmpr` and {@link or} to create a `WHERE expr1 OR expr2 OR expr3`
|
|
171
|
+
* statement:
|
|
172
|
+
*
|
|
173
|
+
* ```ts
|
|
174
|
+
* db.selectFrom('person')
|
|
175
|
+
* .selectAll('person')
|
|
176
|
+
* .where(({ or, cmpr }) => or([
|
|
177
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
178
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
179
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
180
|
+
* ]))
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* The generated SQL (PostgreSQL):
|
|
184
|
+
*
|
|
185
|
+
* ```sql
|
|
186
|
+
* select "person".*
|
|
187
|
+
* from "person"
|
|
188
|
+
* where "first_name" = $1
|
|
189
|
+
* or "first_name" = $2
|
|
190
|
+
* or "first_name" = $3
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* By default the third argument is a value. {@link ref} can be used to
|
|
194
|
+
* pass in a column reference instead:
|
|
195
|
+
*
|
|
196
|
+
* ```ts
|
|
197
|
+
* db.selectFrom('person')
|
|
198
|
+
* .selectAll('person')
|
|
199
|
+
* .where(({ or, cmpr, ref }) => or([
|
|
200
|
+
* cmpr('first_name', '=', ref('last_name')),
|
|
201
|
+
* cmpr('first_name', '=', ref('middle_name'))
|
|
202
|
+
* ]))
|
|
203
|
+
* ```
|
|
204
|
+
*
|
|
205
|
+
* The generated SQL (PostgreSQL):
|
|
206
|
+
*
|
|
207
|
+
* ```sql
|
|
208
|
+
* select "person".*
|
|
209
|
+
* from "person"
|
|
210
|
+
* where "first_name" = "last_name"
|
|
211
|
+
* or "first_name" = "middle_name"
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<O>;
|
|
215
|
+
/**
|
|
216
|
+
* Creates a binary expression.
|
|
217
|
+
*
|
|
218
|
+
* See {@link cmpr} for creating binary comparison operations.
|
|
219
|
+
*
|
|
220
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
221
|
+
* See the examples for a couple of possible use cases.
|
|
222
|
+
*
|
|
223
|
+
* ### Examples
|
|
224
|
+
*
|
|
225
|
+
* In the following example `bxp` is used to increment an integer column:
|
|
226
|
+
*
|
|
227
|
+
* ```ts
|
|
228
|
+
* db.updateTable('person')
|
|
229
|
+
* .set((eb) => ({
|
|
230
|
+
* age: eb.bxp('age', '+', 1)
|
|
231
|
+
* }))
|
|
232
|
+
* .where('id', '=', id)
|
|
233
|
+
* ```
|
|
234
|
+
*
|
|
235
|
+
* The generated SQL (PostgreSQL):
|
|
236
|
+
*
|
|
237
|
+
* ```sql
|
|
238
|
+
* update "person"
|
|
239
|
+
* set "age" = "age" + $1
|
|
240
|
+
* where "id" = $2
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
243
|
+
* By default the third argument is a value. {@link ref} can be used to
|
|
244
|
+
* pass in a column reference instead:
|
|
245
|
+
*
|
|
246
|
+
* ```ts
|
|
247
|
+
* db.updateTable('person')
|
|
248
|
+
* .set((eb) => ({
|
|
249
|
+
* age: eb.bxp('age', '+', eb.ref('age'))
|
|
250
|
+
* }))
|
|
251
|
+
* .where('id', '=', id)
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* The generated SQL (PostgreSQL):
|
|
255
|
+
*
|
|
256
|
+
* ```sql
|
|
257
|
+
* update "person"
|
|
258
|
+
* set "age" = "age" + "age"
|
|
259
|
+
* where "id" = $1
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
263
|
+
/**
|
|
264
|
+
* Creates an unary expression.
|
|
265
|
+
*
|
|
266
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
267
|
+
* See the examples for a couple of possible use cases.
|
|
268
|
+
*
|
|
269
|
+
* @see {@link not}, {@link exists} and {@link neg}.
|
|
270
|
+
*
|
|
271
|
+
* ### Examples
|
|
272
|
+
*
|
|
273
|
+
* ```ts
|
|
274
|
+
* db.selectFrom('person')
|
|
275
|
+
* .select((eb) => [
|
|
276
|
+
* 'first_name',
|
|
277
|
+
* eb.unary('-', 'age').as('negative_age')
|
|
278
|
+
* ])
|
|
279
|
+
* ```
|
|
280
|
+
*
|
|
281
|
+
* The generated SQL (PostgreSQL):
|
|
282
|
+
*
|
|
283
|
+
* ```sql
|
|
284
|
+
* select "first_name", -"age"
|
|
285
|
+
* from "person"
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
289
|
+
/**
|
|
290
|
+
* Creates a `not` operation.
|
|
291
|
+
*
|
|
292
|
+
* A shortcut for `unary('not', expr)`.
|
|
293
|
+
*
|
|
294
|
+
* @see {@link unary}
|
|
295
|
+
*/
|
|
296
|
+
not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
297
|
+
/**
|
|
298
|
+
* Creates an `exists` operation.
|
|
299
|
+
*
|
|
300
|
+
* A shortcut for `unary('exists', expr)`.
|
|
301
|
+
*
|
|
302
|
+
* @see {@link unary}
|
|
303
|
+
*/
|
|
304
|
+
exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<SqlBool>;
|
|
305
|
+
/**
|
|
306
|
+
* Creates a negation operation.
|
|
307
|
+
*
|
|
308
|
+
* A shortcut for `unary('-', expr)`.
|
|
309
|
+
*
|
|
310
|
+
* @see {@link unary}
|
|
311
|
+
*/
|
|
312
|
+
neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
313
|
+
/**
|
|
314
|
+
* Combines two or more expressions using the logical `and` operator.
|
|
315
|
+
*
|
|
316
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
317
|
+
* See the examples for a couple of possible use cases.
|
|
318
|
+
*
|
|
319
|
+
* ### Examples
|
|
320
|
+
*
|
|
321
|
+
* In this example we use `and` with {@link cmpr} to create a `WHERE expr1 AND expr2 AND expr3`
|
|
322
|
+
* statement:
|
|
323
|
+
*
|
|
324
|
+
* ```ts
|
|
325
|
+
* db.selectFrom('person')
|
|
326
|
+
* .selectAll('person')
|
|
327
|
+
* .where(({ and, cmpr }) => and([
|
|
328
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
329
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
330
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
331
|
+
* ]))
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* The generated SQL (PostgreSQL):
|
|
335
|
+
*
|
|
336
|
+
* ```sql
|
|
337
|
+
* select "person".*
|
|
338
|
+
* from "person"
|
|
339
|
+
* where "first_name" = $1
|
|
340
|
+
* and "first_name" = $2
|
|
341
|
+
* and "first_name" = $3
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
344
|
+
and(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
|
|
345
|
+
/**
|
|
346
|
+
* Combines two or more expressions using the logical `or` operator.
|
|
347
|
+
*
|
|
348
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
349
|
+
* See the examples for a couple of possible use cases.
|
|
350
|
+
*
|
|
351
|
+
* ### Examples
|
|
352
|
+
*
|
|
353
|
+
* In this example we use `or` with {@link cmpr} to create a `WHERE expr1 OR expr2 OR expr3`
|
|
354
|
+
* statement:
|
|
355
|
+
*
|
|
356
|
+
* ```ts
|
|
357
|
+
* db.selectFrom('person')
|
|
358
|
+
* .selectAll('person')
|
|
359
|
+
* .where(({ or, cmpr }) => or([
|
|
360
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
361
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
362
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
363
|
+
* ]))
|
|
364
|
+
* ```
|
|
365
|
+
*
|
|
366
|
+
* The generated SQL (PostgreSQL):
|
|
367
|
+
*
|
|
368
|
+
* ```sql
|
|
369
|
+
* select "person".*
|
|
370
|
+
* from "person"
|
|
371
|
+
* where "first_name" = $1
|
|
372
|
+
* or "first_name" = $2
|
|
373
|
+
* or "first_name" = $3
|
|
374
|
+
* ```
|
|
375
|
+
*/
|
|
376
|
+
or(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
|
|
377
|
+
/**
|
|
378
|
+
* See {@link QueryCreator.withSchema}
|
|
379
|
+
*
|
|
380
|
+
* @deprecated Will be removed in kysely 0.25.0.
|
|
381
|
+
*/
|
|
382
|
+
withSchema(schema: string): ExpressionBuilder<DB, TB>;
|
|
383
|
+
}
|
|
384
|
+
export declare function createExpressionBuilder<DB, TB extends keyof DB>(executor?: QueryExecutor): ExpressionBuilder<DB, TB>;
|
|
385
|
+
export declare function expressionBuilder<DB, TB extends keyof DB>(_: SelectQueryBuilder<DB, TB, any>): ExpressionBuilder<DB, TB>;
|
|
386
|
+
export declare function expressionBuilder<DB, TB extends keyof DB>(): ExpressionBuilder<DB, TB>;
|