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
|
@@ -16,7 +16,6 @@ const object_utils_js_1 = require("../util/object-utils.js");
|
|
|
16
16
|
const group_by_parser_js_1 = require("../parser/group-by-parser.js");
|
|
17
17
|
const no_result_error_js_1 = require("./no-result-error.js");
|
|
18
18
|
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
19
|
-
const explain_node_js_1 = require("../operation-node/explain-node.js");
|
|
20
19
|
const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
|
|
21
20
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
22
21
|
const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
|
|
@@ -38,7 +37,7 @@ class SelectQueryBuilder {
|
|
|
38
37
|
whereRef(lhs, op, rhs) {
|
|
39
38
|
return new SelectQueryBuilder({
|
|
40
39
|
...this.#props,
|
|
41
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
40
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
42
41
|
});
|
|
43
42
|
}
|
|
44
43
|
orWhere(...args) {
|
|
@@ -50,7 +49,7 @@ class SelectQueryBuilder {
|
|
|
50
49
|
orWhereRef(lhs, op, rhs) {
|
|
51
50
|
return new SelectQueryBuilder({
|
|
52
51
|
...this.#props,
|
|
53
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
52
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
54
53
|
});
|
|
55
54
|
}
|
|
56
55
|
whereExists(arg) {
|
|
@@ -86,7 +85,7 @@ class SelectQueryBuilder {
|
|
|
86
85
|
havingRef(lhs, op, rhs) {
|
|
87
86
|
return new SelectQueryBuilder({
|
|
88
87
|
...this.#props,
|
|
89
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
88
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
90
89
|
});
|
|
91
90
|
}
|
|
92
91
|
orHaving(...args) {
|
|
@@ -98,7 +97,7 @@ class SelectQueryBuilder {
|
|
|
98
97
|
orHavingRef(lhs, op, rhs) {
|
|
99
98
|
return new SelectQueryBuilder({
|
|
100
99
|
...this.#props,
|
|
101
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.
|
|
100
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
|
|
102
101
|
});
|
|
103
102
|
}
|
|
104
103
|
havingExists(arg) {
|
|
@@ -107,12 +106,21 @@ class SelectQueryBuilder {
|
|
|
107
106
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
|
|
108
107
|
});
|
|
109
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* @deprecated Use {@link havingNotExists} instead.
|
|
111
|
+
*/
|
|
110
112
|
havingNotExist(arg) {
|
|
111
113
|
return new SelectQueryBuilder({
|
|
112
114
|
...this.#props,
|
|
113
115
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
|
|
114
116
|
});
|
|
115
117
|
}
|
|
118
|
+
havingNotExists(arg) {
|
|
119
|
+
return new SelectQueryBuilder({
|
|
120
|
+
...this.#props,
|
|
121
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
116
124
|
orHavingExists(arg) {
|
|
117
125
|
return new SelectQueryBuilder({
|
|
118
126
|
...this.#props,
|
|
@@ -125,10 +133,199 @@ class SelectQueryBuilder {
|
|
|
125
133
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
|
|
126
134
|
});
|
|
127
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Adds a select statement to the query.
|
|
138
|
+
*
|
|
139
|
+
* When a column (or any expression) is selected, Kysely adds its type to the return
|
|
140
|
+
* type of the query. Kysely is smart enough to parse the selection names and types
|
|
141
|
+
* from aliased columns, subqueries, raw expressions etc.
|
|
142
|
+
*
|
|
143
|
+
* Kysely only allows you to select columns and expressions that exist and would
|
|
144
|
+
* produce valid SQL. However, Kysely is not perfect and there may be cases where
|
|
145
|
+
* the type inference doesn't work and you need to override it. You can always
|
|
146
|
+
* use the {@link Kysely.dynamic | dynamic} module and the {@link sql} tag
|
|
147
|
+
* to override the types.
|
|
148
|
+
*
|
|
149
|
+
* Select calls are additive. Calling `select('id').select('first_name')` is the
|
|
150
|
+
* same as calling `select(['id', 'first_name'])`.
|
|
151
|
+
*
|
|
152
|
+
* To select all columns of the query or specific tables see the
|
|
153
|
+
* {@link selectAll} method.
|
|
154
|
+
*
|
|
155
|
+
* See the {@link $if} method if you are looking for a way to add selections
|
|
156
|
+
* based on a runtime condition.
|
|
157
|
+
*
|
|
158
|
+
* ### Examples
|
|
159
|
+
*
|
|
160
|
+
* Select a single column:
|
|
161
|
+
*
|
|
162
|
+
* ```ts
|
|
163
|
+
* const persons = await db
|
|
164
|
+
* .selectFrom('person')
|
|
165
|
+
* .select('id')
|
|
166
|
+
* .where('first_name', '=', 'Arnold')
|
|
167
|
+
* .execute()
|
|
168
|
+
*
|
|
169
|
+
* persons[0].id
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* The generated SQL (PostgreSQL):
|
|
173
|
+
*
|
|
174
|
+
* ```sql
|
|
175
|
+
* select "id" from "person" where "first_name" = $1
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* Select a single column and specify a table:
|
|
179
|
+
*
|
|
180
|
+
* ```ts
|
|
181
|
+
* const persons = await db
|
|
182
|
+
* .selectFrom(['person', 'pet'])
|
|
183
|
+
* .select('person.id')
|
|
184
|
+
* .execute()
|
|
185
|
+
*
|
|
186
|
+
* persons[0].id
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* The generated SQL (PostgreSQL):
|
|
190
|
+
*
|
|
191
|
+
* ```sql
|
|
192
|
+
* select "person"."id" from "person", "pet"
|
|
193
|
+
* ```
|
|
194
|
+
*
|
|
195
|
+
* Select multiple columns:
|
|
196
|
+
*
|
|
197
|
+
* ```ts
|
|
198
|
+
* const persons = await db
|
|
199
|
+
* .selectFrom('person')
|
|
200
|
+
* .select(['person.id', 'first_name'])
|
|
201
|
+
* .execute()
|
|
202
|
+
*
|
|
203
|
+
* persons[0].id
|
|
204
|
+
* persons[0].first_name
|
|
205
|
+
* ```
|
|
206
|
+
*
|
|
207
|
+
* The generated SQL (PostgreSQL):
|
|
208
|
+
*
|
|
209
|
+
* ```sql
|
|
210
|
+
* select "person"."id", "first_name" from "person"
|
|
211
|
+
* ```
|
|
212
|
+
*
|
|
213
|
+
* Aliased selections:
|
|
214
|
+
*
|
|
215
|
+
* ```ts
|
|
216
|
+
* const persons = await db
|
|
217
|
+
* .selectFrom('person')
|
|
218
|
+
* .select([
|
|
219
|
+
* 'person.first_name as fn',
|
|
220
|
+
* 'person.last_name as ln'
|
|
221
|
+
* ])
|
|
222
|
+
* .execute()
|
|
223
|
+
*
|
|
224
|
+
* persons[0].fn
|
|
225
|
+
* persons[0].ln
|
|
226
|
+
* ```
|
|
227
|
+
*
|
|
228
|
+
* The generated SQL (PostgreSQL):
|
|
229
|
+
*
|
|
230
|
+
* ```sql
|
|
231
|
+
* select
|
|
232
|
+
* "person"."first_name" as "fn",
|
|
233
|
+
* "person"."last_name" as "ln"
|
|
234
|
+
* from "person"
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* You can also select arbitrary expression including subqueries and raw sql snippets.
|
|
238
|
+
* When you do that, you need to give a name for the selections using the {@link as} method:
|
|
239
|
+
*
|
|
240
|
+
* ```ts
|
|
241
|
+
* import { sql } from 'kysely'
|
|
242
|
+
*
|
|
243
|
+
* const persons = await db.selectFrom('person')
|
|
244
|
+
* .select(({ selectFrom, or, cmpr }) => [
|
|
245
|
+
* // Select a correlated subquery
|
|
246
|
+
* selectFrom('pet')
|
|
247
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
248
|
+
* .select('pet.name')
|
|
249
|
+
* .orderBy('pet.name')
|
|
250
|
+
* .limit(1)
|
|
251
|
+
* .as('first_pet_name'),
|
|
252
|
+
*
|
|
253
|
+
* // Build and select an expression using the expression builder
|
|
254
|
+
* or([
|
|
255
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
256
|
+
* cmpr('first_name', '=', 'Arnold')
|
|
257
|
+
* ]).as('is_jennifer_or_arnold'),
|
|
258
|
+
*
|
|
259
|
+
* // Select a raw sql expression
|
|
260
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
|
|
261
|
+
* ])
|
|
262
|
+
* .execute()
|
|
263
|
+
*
|
|
264
|
+
* persons[0].first_pet_name
|
|
265
|
+
* persons[0].is_jennifer_or_arnold
|
|
266
|
+
* persons[0].full_name
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* The generated SQL (PostgreSQL):
|
|
270
|
+
*
|
|
271
|
+
* ```sql
|
|
272
|
+
* select
|
|
273
|
+
* (
|
|
274
|
+
* select "pet"."name"
|
|
275
|
+
* from "pet"
|
|
276
|
+
* where "person"."id" = "pet"."owner_id"
|
|
277
|
+
* order by "pet"."name"
|
|
278
|
+
* limit $1
|
|
279
|
+
* ) as "pet_name",
|
|
280
|
+
* ("first_name" = $2 or "first_name" = $3) as "jennifer_or_arnold",
|
|
281
|
+
* concat(first_name, ' ', last_name) as "full_name"
|
|
282
|
+
* from "person"
|
|
283
|
+
* ```
|
|
284
|
+
*
|
|
285
|
+
* In case you use the {@link sql} tag you need to specify the type of the expression
|
|
286
|
+
* (in this example `string`).
|
|
287
|
+
*
|
|
288
|
+
* All the examples above assume you know the column names at compile time.
|
|
289
|
+
* While it's better to build your code like that (that way you also know
|
|
290
|
+
* the types) sometimes it's not possible or you just prefer to write more
|
|
291
|
+
* dynamic code.
|
|
292
|
+
* <br><br>
|
|
293
|
+
* In this example, we use the `dynamic` module's methods to add selections
|
|
294
|
+
* dynamically:
|
|
295
|
+
*
|
|
296
|
+
* ```ts
|
|
297
|
+
* const { ref } = db.dynamic
|
|
298
|
+
*
|
|
299
|
+
* // Some column name provided by the user. Value not known at compile time.
|
|
300
|
+
* const columnFromUserInput = req.query.select;
|
|
301
|
+
*
|
|
302
|
+
* // A type that lists all possible values `columnFromUserInput` can have.
|
|
303
|
+
* // You can use `keyof Person` if any column of an interface is allowed.
|
|
304
|
+
* type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
|
|
305
|
+
*
|
|
306
|
+
* const spersons = await db
|
|
307
|
+
* .selectFrom('person')
|
|
308
|
+
* .select([
|
|
309
|
+
* ref<PossibleColumns>(columnFromUserInput)
|
|
310
|
+
* 'id'
|
|
311
|
+
* ])
|
|
312
|
+
* .execute()
|
|
313
|
+
*
|
|
314
|
+
* // The resulting type contains all `PossibleColumns` as optional fields
|
|
315
|
+
* // because we cannot know which field was actually selected before
|
|
316
|
+
* // running the code.
|
|
317
|
+
* const lastName: string | undefined = persons[0].last_name
|
|
318
|
+
* const firstName: string | undefined = persons[0].first_name
|
|
319
|
+
* const birthDate: string | undefined = persons[0].birth_date
|
|
320
|
+
*
|
|
321
|
+
* // The result type also contains the compile time selection `id`.
|
|
322
|
+
* persons[0].id
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
128
325
|
select(selection) {
|
|
129
326
|
return new SelectQueryBuilder({
|
|
130
327
|
...this.#props,
|
|
131
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.
|
|
328
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(selection)),
|
|
132
329
|
});
|
|
133
330
|
}
|
|
134
331
|
distinctOn(selection) {
|
|
@@ -348,7 +545,7 @@ class SelectQueryBuilder {
|
|
|
348
545
|
* await db
|
|
349
546
|
* .selectFrom('person')
|
|
350
547
|
* .selectAll()
|
|
351
|
-
* .orderBy((
|
|
548
|
+
* .orderBy((eb) => eb.selectFrom('pet')
|
|
352
549
|
* .select('pet.name')
|
|
353
550
|
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
354
551
|
* .limit(1)
|
|
@@ -404,6 +601,104 @@ class SelectQueryBuilder {
|
|
|
404
601
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(orderBy, direction)),
|
|
405
602
|
});
|
|
406
603
|
}
|
|
604
|
+
/**
|
|
605
|
+
* Adds a `group by` clause to the query.
|
|
606
|
+
*
|
|
607
|
+
* ### Examples
|
|
608
|
+
*
|
|
609
|
+
* ```ts
|
|
610
|
+
* import { sql } from 'kysely'
|
|
611
|
+
*
|
|
612
|
+
* await db
|
|
613
|
+
* .selectFrom('person')
|
|
614
|
+
* .select([
|
|
615
|
+
* 'first_name',
|
|
616
|
+
* sql`max(id)`.as('max_id')
|
|
617
|
+
* ])
|
|
618
|
+
* .groupBy('first_name')
|
|
619
|
+
* .execute()
|
|
620
|
+
* ```
|
|
621
|
+
*
|
|
622
|
+
* The generated SQL (PostgreSQL):
|
|
623
|
+
*
|
|
624
|
+
* ```sql
|
|
625
|
+
* select "first_name", max(id)
|
|
626
|
+
* from "person"
|
|
627
|
+
* group by "first_name"
|
|
628
|
+
* ```
|
|
629
|
+
*
|
|
630
|
+
* `groupBy` also accepts an array:
|
|
631
|
+
*
|
|
632
|
+
* ```ts
|
|
633
|
+
* import { sql } from 'kysely'
|
|
634
|
+
*
|
|
635
|
+
* await db
|
|
636
|
+
* .selectFrom('person')
|
|
637
|
+
* .select([
|
|
638
|
+
* 'first_name',
|
|
639
|
+
* 'last_name',
|
|
640
|
+
* sql`max(id)`.as('max_id')
|
|
641
|
+
* ])
|
|
642
|
+
* .groupBy([
|
|
643
|
+
* 'first_name',
|
|
644
|
+
* 'last_name'
|
|
645
|
+
* ])
|
|
646
|
+
* .execute()
|
|
647
|
+
* ```
|
|
648
|
+
*
|
|
649
|
+
* The generated SQL (PostgreSQL):
|
|
650
|
+
*
|
|
651
|
+
* ```sql
|
|
652
|
+
* select "first_name", "last_name", max(id)
|
|
653
|
+
* from "person"
|
|
654
|
+
* group by "first_name", "last_name"
|
|
655
|
+
* ```
|
|
656
|
+
*
|
|
657
|
+
* The group by expressions can also be subqueries or
|
|
658
|
+
* raw sql expressions:
|
|
659
|
+
*
|
|
660
|
+
* ```ts
|
|
661
|
+
* import { sql } from 'kysely'
|
|
662
|
+
*
|
|
663
|
+
* await db
|
|
664
|
+
* .selectFrom('person')
|
|
665
|
+
* .select([
|
|
666
|
+
* 'first_name',
|
|
667
|
+
* 'last_name',
|
|
668
|
+
* sql`max(id)`.as('max_id')
|
|
669
|
+
* ])
|
|
670
|
+
* .groupBy([
|
|
671
|
+
* sql`concat(first_name, last_name)`,
|
|
672
|
+
* (qb) => qb.selectFrom('pet').select('id').limit(1)
|
|
673
|
+
* ])
|
|
674
|
+
* .execute()
|
|
675
|
+
* ```
|
|
676
|
+
*
|
|
677
|
+
* `dynamic.ref` can be used to refer to columns not known at
|
|
678
|
+
* compile time:
|
|
679
|
+
*
|
|
680
|
+
* ```ts
|
|
681
|
+
* async function someQuery(groupBy: string) {
|
|
682
|
+
* const { ref } = db.dynamic
|
|
683
|
+
*
|
|
684
|
+
* return await db
|
|
685
|
+
* .selectFrom('person')
|
|
686
|
+
* .select('first_name')
|
|
687
|
+
* .groupBy(ref(groupBy))
|
|
688
|
+
* .execute()
|
|
689
|
+
* }
|
|
690
|
+
*
|
|
691
|
+
* someQuery('first_name')
|
|
692
|
+
* ```
|
|
693
|
+
*
|
|
694
|
+
* The generated SQL (PostgreSQL):
|
|
695
|
+
*
|
|
696
|
+
* ```sql
|
|
697
|
+
* select "first_name"
|
|
698
|
+
* from "person"
|
|
699
|
+
* group by "first_name"
|
|
700
|
+
* ```
|
|
701
|
+
*/
|
|
407
702
|
groupBy(groupBy) {
|
|
408
703
|
return new SelectQueryBuilder({
|
|
409
704
|
...this.#props,
|
|
@@ -612,7 +907,7 @@ class SelectQueryBuilder {
|
|
|
612
907
|
* db.selectFrom('person')
|
|
613
908
|
* .select(['id', 'first_name'])
|
|
614
909
|
* .clearSelect()
|
|
615
|
-
* .select(['id','gender'])
|
|
910
|
+
* .select(['id', 'gender'])
|
|
616
911
|
* ```
|
|
617
912
|
*
|
|
618
913
|
* The generated SQL(PostgreSQL):
|
|
@@ -707,7 +1002,8 @@ class SelectQueryBuilder {
|
|
|
707
1002
|
});
|
|
708
1003
|
}
|
|
709
1004
|
/**
|
|
710
|
-
* Simply calls the
|
|
1005
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
1006
|
+
* what the provided function returns.
|
|
711
1007
|
*
|
|
712
1008
|
* If you want to conditionally call a method on `this`, see
|
|
713
1009
|
* the {@link $if} method.
|
|
@@ -740,12 +1036,29 @@ class SelectQueryBuilder {
|
|
|
740
1036
|
/**
|
|
741
1037
|
* Call `func(this)` if `condition` is true.
|
|
742
1038
|
*
|
|
743
|
-
* This method
|
|
744
|
-
*
|
|
745
|
-
*
|
|
746
|
-
*
|
|
1039
|
+
* NOTE: This method has an impact on typescript performance and it should only be used
|
|
1040
|
+
* when necessary. Remember that you can call most methods like `where` conditionally
|
|
1041
|
+
* like this:
|
|
1042
|
+
*
|
|
1043
|
+
* ```ts
|
|
1044
|
+
* let query = db.selectFrom('person').selectAll()
|
|
1045
|
+
*
|
|
1046
|
+
* if (firstName) {
|
|
1047
|
+
* query = query.where('first_name', '=', firstName)
|
|
1048
|
+
* }
|
|
1049
|
+
*
|
|
1050
|
+
* if (lastName) {
|
|
1051
|
+
* query = query.where('last_name', '=', lastName)
|
|
1052
|
+
* }
|
|
1053
|
+
*
|
|
1054
|
+
* const result = await query.execute()
|
|
1055
|
+
* ```
|
|
1056
|
+
*
|
|
1057
|
+
* This method is mainly useful with optional selects. Any `select` or `selectAll`
|
|
1058
|
+
* method called inside the callback add optional fields to the result type. This is
|
|
1059
|
+
* because we can't know if those selections were actually made before running the code.
|
|
747
1060
|
*
|
|
748
|
-
* Also see [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/conditional-selects.md)
|
|
1061
|
+
* Also see [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
|
|
749
1062
|
*
|
|
750
1063
|
* ### Examples
|
|
751
1064
|
*
|
|
@@ -902,42 +1215,19 @@ class SelectQueryBuilder {
|
|
|
902
1215
|
* the query returned no result.
|
|
903
1216
|
*
|
|
904
1217
|
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
905
|
-
* provide a custom error class
|
|
1218
|
+
* provide a custom error class, or callback to throw a different
|
|
906
1219
|
* error.
|
|
907
1220
|
*/
|
|
908
1221
|
async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
|
|
909
1222
|
const result = await this.executeTakeFirst();
|
|
910
1223
|
if (result === undefined) {
|
|
911
|
-
|
|
1224
|
+
const error = (0, no_result_error_js_1.isNoResultErrorConstructor)(errorConstructor)
|
|
1225
|
+
? new errorConstructor(this.toOperationNode())
|
|
1226
|
+
: errorConstructor(this.toOperationNode());
|
|
1227
|
+
throw error;
|
|
912
1228
|
}
|
|
913
1229
|
return result;
|
|
914
1230
|
}
|
|
915
|
-
/**
|
|
916
|
-
* Executes the query and streams the rows.
|
|
917
|
-
*
|
|
918
|
-
* The optional argument `chunkSize` defines how many rows to fetch from the database
|
|
919
|
-
* at a time. It only affects some dialects like PostgreSQL that support it.
|
|
920
|
-
*
|
|
921
|
-
* ### Examples
|
|
922
|
-
*
|
|
923
|
-
* ```ts
|
|
924
|
-
* const stream = db.
|
|
925
|
-
* .selectFrom('person')
|
|
926
|
-
* .select(['first_name', 'last_name'])
|
|
927
|
-
* .where('gender', '=', 'other')
|
|
928
|
-
* .stream()
|
|
929
|
-
*
|
|
930
|
-
* for await (const person of stream) {
|
|
931
|
-
* console.log(person.first_name)
|
|
932
|
-
*
|
|
933
|
-
* if (person.last_name === 'Something') {
|
|
934
|
-
* // Breaking or returning before the stream has ended will release
|
|
935
|
-
* // the database connection and invalidate the stream.
|
|
936
|
-
* break
|
|
937
|
-
* }
|
|
938
|
-
* }
|
|
939
|
-
* ```
|
|
940
|
-
*/
|
|
941
1231
|
async *stream(chunkSize = 100) {
|
|
942
1232
|
const compiledQuery = this.compile();
|
|
943
1233
|
const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
|
|
@@ -945,45 +1235,10 @@ class SelectQueryBuilder {
|
|
|
945
1235
|
yield* item.rows;
|
|
946
1236
|
}
|
|
947
1237
|
}
|
|
948
|
-
/**
|
|
949
|
-
* Executes query with `explain` statement before `select` keyword.
|
|
950
|
-
*
|
|
951
|
-
* ```ts
|
|
952
|
-
* const explained = await db
|
|
953
|
-
* .selectFrom('person')
|
|
954
|
-
* .where('gender', '=', 'female')
|
|
955
|
-
* .selectAll()
|
|
956
|
-
* .explain('json')
|
|
957
|
-
* ```
|
|
958
|
-
*
|
|
959
|
-
* The generated SQL (MySQL):
|
|
960
|
-
*
|
|
961
|
-
* ```sql
|
|
962
|
-
* explain format=json select * from `person` where `gender` = ?
|
|
963
|
-
* ```
|
|
964
|
-
*
|
|
965
|
-
* You can also execute `explain analyze` statements.
|
|
966
|
-
*
|
|
967
|
-
* ```ts
|
|
968
|
-
* import { sql } from 'kysely'
|
|
969
|
-
*
|
|
970
|
-
* const explained = await db
|
|
971
|
-
* .selectFrom('person')
|
|
972
|
-
* .where('gender', '=', 'female')
|
|
973
|
-
* .selectAll()
|
|
974
|
-
* .explain('json', sql`analyze`)
|
|
975
|
-
* ```
|
|
976
|
-
*
|
|
977
|
-
* The generated SQL (PostgreSQL):
|
|
978
|
-
*
|
|
979
|
-
* ```sql
|
|
980
|
-
* explain (analyze, format json) select * from "person" where "gender" = $1
|
|
981
|
-
* ```
|
|
982
|
-
*/
|
|
983
1238
|
async explain(format, options) {
|
|
984
1239
|
const builder = new SelectQueryBuilder({
|
|
985
1240
|
...this.#props,
|
|
986
|
-
queryNode:
|
|
1241
|
+
queryNode: query_node_js_1.QueryNode.cloneWithExplain(this.#props.queryNode, format, options),
|
|
987
1242
|
});
|
|
988
1243
|
return await builder.execute();
|
|
989
1244
|
}
|