kysely 0.23.5 → 0.24.1
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/mysql.d.ts +140 -0
- package/dist/cjs/helpers/mysql.js +170 -0
- 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/mysql.d.ts +140 -0
- package/dist/esm/helpers/mysql.js +165 -0
- 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/mysql.d.ts +1 -0
- package/helpers/mysql.js +1 -0
- package/helpers/postgres.d.ts +1 -0
- package/helpers/postgres.js +1 -0
- package/package.json +26 -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
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
/// <reference types="./update-query-builder.d.ts" />
|
|
2
2
|
import { parseJoin, } from '../parser/join-parser.js';
|
|
3
3
|
import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
4
|
-
import {
|
|
4
|
+
import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
|
|
5
5
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
6
6
|
import { UpdateQueryNode } from '../operation-node/update-query-node.js';
|
|
7
|
-
import {
|
|
7
|
+
import { parseUpdateExpression, } from '../parser/update-set-parser.js';
|
|
8
8
|
import { preventAwait } from '../util/prevent-await.js';
|
|
9
9
|
import { freeze } from '../util/object-utils.js';
|
|
10
10
|
import { UpdateResult } from './update-result.js';
|
|
11
|
-
import { NoResultError } from './no-result-error.js';
|
|
12
|
-
import {
|
|
13
|
-
import { parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
|
|
11
|
+
import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
|
|
12
|
+
import { parseReferentialComparison, parseWhere, } from '../parser/binary-operation-parser.js';
|
|
14
13
|
import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
|
|
15
14
|
export class UpdateQueryBuilder {
|
|
16
15
|
#props;
|
|
@@ -26,7 +25,7 @@ export class UpdateQueryBuilder {
|
|
|
26
25
|
whereRef(lhs, op, rhs) {
|
|
27
26
|
return new UpdateQueryBuilder({
|
|
28
27
|
...this.#props,
|
|
29
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
28
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialComparison(lhs, op, rhs)),
|
|
30
29
|
});
|
|
31
30
|
}
|
|
32
31
|
orWhere(...args) {
|
|
@@ -38,7 +37,7 @@ export class UpdateQueryBuilder {
|
|
|
38
37
|
orWhereRef(lhs, op, rhs) {
|
|
39
38
|
return new UpdateQueryBuilder({
|
|
40
39
|
...this.#props,
|
|
41
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode,
|
|
40
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferentialComparison(lhs, op, rhs)),
|
|
42
41
|
});
|
|
43
42
|
}
|
|
44
43
|
whereExists(arg) {
|
|
@@ -101,103 +100,16 @@ export class UpdateQueryBuilder {
|
|
|
101
100
|
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
102
101
|
});
|
|
103
102
|
}
|
|
104
|
-
|
|
105
|
-
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
106
|
-
*
|
|
107
|
-
* This method takes an object whose keys are column names and values are
|
|
108
|
-
* values to update. In addition to the column's type, the values can be
|
|
109
|
-
* raw {@link sql} snippets or select queries.
|
|
110
|
-
*
|
|
111
|
-
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
112
|
-
* You can use the {@link returning} method on supported databases to get out
|
|
113
|
-
* the updated rows.
|
|
114
|
-
*
|
|
115
|
-
* ### Examples
|
|
116
|
-
*
|
|
117
|
-
* Update a row in `person` table:
|
|
118
|
-
*
|
|
119
|
-
* ```ts
|
|
120
|
-
* const result = await db
|
|
121
|
-
* .updateTable('person')
|
|
122
|
-
* .set({
|
|
123
|
-
* first_name: 'Jennifer',
|
|
124
|
-
* last_name: 'Aniston'
|
|
125
|
-
* })
|
|
126
|
-
* .where('id', '=', 1)
|
|
127
|
-
* .executeTakeFirst()
|
|
128
|
-
*
|
|
129
|
-
* console.log(result.numUpdatedRows)
|
|
130
|
-
* ```
|
|
131
|
-
*
|
|
132
|
-
* The generated SQL (PostgreSQL):
|
|
133
|
-
*
|
|
134
|
-
* ```sql
|
|
135
|
-
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
136
|
-
* ```
|
|
137
|
-
*
|
|
138
|
-
* On PostgreSQL you ca chain `returning` to the query to get
|
|
139
|
-
* the updated rows' columns (or any other expression) as the
|
|
140
|
-
* return value:
|
|
141
|
-
*
|
|
142
|
-
* ```ts
|
|
143
|
-
* const row = await db
|
|
144
|
-
* .updateTable('person')
|
|
145
|
-
* .set({
|
|
146
|
-
* first_name: 'Jennifer',
|
|
147
|
-
* last_name: 'Aniston'
|
|
148
|
-
* })
|
|
149
|
-
* .where('id', '=', 1)
|
|
150
|
-
* .returning('id')
|
|
151
|
-
* .executeTakeFirstOrThrow()
|
|
152
|
-
*
|
|
153
|
-
* row.id
|
|
154
|
-
* ```
|
|
155
|
-
*
|
|
156
|
-
* The generated SQL (PostgreSQL):
|
|
157
|
-
*
|
|
158
|
-
* ```sql
|
|
159
|
-
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
160
|
-
* ```
|
|
161
|
-
*
|
|
162
|
-
* In addition to primitives, the values can also be raw sql expressions or
|
|
163
|
-
* select queries:
|
|
164
|
-
*
|
|
165
|
-
* ```ts
|
|
166
|
-
* import { sql } from 'kysely'
|
|
167
|
-
*
|
|
168
|
-
* const result = await db
|
|
169
|
-
* .updateTable('person')
|
|
170
|
-
* .set({
|
|
171
|
-
* first_name: 'Jennifer',
|
|
172
|
-
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
173
|
-
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
174
|
-
* })
|
|
175
|
-
* .where('id', '=', 1)
|
|
176
|
-
* .executeTakeFirst()
|
|
177
|
-
*
|
|
178
|
-
* console.log(result.numUpdatedRows)
|
|
179
|
-
* ```
|
|
180
|
-
*
|
|
181
|
-
* The generated SQL (PostgreSQL):
|
|
182
|
-
*
|
|
183
|
-
* ```sql
|
|
184
|
-
* update "person" set
|
|
185
|
-
* "first_name" = $1,
|
|
186
|
-
* "last_name" = $2 || $3,
|
|
187
|
-
* "age" = (select avg(age) from "person")
|
|
188
|
-
* where "id" = $4
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
|
-
set(row) {
|
|
103
|
+
set(update) {
|
|
192
104
|
return new UpdateQueryBuilder({
|
|
193
105
|
...this.#props,
|
|
194
|
-
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode,
|
|
106
|
+
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateExpression(update)),
|
|
195
107
|
});
|
|
196
108
|
}
|
|
197
109
|
returning(selection) {
|
|
198
110
|
return new UpdateQueryBuilder({
|
|
199
111
|
...this.#props,
|
|
200
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode,
|
|
112
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectArg(selection)),
|
|
201
113
|
});
|
|
202
114
|
}
|
|
203
115
|
returningAll() {
|
|
@@ -207,7 +119,8 @@ export class UpdateQueryBuilder {
|
|
|
207
119
|
});
|
|
208
120
|
}
|
|
209
121
|
/**
|
|
210
|
-
* Simply calls the
|
|
122
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
123
|
+
* what the provided function returns.
|
|
211
124
|
*
|
|
212
125
|
* If you want to conditionally call a method on `this`, see
|
|
213
126
|
* the {@link $if} method.
|
|
@@ -384,7 +297,7 @@ export class UpdateQueryBuilder {
|
|
|
384
297
|
return [
|
|
385
298
|
new UpdateResult(
|
|
386
299
|
// TODO: remove numUpdatedOrDeletedRows.
|
|
387
|
-
result.numAffectedRows ?? result.numUpdatedOrDeletedRows ??
|
|
300
|
+
result.numAffectedRows ?? result.numUpdatedOrDeletedRows ?? BigInt(0)),
|
|
388
301
|
];
|
|
389
302
|
}
|
|
390
303
|
/**
|
|
@@ -400,37 +313,30 @@ export class UpdateQueryBuilder {
|
|
|
400
313
|
* the query returned no result.
|
|
401
314
|
*
|
|
402
315
|
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
403
|
-
* provide a custom error class as the only argument to throw a different
|
|
316
|
+
* provide a custom error class, or callback as the only argument to throw a different
|
|
404
317
|
* error.
|
|
405
318
|
*/
|
|
406
319
|
async executeTakeFirstOrThrow(errorConstructor = NoResultError) {
|
|
407
320
|
const result = await this.executeTakeFirst();
|
|
408
321
|
if (result === undefined) {
|
|
409
|
-
|
|
322
|
+
const error = isNoResultErrorConstructor(errorConstructor)
|
|
323
|
+
? new errorConstructor(this.toOperationNode())
|
|
324
|
+
: errorConstructor(this.toOperationNode());
|
|
325
|
+
throw error;
|
|
410
326
|
}
|
|
411
327
|
return result;
|
|
412
328
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
* .where('id', '=', 123)
|
|
421
|
-
* .explain('json')
|
|
422
|
-
* ```
|
|
423
|
-
*
|
|
424
|
-
* The generated SQL (MySQL):
|
|
425
|
-
*
|
|
426
|
-
* ```sql
|
|
427
|
-
* explain format=json update `person` set `first_name` = ?, `last_name` = ? where `id` = ?
|
|
428
|
-
* ```
|
|
429
|
-
*/
|
|
329
|
+
async *stream(chunkSize = 100) {
|
|
330
|
+
const compiledQuery = this.compile();
|
|
331
|
+
const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
|
|
332
|
+
for await (const item of stream) {
|
|
333
|
+
yield* item.rows;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
430
336
|
async explain(format, options) {
|
|
431
337
|
const builder = new UpdateQueryBuilder({
|
|
432
338
|
...this.#props,
|
|
433
|
-
queryNode:
|
|
339
|
+
queryNode: QueryNode.cloneWithExplain(this.#props.queryNode, format, options),
|
|
434
340
|
});
|
|
435
341
|
return await builder.execute();
|
|
436
342
|
}
|
|
@@ -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;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="./default-query-compiler.d.ts" />
|
|
2
2
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
3
3
|
import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
|
|
4
|
+
import { OperatorNode } from '../operation-node/operator-node.js';
|
|
4
5
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
5
6
|
import { freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
|
|
6
7
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
@@ -550,6 +551,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
550
551
|
this.visitNode(node.expression);
|
|
551
552
|
this.append(')');
|
|
552
553
|
}
|
|
554
|
+
if (node.where) {
|
|
555
|
+
this.append(' ');
|
|
556
|
+
this.visitNode(node.where);
|
|
557
|
+
}
|
|
553
558
|
}
|
|
554
559
|
visitDropIndex(node) {
|
|
555
560
|
this.append('drop index ');
|
|
@@ -903,13 +908,24 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
903
908
|
}
|
|
904
909
|
visitUnaryOperation(node) {
|
|
905
910
|
this.visitNode(node.operator);
|
|
906
|
-
this.
|
|
911
|
+
if (!this.isMinusOperator(node.operator)) {
|
|
912
|
+
this.append(' ');
|
|
913
|
+
}
|
|
907
914
|
this.visitNode(node.operand);
|
|
908
915
|
}
|
|
916
|
+
isMinusOperator(node) {
|
|
917
|
+
return OperatorNode.is(node) && node.operator === '-';
|
|
918
|
+
}
|
|
909
919
|
visitUsing(node) {
|
|
910
920
|
this.append('using ');
|
|
911
921
|
this.compileList(node.tables);
|
|
912
922
|
}
|
|
923
|
+
visitFunction(node) {
|
|
924
|
+
this.append(node.func);
|
|
925
|
+
this.append('(');
|
|
926
|
+
this.compileList(node.arguments);
|
|
927
|
+
this.append(')');
|
|
928
|
+
}
|
|
913
929
|
append(str) {
|
|
914
930
|
this.#sql += str;
|
|
915
931
|
}
|