kysely 0.23.4 → 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 +49 -25
- package/dist/cjs/dialect/database-introspector.d.ts +4 -2
- 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/mysql/mysql-introspector.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +19 -13
- package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -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/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +6 -5
- 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 -2
- package/dist/cjs/operation-node/aggregate-function-node.js +2 -2
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
- package/dist/cjs/operation-node/delete-query-node.js +2 -8
- 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 +11 -2
- 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 +4 -4
- 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 +6 -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/camel-case/camel-case-plugin.d.ts +7 -0
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +10 -4
- 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 +224 -205
- 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 +304 -42
- package/dist/cjs/query-builder/function-module.js +44 -208
- package/dist/cjs/query-builder/having-interface.d.ts +19 -16
- package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -30
- package/dist/cjs/query-builder/insert-query-builder.js +21 -30
- 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 +155 -243
- package/dist/cjs/query-builder/select-query-builder.js +333 -78
- package/dist/cjs/query-builder/update-query-builder.d.ts +149 -217
- 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 +18 -2
- package/dist/cjs/query-creator.d.ts +38 -2
- package/dist/cjs/query-creator.js +3 -45
- 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 +6 -4
- package/dist/esm/dialect/database-introspector.d.ts +4 -2
- 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/mysql/mysql-introspector.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +19 -13
- package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +3 -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/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +6 -5
- 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 -2
- package/dist/esm/operation-node/aggregate-function-node.js +2 -2
- package/dist/esm/operation-node/create-index-node.d.ts +2 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
- package/dist/esm/operation-node/delete-query-node.js +2 -8
- 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 +11 -2
- 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 +5 -5
- 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 +6 -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/camel-case/camel-case-plugin.d.ts +7 -0
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +10 -4
- 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 +224 -205
- 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 +304 -42
- package/dist/esm/query-builder/function-module.js +43 -207
- package/dist/esm/query-builder/having-interface.d.ts +19 -16
- package/dist/esm/query-builder/insert-query-builder.d.ts +78 -30
- package/dist/esm/query-builder/insert-query-builder.js +25 -34
- 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 +155 -243
- package/dist/esm/query-builder/select-query-builder.js +337 -82
- package/dist/esm/query-builder/update-query-builder.d.ts +149 -217
- 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 +18 -2
- package/dist/esm/query-creator.d.ts +38 -2
- package/dist/esm/query-creator.js +3 -45
- 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 +6 -4
- 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
|
@@ -11,7 +11,6 @@ const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
|
11
11
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
12
12
|
const update_result_js_1 = require("./update-result.js");
|
|
13
13
|
const no_result_error_js_1 = require("./no-result-error.js");
|
|
14
|
-
const explain_node_js_1 = require("../operation-node/explain-node.js");
|
|
15
14
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
16
15
|
const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
|
|
17
16
|
class UpdateQueryBuilder {
|
|
@@ -28,7 +27,7 @@ class UpdateQueryBuilder {
|
|
|
28
27
|
whereRef(lhs, op, rhs) {
|
|
29
28
|
return new UpdateQueryBuilder({
|
|
30
29
|
...this.#props,
|
|
31
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
30
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
33
|
orWhere(...args) {
|
|
@@ -40,7 +39,7 @@ class UpdateQueryBuilder {
|
|
|
40
39
|
orWhereRef(lhs, op, rhs) {
|
|
41
40
|
return new UpdateQueryBuilder({
|
|
42
41
|
...this.#props,
|
|
43
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
42
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
45
|
whereExists(arg) {
|
|
@@ -103,103 +102,16 @@ class UpdateQueryBuilder {
|
|
|
103
102
|
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)),
|
|
104
103
|
});
|
|
105
104
|
}
|
|
106
|
-
|
|
107
|
-
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
108
|
-
*
|
|
109
|
-
* This method takes an object whose keys are column names and values are
|
|
110
|
-
* values to update. In addition to the column's type, the values can be
|
|
111
|
-
* raw {@link sql} snippets or select queries.
|
|
112
|
-
*
|
|
113
|
-
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
114
|
-
* You can use the {@link returning} method on supported databases to get out
|
|
115
|
-
* the updated rows.
|
|
116
|
-
*
|
|
117
|
-
* ### Examples
|
|
118
|
-
*
|
|
119
|
-
* Update a row in `person` table:
|
|
120
|
-
*
|
|
121
|
-
* ```ts
|
|
122
|
-
* const result = await db
|
|
123
|
-
* .updateTable('person')
|
|
124
|
-
* .set({
|
|
125
|
-
* first_name: 'Jennifer',
|
|
126
|
-
* last_name: 'Aniston'
|
|
127
|
-
* })
|
|
128
|
-
* .where('id', '=', 1)
|
|
129
|
-
* .executeTakeFirst()
|
|
130
|
-
*
|
|
131
|
-
* console.log(result.numUpdatedRows)
|
|
132
|
-
* ```
|
|
133
|
-
*
|
|
134
|
-
* The generated SQL (PostgreSQL):
|
|
135
|
-
*
|
|
136
|
-
* ```sql
|
|
137
|
-
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
138
|
-
* ```
|
|
139
|
-
*
|
|
140
|
-
* On PostgreSQL you ca chain `returning` to the query to get
|
|
141
|
-
* the updated rows' columns (or any other expression) as the
|
|
142
|
-
* return value:
|
|
143
|
-
*
|
|
144
|
-
* ```ts
|
|
145
|
-
* const row = await db
|
|
146
|
-
* .updateTable('person')
|
|
147
|
-
* .set({
|
|
148
|
-
* first_name: 'Jennifer',
|
|
149
|
-
* last_name: 'Aniston'
|
|
150
|
-
* })
|
|
151
|
-
* .where('id', '=', 1)
|
|
152
|
-
* .returning('id')
|
|
153
|
-
* .executeTakeFirstOrThrow()
|
|
154
|
-
*
|
|
155
|
-
* row.id
|
|
156
|
-
* ```
|
|
157
|
-
*
|
|
158
|
-
* The generated SQL (PostgreSQL):
|
|
159
|
-
*
|
|
160
|
-
* ```sql
|
|
161
|
-
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
162
|
-
* ```
|
|
163
|
-
*
|
|
164
|
-
* In addition to primitives, the values can also be raw sql expressions or
|
|
165
|
-
* select queries:
|
|
166
|
-
*
|
|
167
|
-
* ```ts
|
|
168
|
-
* import { sql } from 'kysely'
|
|
169
|
-
*
|
|
170
|
-
* const result = await db
|
|
171
|
-
* .updateTable('person')
|
|
172
|
-
* .set({
|
|
173
|
-
* first_name: 'Jennifer',
|
|
174
|
-
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
175
|
-
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
176
|
-
* })
|
|
177
|
-
* .where('id', '=', 1)
|
|
178
|
-
* .executeTakeFirst()
|
|
179
|
-
*
|
|
180
|
-
* console.log(result.numUpdatedRows)
|
|
181
|
-
* ```
|
|
182
|
-
*
|
|
183
|
-
* The generated SQL (PostgreSQL):
|
|
184
|
-
*
|
|
185
|
-
* ```sql
|
|
186
|
-
* update "person" set
|
|
187
|
-
* "first_name" = $1,
|
|
188
|
-
* "last_name" = $2 || $3,
|
|
189
|
-
* "age" = (select avg(age) from "person")
|
|
190
|
-
* where "id" = $4
|
|
191
|
-
* ```
|
|
192
|
-
*/
|
|
193
|
-
set(row) {
|
|
105
|
+
set(update) {
|
|
194
106
|
return new UpdateQueryBuilder({
|
|
195
107
|
...this.#props,
|
|
196
|
-
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.
|
|
108
|
+
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateExpression)(update)),
|
|
197
109
|
});
|
|
198
110
|
}
|
|
199
111
|
returning(selection) {
|
|
200
112
|
return new UpdateQueryBuilder({
|
|
201
113
|
...this.#props,
|
|
202
|
-
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.
|
|
114
|
+
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(selection)),
|
|
203
115
|
});
|
|
204
116
|
}
|
|
205
117
|
returningAll() {
|
|
@@ -209,7 +121,8 @@ class UpdateQueryBuilder {
|
|
|
209
121
|
});
|
|
210
122
|
}
|
|
211
123
|
/**
|
|
212
|
-
* Simply calls the
|
|
124
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
125
|
+
* what the provided function returns.
|
|
213
126
|
*
|
|
214
127
|
* If you want to conditionally call a method on `this`, see
|
|
215
128
|
* the {@link $if} method.
|
|
@@ -386,7 +299,7 @@ class UpdateQueryBuilder {
|
|
|
386
299
|
return [
|
|
387
300
|
new update_result_js_1.UpdateResult(
|
|
388
301
|
// TODO: remove numUpdatedOrDeletedRows.
|
|
389
|
-
|
|
302
|
+
result.numAffectedRows ?? result.numUpdatedOrDeletedRows ?? BigInt(0)),
|
|
390
303
|
];
|
|
391
304
|
}
|
|
392
305
|
/**
|
|
@@ -402,37 +315,30 @@ class UpdateQueryBuilder {
|
|
|
402
315
|
* the query returned no result.
|
|
403
316
|
*
|
|
404
317
|
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
405
|
-
* provide a custom error class as the only argument to throw a different
|
|
318
|
+
* provide a custom error class, or callback as the only argument to throw a different
|
|
406
319
|
* error.
|
|
407
320
|
*/
|
|
408
321
|
async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
|
|
409
322
|
const result = await this.executeTakeFirst();
|
|
410
323
|
if (result === undefined) {
|
|
411
|
-
|
|
324
|
+
const error = (0, no_result_error_js_1.isNoResultErrorConstructor)(errorConstructor)
|
|
325
|
+
? new errorConstructor(this.toOperationNode())
|
|
326
|
+
: errorConstructor(this.toOperationNode());
|
|
327
|
+
throw error;
|
|
412
328
|
}
|
|
413
329
|
return result;
|
|
414
330
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
* .where('id', '=', 123)
|
|
423
|
-
* .explain('json')
|
|
424
|
-
* ```
|
|
425
|
-
*
|
|
426
|
-
* The generated SQL (MySQL):
|
|
427
|
-
*
|
|
428
|
-
* ```sql
|
|
429
|
-
* explain format=json update `person` set `first_name` = ?, `last_name` = ? where `id` = ?
|
|
430
|
-
* ```
|
|
431
|
-
*/
|
|
331
|
+
async *stream(chunkSize = 100) {
|
|
332
|
+
const compiledQuery = this.compile();
|
|
333
|
+
const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
|
|
334
|
+
for await (const item of stream) {
|
|
335
|
+
yield* item.rows;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
432
338
|
async explain(format, options) {
|
|
433
339
|
const builder = new UpdateQueryBuilder({
|
|
434
340
|
...this.#props,
|
|
435
|
-
queryNode:
|
|
341
|
+
queryNode: query_node_js_1.QueryNode.cloneWithExplain(this.#props.queryNode, format, options),
|
|
436
342
|
});
|
|
437
343
|
return await builder.execute();
|
|
438
344
|
}
|
|
@@ -1,56 +1,42 @@
|
|
|
1
1
|
import { Expression } from '../expression/expression.js';
|
|
2
|
-
import { ComparisonOperatorExpression, OperandValueExpressionOrList
|
|
2
|
+
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
3
3
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
4
4
|
import { ExistsExpression } from '../parser/unary-operation-parser.js';
|
|
5
|
+
import { SqlBool } from '../util/type-utils.js';
|
|
6
|
+
import { WhereExpressionBuilder } from './deprecated-where-expression-builder.js';
|
|
5
7
|
export interface WhereInterface<DB, TB extends keyof DB> {
|
|
6
8
|
/**
|
|
7
|
-
* Adds a `where`
|
|
9
|
+
* Adds a `where` expression to the query.
|
|
8
10
|
*
|
|
9
|
-
*
|
|
11
|
+
* Calling this method multiple times will combine the expressions using `and`.
|
|
10
12
|
*
|
|
11
|
-
*
|
|
13
|
+
* Also see {@link whereRef}
|
|
12
14
|
*
|
|
13
|
-
*
|
|
15
|
+
* ### Examples
|
|
14
16
|
*
|
|
15
17
|
* ```ts
|
|
16
18
|
* const person = await db
|
|
17
19
|
* .selectFrom('person')
|
|
18
20
|
* .selectAll()
|
|
19
|
-
* .where('
|
|
21
|
+
* .where('first_name', '=', 'Jennifer')
|
|
22
|
+
* .where('age', '>', 40)
|
|
20
23
|
* .executeTakeFirst()
|
|
21
24
|
* ```
|
|
22
25
|
*
|
|
23
26
|
* The generated SQL (PostgreSQL):
|
|
24
27
|
*
|
|
25
28
|
* ```sql
|
|
26
|
-
* select * from "person" where "
|
|
29
|
+
* select * from "person" where "first_name" = $1 and "age" > $2
|
|
27
30
|
* ```
|
|
28
31
|
*
|
|
29
32
|
* Operator can be any supported operator or if the typings don't support it
|
|
30
|
-
* you can always use
|
|
33
|
+
* you can always use:
|
|
31
34
|
*
|
|
32
35
|
* ```ts
|
|
33
36
|
* sql`your operator`
|
|
34
37
|
* ```
|
|
35
38
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* ```ts
|
|
39
|
-
* const persons = await db
|
|
40
|
-
* .selectFrom('person')
|
|
41
|
-
* .selectAll()
|
|
42
|
-
* .where('id', '>', 100)
|
|
43
|
-
* .execute()
|
|
44
|
-
* ```
|
|
45
|
-
*
|
|
46
|
-
* The generated SQL (PostgreSQL):
|
|
47
|
-
*
|
|
48
|
-
* ```sql
|
|
49
|
-
* select * from "person" where "id" > $1
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
* `where` methods don't change the type of the query. You can add
|
|
53
|
-
* conditional statements easily by doing something like this:
|
|
39
|
+
* You can add expressions conditionally like this:
|
|
54
40
|
*
|
|
55
41
|
* ```ts
|
|
56
42
|
* let query = db
|
|
@@ -63,16 +49,16 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
63
49
|
* query = query.where('first_name', '=', firstName)
|
|
64
50
|
* }
|
|
65
51
|
*
|
|
52
|
+
* if (lastName) {
|
|
53
|
+
* query = query.where('last_name', '=', lastName)
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
66
56
|
* const persons = await query.execute()
|
|
67
57
|
* ```
|
|
68
58
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* Both the first and third argument can also be subqueries.
|
|
73
|
-
* A subquery is defined by passing a function and calling
|
|
74
|
-
* the `selectFrom` method of the object passed into the
|
|
75
|
-
* function:
|
|
59
|
+
* Both the first and third argument can also be arbitrary expressions like
|
|
60
|
+
* subqueries. An expression can defined by passing a function and calling
|
|
61
|
+
* the methods of the {@link ExpressionBuilder} passed to the callback:
|
|
76
62
|
*
|
|
77
63
|
* ```ts
|
|
78
64
|
* const persons = await db
|
|
@@ -103,8 +89,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
103
89
|
* ```
|
|
104
90
|
*
|
|
105
91
|
* A `where in` query can be built by using the `in` operator and an array
|
|
106
|
-
* of values. The values in the array can also be
|
|
107
|
-
* {@link sql} expressions.
|
|
92
|
+
* of values. The values in the array can also be expressions:
|
|
108
93
|
*
|
|
109
94
|
* ```ts
|
|
110
95
|
* const persons = await db
|
|
@@ -120,40 +105,53 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
120
105
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
121
106
|
* ```
|
|
122
107
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
108
|
+
* For complex `where` expressions you can pass in a single callback and
|
|
109
|
+
* use the {@link ExpressionBuilder} to build your expression:
|
|
125
110
|
*
|
|
126
111
|
* ```ts
|
|
127
|
-
* import { sql } from 'kysely'
|
|
128
|
-
*
|
|
129
112
|
* const persons = await db
|
|
130
113
|
* .selectFrom('person')
|
|
131
|
-
* .selectAll()
|
|
132
|
-
* .where(
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
114
|
+
* .selectAll('person')
|
|
115
|
+
* .where(({ cmpr, or, and, not, exists, selectFrom, val }) => and([
|
|
116
|
+
* or([
|
|
117
|
+
* cmpr('first_name', '=', firstName),
|
|
118
|
+
* cmpr('age', '<', maxAge)
|
|
119
|
+
* ]),
|
|
120
|
+
* not(exists(
|
|
121
|
+
* selectFrom('pet').select('pet.id').whereRef('pet.owner_id', '=', 'person.id')
|
|
122
|
+
* ))
|
|
123
|
+
* ]))
|
|
138
124
|
* ```
|
|
139
125
|
*
|
|
140
126
|
* The generated SQL (PostgreSQL):
|
|
141
127
|
*
|
|
142
128
|
* ```sql
|
|
143
|
-
* select
|
|
144
|
-
*
|
|
129
|
+
* select "person".*
|
|
130
|
+
* from "person"
|
|
131
|
+
* where (
|
|
132
|
+
* (
|
|
133
|
+
* "first_name" = $1
|
|
134
|
+
* or "age" < $2
|
|
135
|
+
* )
|
|
136
|
+
* and not exists (
|
|
137
|
+
* select "pet"."id" from "pet" where "pet"."owner_id" = "person"."id"
|
|
138
|
+
* )
|
|
139
|
+
* )
|
|
145
140
|
* ```
|
|
146
141
|
*
|
|
147
|
-
* If
|
|
148
|
-
*
|
|
142
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
143
|
+
* as any of the arguments, including the operator:
|
|
149
144
|
*
|
|
150
145
|
* ```ts
|
|
146
|
+
* import { sql } from 'kysely'
|
|
147
|
+
*
|
|
151
148
|
* const persons = await db
|
|
152
149
|
* .selectFrom('person')
|
|
153
150
|
* .selectAll()
|
|
154
|
-
* .where(
|
|
155
|
-
*
|
|
156
|
-
*
|
|
151
|
+
* .where(
|
|
152
|
+
* sql`coalesce(first_name, last_name)`,
|
|
153
|
+
* 'like',
|
|
154
|
+
* '%' + name + '%',
|
|
157
155
|
* )
|
|
158
156
|
* .execute()
|
|
159
157
|
* ```
|
|
@@ -161,7 +159,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
161
159
|
* The generated SQL (PostgreSQL):
|
|
162
160
|
*
|
|
163
161
|
* ```sql
|
|
164
|
-
* select * from "person"
|
|
162
|
+
* select * from "person"
|
|
163
|
+
* where coalesce(first_name, last_name) like $1
|
|
165
164
|
* ```
|
|
166
165
|
*
|
|
167
166
|
* In all examples above the columns were known at compile time
|
|
@@ -183,12 +182,12 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
183
182
|
* .selectFrom('person')
|
|
184
183
|
* .selectAll()
|
|
185
184
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
186
|
-
* .
|
|
185
|
+
* .where(sql.id(columnFromUserInput), '=', 2)
|
|
187
186
|
* .execute()
|
|
188
187
|
* ```
|
|
189
188
|
*/
|
|
190
189
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
|
|
191
|
-
where(
|
|
190
|
+
where(factory: WhereExpressionFactory<DB, TB>): WhereInterface<DB, TB>;
|
|
192
191
|
where(expression: Expression<any>): WhereInterface<DB, TB>;
|
|
193
192
|
/**
|
|
194
193
|
* Adds a `where` clause where both sides of the operator are references
|
|
@@ -220,7 +219,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
220
219
|
* const persons = await db
|
|
221
220
|
* .selectFrom('person')
|
|
222
221
|
* .selectAll('person')
|
|
223
|
-
* .select((
|
|
222
|
+
* .select((eb) => eb
|
|
224
223
|
* .selectFrom('pet')
|
|
225
224
|
* .select('name')
|
|
226
225
|
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
@@ -243,152 +242,39 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
243
242
|
*/
|
|
244
243
|
whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
245
244
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* It's often necessary to wrap `or where` clauses in parentheses to control
|
|
249
|
-
* precendence. You can use the one argument version of the `where` method
|
|
250
|
-
* for that. See the examples.
|
|
251
|
-
*
|
|
252
|
-
* ### Examples
|
|
253
|
-
*
|
|
254
|
-
* ```ts
|
|
255
|
-
* const persons = await db
|
|
256
|
-
* .selectFrom('person')
|
|
257
|
-
* .selectAll()
|
|
258
|
-
* .where('id', '=', 1)
|
|
259
|
-
* .orWhere('id', '=', 2)
|
|
260
|
-
* .execute()
|
|
261
|
-
* ```
|
|
262
|
-
*
|
|
263
|
-
* The generated SQL (PostgreSQL):
|
|
264
|
-
*
|
|
265
|
-
* ```sql
|
|
266
|
-
* select * from "person" where "id" = 1 or "id" = 2
|
|
267
|
-
* ```
|
|
268
|
-
*
|
|
269
|
-
* Grouping with parentheses:
|
|
270
|
-
*
|
|
271
|
-
* ```ts
|
|
272
|
-
* const persons = await db
|
|
273
|
-
* .selectFrom('person')
|
|
274
|
-
* .selectAll()
|
|
275
|
-
* .where((qb) => qb
|
|
276
|
-
* .where('id', '=', 1)
|
|
277
|
-
* .orWhere('id', '=', 2)
|
|
278
|
-
* )
|
|
279
|
-
* .execute()
|
|
280
|
-
* ```
|
|
281
|
-
*
|
|
282
|
-
* The generated SQL (PostgreSQL):
|
|
283
|
-
*
|
|
284
|
-
* ```sql
|
|
285
|
-
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
286
|
-
* ```
|
|
287
|
-
*
|
|
288
|
-
* Even the first `where` can be an `orWhere`. This is useful
|
|
289
|
-
* if you are looping through a set of conditions:
|
|
290
|
-
*
|
|
291
|
-
* ```ts
|
|
292
|
-
* const persons = await db
|
|
293
|
-
* .selectFrom('person')
|
|
294
|
-
* .selectAll()
|
|
295
|
-
* .where((qb) => qb
|
|
296
|
-
* .orWhere('id', '=', 1)
|
|
297
|
-
* .orWhere('id', '=', 2)
|
|
298
|
-
* )
|
|
299
|
-
* .execute()
|
|
300
|
-
* ```
|
|
301
|
-
*
|
|
302
|
-
* The generated SQL (PostgreSQL):
|
|
303
|
-
*
|
|
304
|
-
* ```sql
|
|
305
|
-
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
306
|
-
* ```
|
|
245
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
307
246
|
*/
|
|
308
247
|
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
|
|
309
|
-
|
|
248
|
+
/**
|
|
249
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
250
|
+
*/
|
|
251
|
+
orWhere(factory: WhereExpressionFactory<DB, TB>): WhereInterface<DB, TB>;
|
|
252
|
+
/**
|
|
253
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
254
|
+
*/
|
|
310
255
|
orWhere(expression: Expression<any>): WhereInterface<DB, TB>;
|
|
311
256
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
* Also see {@link orWhere} and {@link where}.
|
|
257
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
315
258
|
*/
|
|
316
259
|
orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
317
260
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
* You can either use a subquery or a raw {@link sql} snippet.
|
|
321
|
-
*
|
|
322
|
-
* ### Examples
|
|
323
|
-
*
|
|
324
|
-
* The query below selets all persons that own a pet named Catto:
|
|
325
|
-
*
|
|
326
|
-
* ```ts
|
|
327
|
-
* const petName = 'Catto'
|
|
328
|
-
* const persons = await db
|
|
329
|
-
* .selectFrom('person')
|
|
330
|
-
* .selectAll()
|
|
331
|
-
* .whereExists((qb) => qb
|
|
332
|
-
* .selectFrom('pet')
|
|
333
|
-
* .select('pet.id')
|
|
334
|
-
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
335
|
-
* .where('pet.name', '=', petName)
|
|
336
|
-
* )
|
|
337
|
-
* .execute()
|
|
338
|
-
* ```
|
|
339
|
-
*
|
|
340
|
-
* The generated SQL (PostgreSQL):
|
|
341
|
-
*
|
|
342
|
-
* ```sql
|
|
343
|
-
* select * from "person"
|
|
344
|
-
* where exists (
|
|
345
|
-
* select "pet"."id"
|
|
346
|
-
* from "pet"
|
|
347
|
-
* where "person"."id" = "pet"."owner_id"
|
|
348
|
-
* and "pet"."name" = $1
|
|
349
|
-
* )
|
|
350
|
-
* ```
|
|
351
|
-
*
|
|
352
|
-
* The same query as in the previous example but with using raw {@link sql}:
|
|
353
|
-
*
|
|
354
|
-
* ```ts
|
|
355
|
-
* import { sql } from 'kysely'
|
|
356
|
-
*
|
|
357
|
-
* const petName = 'Catto'
|
|
358
|
-
* db.selectFrom('person')
|
|
359
|
-
* .selectAll()
|
|
360
|
-
* .whereExists(
|
|
361
|
-
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
362
|
-
* )
|
|
363
|
-
* ```
|
|
364
|
-
*
|
|
365
|
-
* The generated SQL (PostgreSQL):
|
|
366
|
-
*
|
|
367
|
-
* ```sql
|
|
368
|
-
* select * from "person"
|
|
369
|
-
* where exists (
|
|
370
|
-
* select pet.id
|
|
371
|
-
* from pet
|
|
372
|
-
* where person.id = pet.owner_id
|
|
373
|
-
* and pet.name = $1
|
|
374
|
-
* )
|
|
375
|
-
* ```
|
|
261
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
376
262
|
*/
|
|
377
263
|
whereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
378
264
|
/**
|
|
379
|
-
*
|
|
265
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
380
266
|
*/
|
|
381
267
|
whereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
382
268
|
/**
|
|
383
|
-
*
|
|
269
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
384
270
|
*/
|
|
385
271
|
orWhereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
386
272
|
/**
|
|
387
|
-
*
|
|
273
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
388
274
|
*/
|
|
389
275
|
orWhereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
390
276
|
/**
|
|
391
|
-
* Clears all where
|
|
277
|
+
* Clears all where expressions from the query.
|
|
392
278
|
*
|
|
393
279
|
* ### Examples
|
|
394
280
|
*
|
|
@@ -407,3 +293,4 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
407
293
|
*/
|
|
408
294
|
clearWhere(): WhereInterface<DB, TB>;
|
|
409
295
|
}
|
|
296
|
+
export declare type WhereExpressionFactory<DB, TB extends keyof DB> = (eb: WhereExpressionBuilder<DB, TB>) => Expression<SqlBool> | WhereExpressionBuilder<DB, TB>;
|
|
@@ -80,6 +80,7 @@ import { SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
|
80
80
|
import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
|
|
81
81
|
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
|
|
82
82
|
import { UsingNode } from '../operation-node/using-node.js';
|
|
83
|
+
import { FunctionNode } from '../operation-node/function-node.js';
|
|
83
84
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
84
85
|
#private;
|
|
85
86
|
protected get numParameters(): number;
|
|
@@ -166,7 +167,9 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
166
167
|
protected visitPartitionByItem(node: PartitionByItemNode): void;
|
|
167
168
|
protected visitBinaryOperation(node: BinaryOperationNode): void;
|
|
168
169
|
protected visitUnaryOperation(node: UnaryOperationNode): void;
|
|
170
|
+
protected isMinusOperator(node: OperationNode): node is OperatorNode;
|
|
169
171
|
protected visitUsing(node: UsingNode): void;
|
|
172
|
+
protected visitFunction(node: FunctionNode): void;
|
|
170
173
|
protected append(str: string): void;
|
|
171
174
|
protected appendValue(parameter: unknown): void;
|
|
172
175
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DefaultQueryCompiler = void 0;
|
|
4
4
|
const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
|
|
5
5
|
const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
|
|
6
|
+
const operator_node_js_1 = require("../operation-node/operator-node.js");
|
|
6
7
|
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
7
8
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
8
9
|
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
@@ -552,6 +553,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
552
553
|
this.visitNode(node.expression);
|
|
553
554
|
this.append(')');
|
|
554
555
|
}
|
|
556
|
+
if (node.where) {
|
|
557
|
+
this.append(' ');
|
|
558
|
+
this.visitNode(node.where);
|
|
559
|
+
}
|
|
555
560
|
}
|
|
556
561
|
visitDropIndex(node) {
|
|
557
562
|
this.append('drop index ');
|
|
@@ -864,7 +869,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
864
869
|
if (node.distinct) {
|
|
865
870
|
this.append('distinct ');
|
|
866
871
|
}
|
|
867
|
-
this.visitNode(node.
|
|
872
|
+
this.visitNode(node.aggregated);
|
|
868
873
|
this.append(')');
|
|
869
874
|
if (node.filter) {
|
|
870
875
|
this.append(' filter(');
|
|
@@ -905,13 +910,24 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
905
910
|
}
|
|
906
911
|
visitUnaryOperation(node) {
|
|
907
912
|
this.visitNode(node.operator);
|
|
908
|
-
this.
|
|
913
|
+
if (!this.isMinusOperator(node.operator)) {
|
|
914
|
+
this.append(' ');
|
|
915
|
+
}
|
|
909
916
|
this.visitNode(node.operand);
|
|
910
917
|
}
|
|
918
|
+
isMinusOperator(node) {
|
|
919
|
+
return operator_node_js_1.OperatorNode.is(node) && node.operator === '-';
|
|
920
|
+
}
|
|
911
921
|
visitUsing(node) {
|
|
912
922
|
this.append('using ');
|
|
913
923
|
this.compileList(node.tables);
|
|
914
924
|
}
|
|
925
|
+
visitFunction(node) {
|
|
926
|
+
this.append(node.func);
|
|
927
|
+
this.append('(');
|
|
928
|
+
this.compileList(node.arguments);
|
|
929
|
+
this.append(')');
|
|
930
|
+
}
|
|
915
931
|
append(str) {
|
|
916
932
|
this.#sql += str;
|
|
917
933
|
}
|