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
|
@@ -1,214 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createFunctionModule = void 0;
|
|
4
|
+
const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
|
|
4
5
|
const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
|
|
5
|
-
const
|
|
6
|
+
const function_node_js_1 = require("../operation-node/function-node.js");
|
|
6
7
|
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
7
|
-
const
|
|
8
|
-
const query_id_js_1 = require("../util/query-id.js");
|
|
8
|
+
const select_parser_js_1 = require("../parser/select-parser.js");
|
|
9
9
|
const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.sum = this.sum.bind(this);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Calls the `avg` function for the column given as the argument.
|
|
53
|
-
*
|
|
54
|
-
* If this is used in a `select` statement the type of the selected expression
|
|
55
|
-
* will be `number | string` by default. This is because Kysely can't know the
|
|
56
|
-
* type the db driver outputs. Sometimes the output can be larger than the largest
|
|
57
|
-
* javascript number and a string is returned instead. Most drivers allow you
|
|
58
|
-
* to configure the output type of large numbers and Kysely can't know if you've
|
|
59
|
-
* done so.
|
|
60
|
-
*
|
|
61
|
-
* You can specify the output type of the expression by providing the type as
|
|
62
|
-
* the first type argument:
|
|
63
|
-
*
|
|
64
|
-
* ```ts
|
|
65
|
-
* const { avg } = db.fn
|
|
66
|
-
*
|
|
67
|
-
* db.selectFrom('toy')
|
|
68
|
-
* .select(avg<number>('price').as('avg_price'))
|
|
69
|
-
* .execute()
|
|
70
|
-
* ```
|
|
71
|
-
*
|
|
72
|
-
* Sometimes a null is returned, e.g. when row count is 0, and no `group by`
|
|
73
|
-
* was used. It is highly recommended to include null in the output type union
|
|
74
|
-
* and handle null values in post-execute code, or wrap the function with a `coalesce`
|
|
75
|
-
* function.
|
|
76
|
-
*
|
|
77
|
-
* ```ts
|
|
78
|
-
* const { avg } = db.fn
|
|
79
|
-
*
|
|
80
|
-
* db.selectFrom('toy')
|
|
81
|
-
* .select(avg<number | null>('price').as('avg_price'))
|
|
82
|
-
* .execute()
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
avg(column) {
|
|
86
|
-
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
87
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('avg', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Calls the `coalesce` function for given arguments.
|
|
92
|
-
*
|
|
93
|
-
* This function returns the first non-null value from left to right, commonly
|
|
94
|
-
* used to provide a default scalar for nullable columns or functions.
|
|
95
|
-
*
|
|
96
|
-
* ```ts
|
|
97
|
-
* const { coalesce, max } = db.fn
|
|
98
|
-
*
|
|
99
|
-
* db.selectFrom('person')
|
|
100
|
-
* .select(coalesce(max('age'), sql<number>`0`).as('max_age'))
|
|
101
|
-
* .where('first_name', '=', 'Jennifer')
|
|
102
|
-
* .execute()
|
|
103
|
-
* ```
|
|
104
|
-
*
|
|
105
|
-
* The generated SQL (postgres):
|
|
106
|
-
*
|
|
107
|
-
* ```sql
|
|
108
|
-
* select coalesce(max("age"), 0) as "max_age" from "person" where "first_name" = $1
|
|
109
|
-
* ```
|
|
110
|
-
*
|
|
111
|
-
* If this is used in a `select` statement the type of the selected expression
|
|
112
|
-
* is inferred in the same manner that the function computes. A union of arguments'
|
|
113
|
-
* types - if a non-nullable argument exists, it stops there (ignoring any further
|
|
114
|
-
* arguments' types) and exludes null from the final union type.
|
|
115
|
-
*
|
|
116
|
-
* Examples:
|
|
117
|
-
*
|
|
118
|
-
* `(string | null, number | null)` is inferred as `string | number | null`.
|
|
119
|
-
*
|
|
120
|
-
* `(string | null, number, Date | null)` is inferred as `string | number`.
|
|
121
|
-
*
|
|
122
|
-
* `(number, string | null)` is inferred as `number`.
|
|
123
|
-
*/
|
|
124
|
-
coalesce(value, ...otherValues) {
|
|
125
|
-
return new raw_builder_js_1.RawBuilder({
|
|
126
|
-
queryId: (0, query_id_js_1.createQueryId)(),
|
|
127
|
-
rawNode: (0, coalesce_parser_js_1.parseCoalesce)([value, ...otherValues]),
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Calls the `count` function for the column given as the argument.
|
|
132
|
-
*
|
|
133
|
-
* If this is used in a `select` statement the type of the selected expression
|
|
134
|
-
* will be `number | string | bigint` by default. This is because Kysely
|
|
135
|
-
* can't know the type the db driver outputs. Sometimes the output can be larger
|
|
136
|
-
* than the largest javascript number and a string is returned instead. Most
|
|
137
|
-
* drivers allow you to configure the output type of large numbers and Kysely
|
|
138
|
-
* can't know if you've done so.
|
|
139
|
-
*
|
|
140
|
-
* You can specify the output type of the expression by providing
|
|
141
|
-
* the type as the first type argument:
|
|
142
|
-
*
|
|
143
|
-
* ```ts
|
|
144
|
-
* const { count } = db.fn
|
|
145
|
-
*
|
|
146
|
-
* db.selectFrom('toy')
|
|
147
|
-
* .select(count<number>('id').as('num_toys'))
|
|
148
|
-
* .execute()
|
|
149
|
-
* ```
|
|
150
|
-
*
|
|
151
|
-
* You can limit column range:
|
|
152
|
-
*
|
|
153
|
-
* ```ts
|
|
154
|
-
* db.selectFrom('toy')
|
|
155
|
-
* .select(qb => qb.fn.count<number>('id').as('num_toys'))
|
|
156
|
-
* .execute()
|
|
157
|
-
* ```
|
|
158
|
-
*/
|
|
159
|
-
count(column) {
|
|
160
|
-
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
161
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('count', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
max(column) {
|
|
165
|
-
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
166
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('max', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
min(column) {
|
|
170
|
-
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
171
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('min', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Calls the `sum` function for the column given as the argument.
|
|
176
|
-
*
|
|
177
|
-
* If this is used in a `select` statement the type of the selected expression
|
|
178
|
-
* will be `number | string | bigint` by default. This is because Kysely
|
|
179
|
-
* can't know the type the db driver outputs. Sometimes the output can be larger
|
|
180
|
-
* than the largest javascript number and a string is returned instead. Most
|
|
181
|
-
* drivers allow you to configure the output type of large numbers and Kysely
|
|
182
|
-
* can't know if you've done so.
|
|
183
|
-
*
|
|
184
|
-
* You can specify the output type of the expression by providing
|
|
185
|
-
* the type as the first type argument:
|
|
186
|
-
*
|
|
187
|
-
* ```ts
|
|
188
|
-
* const { sum } = db.fn
|
|
189
|
-
*
|
|
190
|
-
* db.selectFrom('toy')
|
|
191
|
-
* .select(sum<number>('price').as('total_price'))
|
|
192
|
-
* .execute()
|
|
193
|
-
* ```
|
|
194
|
-
*
|
|
195
|
-
* Sometimes a null is returned, e.g. when row count is 0, and no `group by`
|
|
196
|
-
* was used. It is highly recommended to include null in the output type union
|
|
197
|
-
* and handle null values in post-execute code, or wrap the function with a `coalesce`
|
|
198
|
-
* function.
|
|
199
|
-
*
|
|
200
|
-
* ```ts
|
|
201
|
-
* const { sum } = db.fn
|
|
202
|
-
*
|
|
203
|
-
* db.selectFrom('toy')
|
|
204
|
-
* .select(sum<number | null>('price').as('total_price'))
|
|
205
|
-
* .execute()
|
|
206
|
-
* ```
|
|
207
|
-
*/
|
|
208
|
-
sum(column) {
|
|
209
|
-
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
210
|
-
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('sum', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
211
|
-
});
|
|
212
|
-
}
|
|
10
|
+
function createFunctionModule() {
|
|
11
|
+
const fn = (name, args) => {
|
|
12
|
+
return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args)));
|
|
13
|
+
};
|
|
14
|
+
return Object.assign(fn, {
|
|
15
|
+
avg(column) {
|
|
16
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
17
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('avg', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
coalesce(value, ...otherValues) {
|
|
21
|
+
return fn('coalesce', [value, ...otherValues]);
|
|
22
|
+
},
|
|
23
|
+
count(column) {
|
|
24
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
25
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('count', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
countAll(table) {
|
|
29
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
30
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('count', (0, select_parser_js_1.parseSelectAll)(table)[0]),
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
max(column) {
|
|
34
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
35
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('max', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
min(column) {
|
|
39
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
40
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('min', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
sum(column) {
|
|
44
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
45
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('sum', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
});
|
|
213
49
|
}
|
|
214
|
-
exports.
|
|
50
|
+
exports.createFunctionModule = createFunctionModule;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Expression } from '../expression/expression.js';
|
|
2
|
-
import { ComparisonOperatorExpression,
|
|
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 { HavingExpressionBuilder } from './deprecated-having-expression-builder.js';
|
|
5
7
|
export interface HavingInterface<DB, TB extends keyof DB> {
|
|
6
8
|
/**
|
|
7
9
|
* Just like {@link WhereInterface.where | where} but adds a `having` statement
|
|
8
10
|
* instead of a `where` statement.
|
|
9
11
|
*/
|
|
10
12
|
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
|
|
11
|
-
having(
|
|
13
|
+
having(factory: HavingExpressionFactory<DB, TB>): HavingInterface<DB, TB>;
|
|
12
14
|
having(expression: Expression<any>): HavingInterface<DB, TB>;
|
|
13
15
|
/**
|
|
14
16
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
@@ -16,35 +18,36 @@ export interface HavingInterface<DB, TB extends keyof DB> {
|
|
|
16
18
|
*/
|
|
17
19
|
havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
18
20
|
/**
|
|
19
|
-
*
|
|
20
|
-
* instead of a `where` statement.
|
|
21
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
21
22
|
*/
|
|
22
23
|
orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
|
|
23
|
-
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
26
|
+
*/
|
|
27
|
+
orHaving(factory: HavingExpressionFactory<DB, TB>): HavingInterface<DB, TB>;
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
30
|
+
*/
|
|
24
31
|
orHaving(expression: Expression<any>): HavingInterface<DB, TB>;
|
|
25
32
|
/**
|
|
26
|
-
*
|
|
27
|
-
* instead of a `where` statement.
|
|
33
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
28
34
|
*/
|
|
29
35
|
orHavingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
30
36
|
/**
|
|
31
|
-
*
|
|
32
|
-
* instead of a `where` statement.
|
|
37
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
33
38
|
*/
|
|
34
39
|
havingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
35
40
|
/**
|
|
36
|
-
*
|
|
37
|
-
* instead of a `where` statement.
|
|
41
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
38
42
|
*/
|
|
39
|
-
|
|
43
|
+
havingNotExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
40
44
|
/**
|
|
41
|
-
*
|
|
42
|
-
* instead of a `where` statement.
|
|
45
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
43
46
|
*/
|
|
44
47
|
orHavingExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
45
48
|
/**
|
|
46
|
-
*
|
|
47
|
-
* instead of a `where` statement.
|
|
49
|
+
* @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
|
|
48
50
|
*/
|
|
49
51
|
orHavingNotExists(arg: ExistsExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
50
52
|
}
|
|
53
|
+
export declare type HavingExpressionFactory<DB, TB extends keyof DB> = (eb: HavingExpressionBuilder<DB, TB>) => Expression<SqlBool> | HavingExpressionBuilder<DB, TB>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
2
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
-
import { SelectExpression } from '../parser/select-parser.js';
|
|
4
|
-
import {
|
|
3
|
+
import { SelectExpression, SelectArg } from '../parser/select-parser.js';
|
|
4
|
+
import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
|
|
5
5
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { QueryNode } from '../operation-node/query-node.js';
|
|
7
|
+
import { MergePartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
|
|
8
|
+
import { UpdateExpression } from '../parser/update-set-parser.js';
|
|
8
9
|
import { Compilable } from '../util/compilable.js';
|
|
9
10
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
10
11
|
import { QueryId } from '../util/query-id.js';
|
|
@@ -19,7 +20,8 @@ import { Selectable } from '../util/column-type.js';
|
|
|
19
20
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
20
21
|
import { Expression } from '../expression/expression.js';
|
|
21
22
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
22
|
-
|
|
23
|
+
import { Streamable } from '../util/streamable.js';
|
|
24
|
+
export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
23
25
|
#private;
|
|
24
26
|
constructor(props: InsertQueryBuilderProps);
|
|
25
27
|
/**
|
|
@@ -116,11 +118,12 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
116
118
|
*
|
|
117
119
|
* const result = await db
|
|
118
120
|
* .insertInto('person')
|
|
119
|
-
* .values({
|
|
121
|
+
* .values((eb) => ({
|
|
120
122
|
* first_name: 'Jennifer',
|
|
121
123
|
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
+
* middle_name: eb.ref('first_name'),
|
|
125
|
+
* age: eb.selectFrom('person').select(sql`avg(age)`),
|
|
126
|
+
* }))
|
|
124
127
|
* .executeTakeFirst()
|
|
125
128
|
*
|
|
126
129
|
* console.log(result.insertId)
|
|
@@ -141,15 +144,15 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
141
144
|
* .where('first_name', '=', 'Jennifer')
|
|
142
145
|
* .select(['id', 'first_name', 'gender'])
|
|
143
146
|
* .limit(1)
|
|
144
|
-
* ).insertInto('pet').values({
|
|
145
|
-
* owner_id:
|
|
146
|
-
* name:
|
|
147
|
+
* ).insertInto('pet').values((eb) => ({
|
|
148
|
+
* owner_id: eb.selectFrom('jennifer').select('id'),
|
|
149
|
+
* name: eb.selectFrom('jennifer').select('first_name'),
|
|
147
150
|
* species: 'cat',
|
|
148
|
-
* })
|
|
151
|
+
* }))
|
|
149
152
|
* ```
|
|
150
153
|
*/
|
|
151
|
-
values(
|
|
152
|
-
values(
|
|
154
|
+
values(insert: InsertObjectOrList<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
155
|
+
values(insert: InsertObjectOrListFactory<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
153
156
|
/**
|
|
154
157
|
* Sets the columns to insert.
|
|
155
158
|
*
|
|
@@ -259,7 +262,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
259
262
|
* .doUpdateSet({ species: 'hamster' })
|
|
260
263
|
* )
|
|
261
264
|
* .execute()
|
|
262
|
-
* .execute()
|
|
263
265
|
* ```
|
|
264
266
|
*
|
|
265
267
|
* The generated SQL (PostgreSQL):
|
|
@@ -385,7 +387,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
385
387
|
* .onDuplicateKeyUpdate({ species: 'hamster' })
|
|
386
388
|
* ```
|
|
387
389
|
*/
|
|
388
|
-
onDuplicateKeyUpdate(
|
|
390
|
+
onDuplicateKeyUpdate(update: UpdateExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
389
391
|
/**
|
|
390
392
|
* Allows you to return data from modified rows.
|
|
391
393
|
*
|
|
@@ -437,23 +439,23 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
437
439
|
* first_name: 'Jennifer',
|
|
438
440
|
* last_name: 'Aniston'
|
|
439
441
|
* })
|
|
440
|
-
* .returning([
|
|
442
|
+
* .returning(eb => [
|
|
441
443
|
* 'id as id',
|
|
442
444
|
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
443
|
-
*
|
|
445
|
+
* eb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
444
446
|
* ])
|
|
445
447
|
* .executeTakeFirst()
|
|
446
448
|
* ```
|
|
447
449
|
*/
|
|
448
|
-
returning<SE extends SelectExpression<DB, TB>>(
|
|
449
|
-
returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
450
|
+
returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
450
451
|
/**
|
|
451
452
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
452
453
|
* that support `returning` such as PostgreSQL.
|
|
453
454
|
*/
|
|
454
455
|
returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
|
|
455
456
|
/**
|
|
456
|
-
* Simply calls the
|
|
457
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
458
|
+
* what the provided function returns.
|
|
457
459
|
*
|
|
458
460
|
* If you want to conditionally call a method on `this`, see
|
|
459
461
|
* the {@link $if} method.
|
|
@@ -562,7 +564,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
562
564
|
* )
|
|
563
565
|
* .with('new_pet', (qb) => qb
|
|
564
566
|
* .insertInto('pet')
|
|
565
|
-
* .values(
|
|
567
|
+
* .values((eb) => ({ owner_id: eb.selectFrom('new_person').select('id'), ...pet }))
|
|
566
568
|
* .returning(['name as pet_name', 'species'])
|
|
567
569
|
* .$assertType<{ pet_name: string, species: Species }>()
|
|
568
570
|
* )
|
|
@@ -587,35 +589,81 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
587
589
|
*
|
|
588
590
|
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
589
591
|
*/
|
|
590
|
-
execute(): Promise<O[]>;
|
|
592
|
+
execute(): Promise<SimplifyResult<O>[]>;
|
|
591
593
|
/**
|
|
592
594
|
* Executes the query and returns the first result or undefined if
|
|
593
595
|
* the query returned no result.
|
|
594
596
|
*/
|
|
595
|
-
executeTakeFirst(): Promise<
|
|
597
|
+
executeTakeFirst(): Promise<SimplifySingleResult<O>>;
|
|
596
598
|
/**
|
|
597
599
|
* Executes the query and returns the first result or throws if
|
|
598
600
|
* the query returned no result.
|
|
599
601
|
*
|
|
600
602
|
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
601
|
-
* provide a custom error class as the only argument to throw a different
|
|
603
|
+
* provide a custom error class, or callback as the only argument to throw a different
|
|
602
604
|
* error.
|
|
603
605
|
*/
|
|
604
|
-
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O
|
|
606
|
+
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<SimplifyResult<O>>;
|
|
607
|
+
/**
|
|
608
|
+
* Executes the query and streams the rows.
|
|
609
|
+
*
|
|
610
|
+
* The optional argument `chunkSize` defines how many rows to fetch from the database
|
|
611
|
+
* at a time. It only affects some dialects like PostgreSQL that support it.
|
|
612
|
+
*
|
|
613
|
+
* ### Examples
|
|
614
|
+
*
|
|
615
|
+
* ```ts
|
|
616
|
+
* const stream = db.
|
|
617
|
+
* .selectFrom('person')
|
|
618
|
+
* .select(['first_name', 'last_name'])
|
|
619
|
+
* .where('gender', '=', 'other')
|
|
620
|
+
* .stream()
|
|
621
|
+
*
|
|
622
|
+
* for await (const person of stream) {
|
|
623
|
+
* console.log(person.first_name)
|
|
624
|
+
*
|
|
625
|
+
* if (person.last_name === 'Something') {
|
|
626
|
+
* // Breaking or returning before the stream has ended will release
|
|
627
|
+
* // the database connection and invalidate the stream.
|
|
628
|
+
* break
|
|
629
|
+
* }
|
|
630
|
+
* }
|
|
631
|
+
* ```
|
|
632
|
+
*/
|
|
633
|
+
stream(chunkSize?: number): AsyncIterableIterator<O>;
|
|
605
634
|
/**
|
|
606
|
-
* Executes query with `explain` statement before
|
|
635
|
+
* Executes query with `explain` statement before the main query.
|
|
607
636
|
*
|
|
608
637
|
* ```ts
|
|
609
638
|
* const explained = await db
|
|
610
|
-
* .
|
|
611
|
-
* .
|
|
639
|
+
* .selectFrom('person')
|
|
640
|
+
* .where('gender', '=', 'female')
|
|
641
|
+
* .selectAll()
|
|
612
642
|
* .explain('json')
|
|
613
643
|
* ```
|
|
614
644
|
*
|
|
615
645
|
* The generated SQL (MySQL):
|
|
616
646
|
*
|
|
617
647
|
* ```sql
|
|
618
|
-
* explain format=json
|
|
648
|
+
* explain format=json select * from `person` where `gender` = ?
|
|
649
|
+
* ```
|
|
650
|
+
*
|
|
651
|
+
* You can also execute `explain analyze` statements.
|
|
652
|
+
*
|
|
653
|
+
* ```ts
|
|
654
|
+
* import { sql } from 'kysely'
|
|
655
|
+
*
|
|
656
|
+
* const explained = await db
|
|
657
|
+
* .selectFrom('person')
|
|
658
|
+
* .where('gender', '=', 'female')
|
|
659
|
+
* .selectAll()
|
|
660
|
+
* .explain('json', sql`analyze`)
|
|
661
|
+
* ```
|
|
662
|
+
*
|
|
663
|
+
* The generated SQL (PostgreSQL):
|
|
664
|
+
*
|
|
665
|
+
* ```sql
|
|
666
|
+
* explain (analyze, format json) select * from "person" where "gender" = $1
|
|
619
667
|
* ```
|
|
620
668
|
*/
|
|
621
669
|
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
|
|
@@ -15,14 +15,13 @@ const expression_parser_js_1 = require("../parser/expression-parser.js");
|
|
|
15
15
|
const column_node_js_1 = require("../operation-node/column-node.js");
|
|
16
16
|
const on_conflict_builder_js_1 = require("./on-conflict-builder.js");
|
|
17
17
|
const on_conflict_node_js_1 = require("../operation-node/on-conflict-node.js");
|
|
18
|
-
const explain_node_js_1 = require("../operation-node/explain-node.js");
|
|
19
18
|
class InsertQueryBuilder {
|
|
20
19
|
#props;
|
|
21
20
|
constructor(props) {
|
|
22
21
|
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
23
22
|
}
|
|
24
|
-
values(
|
|
25
|
-
const [columns, values] = (0, insert_values_parser_js_1.
|
|
23
|
+
values(insert) {
|
|
24
|
+
const [columns, values] = (0, insert_values_parser_js_1.parseInsertExpression)(insert);
|
|
26
25
|
return new InsertQueryBuilder({
|
|
27
26
|
...this.#props,
|
|
28
27
|
queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
@@ -161,7 +160,6 @@ class InsertQueryBuilder {
|
|
|
161
160
|
* .doUpdateSet({ species: 'hamster' })
|
|
162
161
|
* )
|
|
163
162
|
* .execute()
|
|
164
|
-
* .execute()
|
|
165
163
|
* ```
|
|
166
164
|
*
|
|
167
165
|
* The generated SQL (PostgreSQL):
|
|
@@ -296,18 +294,18 @@ class InsertQueryBuilder {
|
|
|
296
294
|
* .onDuplicateKeyUpdate({ species: 'hamster' })
|
|
297
295
|
* ```
|
|
298
296
|
*/
|
|
299
|
-
onDuplicateKeyUpdate(
|
|
297
|
+
onDuplicateKeyUpdate(update) {
|
|
300
298
|
return new InsertQueryBuilder({
|
|
301
299
|
...this.#props,
|
|
302
300
|
queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
303
|
-
onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.
|
|
301
|
+
onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateExpression)(update)),
|
|
304
302
|
}),
|
|
305
303
|
});
|
|
306
304
|
}
|
|
307
305
|
returning(selection) {
|
|
308
306
|
return new InsertQueryBuilder({
|
|
309
307
|
...this.#props,
|
|
310
|
-
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.
|
|
308
|
+
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(selection)),
|
|
311
309
|
});
|
|
312
310
|
}
|
|
313
311
|
returningAll() {
|
|
@@ -317,7 +315,8 @@ class InsertQueryBuilder {
|
|
|
317
315
|
});
|
|
318
316
|
}
|
|
319
317
|
/**
|
|
320
|
-
* Simply calls the
|
|
318
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
319
|
+
* what the provided function returns.
|
|
321
320
|
*
|
|
322
321
|
* If you want to conditionally call a method on `this`, see
|
|
323
322
|
* the {@link $if} method.
|
|
@@ -443,7 +442,7 @@ class InsertQueryBuilder {
|
|
|
443
442
|
* )
|
|
444
443
|
* .with('new_pet', (qb) => qb
|
|
445
444
|
* .insertInto('pet')
|
|
446
|
-
* .values(
|
|
445
|
+
* .values((eb) => ({ owner_id: eb.selectFrom('new_person').select('id'), ...pet }))
|
|
447
446
|
* .returning(['name as pet_name', 'species'])
|
|
448
447
|
* .$assertType<{ pet_name: string, species: Species }>()
|
|
449
448
|
* )
|
|
@@ -507,38 +506,30 @@ class InsertQueryBuilder {
|
|
|
507
506
|
* the query returned no result.
|
|
508
507
|
*
|
|
509
508
|
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
510
|
-
* provide a custom error class as the only argument to throw a different
|
|
509
|
+
* provide a custom error class, or callback as the only argument to throw a different
|
|
511
510
|
* error.
|
|
512
511
|
*/
|
|
513
512
|
async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
|
|
514
513
|
const result = await this.executeTakeFirst();
|
|
515
514
|
if (result === undefined) {
|
|
516
|
-
|
|
515
|
+
const error = (0, no_result_error_js_1.isNoResultErrorConstructor)(errorConstructor)
|
|
516
|
+
? new errorConstructor(this.toOperationNode())
|
|
517
|
+
: errorConstructor(this.toOperationNode());
|
|
518
|
+
throw error;
|
|
517
519
|
}
|
|
518
520
|
return result;
|
|
519
521
|
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
* .explain('json')
|
|
528
|
-
* ```
|
|
529
|
-
*
|
|
530
|
-
* The generated SQL (MySQL):
|
|
531
|
-
*
|
|
532
|
-
* ```sql
|
|
533
|
-
* explain format=json insert into `person` (`id`, `first_name`, `last_name`) values (?, ?, ?) (?, ?, ?)
|
|
534
|
-
* ```
|
|
535
|
-
*/
|
|
522
|
+
async *stream(chunkSize = 100) {
|
|
523
|
+
const compiledQuery = this.compile();
|
|
524
|
+
const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
|
|
525
|
+
for await (const item of stream) {
|
|
526
|
+
yield* item.rows;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
536
529
|
async explain(format, options) {
|
|
537
530
|
const builder = new InsertQueryBuilder({
|
|
538
531
|
...this.#props,
|
|
539
|
-
queryNode:
|
|
540
|
-
explain: explain_node_js_1.ExplainNode.create(format, options?.toOperationNode()),
|
|
541
|
-
}),
|
|
532
|
+
queryNode: query_node_js_1.QueryNode.cloneWithExplain(this.#props.queryNode, format, options),
|
|
542
533
|
});
|
|
543
534
|
return await builder.execute();
|
|
544
535
|
}
|