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
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expressionBuilder = exports.createExpressionBuilder = void 0;
|
|
4
|
+
const select_query_builder_js_1 = require("../query-builder/select-query-builder.js");
|
|
5
|
+
const select_query_node_js_1 = require("../operation-node/select-query-node.js");
|
|
6
|
+
const table_parser_js_1 = require("../parser/table-parser.js");
|
|
7
|
+
const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
|
|
8
|
+
const query_id_js_1 = require("../util/query-id.js");
|
|
9
|
+
const function_module_js_1 = require("../query-builder/function-module.js");
|
|
10
|
+
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
11
|
+
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
12
|
+
const and_node_js_1 = require("../operation-node/and-node.js");
|
|
13
|
+
const or_node_js_1 = require("../operation-node/or-node.js");
|
|
14
|
+
const parens_node_js_1 = require("../operation-node/parens-node.js");
|
|
15
|
+
const expression_wrapper_js_1 = require("./expression-wrapper.js");
|
|
16
|
+
const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
|
|
17
|
+
const value_parser_js_1 = require("../parser/value-parser.js");
|
|
18
|
+
const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
|
|
19
|
+
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
20
|
+
function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_EXECUTOR) {
|
|
21
|
+
function unary(op, expr) {
|
|
22
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, unary_operation_parser_js_1.parseUnaryOperation)(op, expr));
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
get fn() {
|
|
26
|
+
return (0, function_module_js_1.createFunctionModule)();
|
|
27
|
+
},
|
|
28
|
+
selectFrom(table) {
|
|
29
|
+
return new select_query_builder_js_1.SelectQueryBuilder({
|
|
30
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
31
|
+
executor: executor,
|
|
32
|
+
queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(table)),
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
ref(reference) {
|
|
36
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, reference_parser_js_1.parseStringReference)(reference));
|
|
37
|
+
},
|
|
38
|
+
val(value) {
|
|
39
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value));
|
|
40
|
+
},
|
|
41
|
+
cmpr(lhs, op, rhs) {
|
|
42
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
|
|
43
|
+
},
|
|
44
|
+
bxp(lhs, op, rhs) {
|
|
45
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
|
|
46
|
+
},
|
|
47
|
+
unary,
|
|
48
|
+
not(expr) {
|
|
49
|
+
return unary('not', expr);
|
|
50
|
+
},
|
|
51
|
+
exists(expr) {
|
|
52
|
+
return unary('exists', expr);
|
|
53
|
+
},
|
|
54
|
+
neg(expr) {
|
|
55
|
+
return unary('-', expr);
|
|
56
|
+
},
|
|
57
|
+
and(exprs) {
|
|
58
|
+
if (exprs.length === 0) {
|
|
59
|
+
return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(true));
|
|
60
|
+
}
|
|
61
|
+
else if (exprs.length === 1) {
|
|
62
|
+
return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
|
|
63
|
+
}
|
|
64
|
+
let node = and_node_js_1.AndNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
|
|
65
|
+
for (let i = 2; i < exprs.length; ++i) {
|
|
66
|
+
node = and_node_js_1.AndNode.create(node, exprs[i].toOperationNode());
|
|
67
|
+
}
|
|
68
|
+
return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
|
|
69
|
+
},
|
|
70
|
+
or(exprs) {
|
|
71
|
+
if (exprs.length === 0) {
|
|
72
|
+
return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(false));
|
|
73
|
+
}
|
|
74
|
+
else if (exprs.length === 1) {
|
|
75
|
+
return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
|
|
76
|
+
}
|
|
77
|
+
let node = or_node_js_1.OrNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
|
|
78
|
+
for (let i = 2; i < exprs.length; ++i) {
|
|
79
|
+
node = or_node_js_1.OrNode.create(node, exprs[i].toOperationNode());
|
|
80
|
+
}
|
|
81
|
+
return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
|
|
82
|
+
},
|
|
83
|
+
withSchema(schema) {
|
|
84
|
+
return createExpressionBuilder(executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)));
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
exports.createExpressionBuilder = createExpressionBuilder;
|
|
89
|
+
function expressionBuilder(_) {
|
|
90
|
+
return createExpressionBuilder();
|
|
91
|
+
}
|
|
92
|
+
exports.expressionBuilder = expressionBuilder;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
3
|
+
import { AliasedExpression, Expression } from './expression.js';
|
|
4
|
+
export declare class ExpressionWrapper<T> implements Expression<T> {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(node: OperationNode);
|
|
7
|
+
/** @private */
|
|
8
|
+
/**
|
|
9
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
10
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
14
|
+
* get expressionType(): T | undefined {
|
|
15
|
+
* return undefined
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
21
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
22
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
23
|
+
*/
|
|
24
|
+
get expressionType(): T | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Returns an aliased version of the expression.
|
|
27
|
+
*
|
|
28
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
29
|
+
* this method also provides strict typing:
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* const result = await db
|
|
33
|
+
* .selectFrom('person')
|
|
34
|
+
* .select(eb =>
|
|
35
|
+
* eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
|
|
36
|
+
* )
|
|
37
|
+
* .executeTakeFirstOrThrow()
|
|
38
|
+
*
|
|
39
|
+
* // `is_jennifer: SqlBool` field exists in the result type.
|
|
40
|
+
* console.log(result.is_jennifer)
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* The generated SQL (PostgreSQL):
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* select "first_name" = $1 as "is_jennifer"
|
|
47
|
+
* from "person"
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
as<A extends string>(alias: A): AliasedExpression<T, A>;
|
|
51
|
+
as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
|
|
52
|
+
/**
|
|
53
|
+
* Change the output type of the raw expression.
|
|
54
|
+
*
|
|
55
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
56
|
+
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
57
|
+
*/
|
|
58
|
+
$castTo<T>(): ExpressionWrapper<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
61
|
+
*
|
|
62
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
63
|
+
* template tag to build the node:
|
|
64
|
+
*
|
|
65
|
+
* ```ts
|
|
66
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
67
|
+
* toOperationNode(): OperationNode {
|
|
68
|
+
* return sql`some sql here`.toOperationNode()
|
|
69
|
+
* }
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
toOperationNode(): OperationNode;
|
|
74
|
+
}
|
|
75
|
+
export declare class AliasedExpressionWrapper<T, A extends string> implements AliasedExpression<T, A> {
|
|
76
|
+
#private;
|
|
77
|
+
constructor(expr: Expression<T>, alias: A | Expression<unknown>);
|
|
78
|
+
/** @private */
|
|
79
|
+
/**
|
|
80
|
+
* Returns the aliased expression.
|
|
81
|
+
*/
|
|
82
|
+
get expression(): Expression<T>;
|
|
83
|
+
/** @private */
|
|
84
|
+
/**
|
|
85
|
+
* Returns the alias.
|
|
86
|
+
*/
|
|
87
|
+
get alias(): A | Expression<unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
90
|
+
*/
|
|
91
|
+
toOperationNode(): AliasNode;
|
|
92
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
|
|
4
|
+
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
|
+
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
6
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
7
|
+
class ExpressionWrapper {
|
|
8
|
+
#node;
|
|
9
|
+
constructor(node) {
|
|
10
|
+
this.#node = node;
|
|
11
|
+
}
|
|
12
|
+
/** @private */
|
|
13
|
+
get expressionType() {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
as(alias) {
|
|
17
|
+
return new AliasedExpressionWrapper(this, alias);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Change the output type of the raw expression.
|
|
21
|
+
*
|
|
22
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
23
|
+
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
24
|
+
*/
|
|
25
|
+
$castTo() {
|
|
26
|
+
return new ExpressionWrapper(this.#node);
|
|
27
|
+
}
|
|
28
|
+
toOperationNode() {
|
|
29
|
+
return this.#node;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ExpressionWrapper = ExpressionWrapper;
|
|
33
|
+
class AliasedExpressionWrapper {
|
|
34
|
+
#expr;
|
|
35
|
+
#alias;
|
|
36
|
+
constructor(expr, alias) {
|
|
37
|
+
this.#expr = expr;
|
|
38
|
+
this.#alias = alias;
|
|
39
|
+
}
|
|
40
|
+
/** @private */
|
|
41
|
+
get expression() {
|
|
42
|
+
return this.#expr;
|
|
43
|
+
}
|
|
44
|
+
/** @private */
|
|
45
|
+
get alias() {
|
|
46
|
+
return this.#alias;
|
|
47
|
+
}
|
|
48
|
+
toOperationNode() {
|
|
49
|
+
return alias_node_js_1.AliasNode.create(this.#expr.toOperationNode(), (0, operation_node_source_js_1.isOperationNodeSource)(this.#alias)
|
|
50
|
+
? this.#alias.toOperationNode()
|
|
51
|
+
: identifier_node_js_1.IdentifierNode.create(this.#alias));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.AliasedExpressionWrapper = AliasedExpressionWrapper;
|
|
@@ -90,7 +90,7 @@ export interface AliasedExpression<T, A extends string> extends OperationNodeSou
|
|
|
90
90
|
/**
|
|
91
91
|
* Returns the alias.
|
|
92
92
|
*/
|
|
93
|
-
get alias(): A
|
|
93
|
+
get alias(): A | Expression<unknown>;
|
|
94
94
|
/**
|
|
95
95
|
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
96
96
|
*/
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Expression } from '../expression/expression.js';
|
|
2
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
3
|
+
import { Simplify } from '../util/type-utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
8
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
9
|
+
* may not parse the nested results into arrays.
|
|
10
|
+
*
|
|
11
|
+
* ### Examples
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const result = await db
|
|
15
|
+
* .selectFrom('person')
|
|
16
|
+
* .select((eb) => [
|
|
17
|
+
* 'id',
|
|
18
|
+
* jsonArrayFrom(
|
|
19
|
+
* eb.selectFrom('pet')
|
|
20
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
21
|
+
* .where('pet.owner_id', '=', 'person.id')
|
|
22
|
+
* .orderBy('pet.name')
|
|
23
|
+
* ).as('pets')
|
|
24
|
+
* ])
|
|
25
|
+
* .execute()
|
|
26
|
+
*
|
|
27
|
+
* result[0].id
|
|
28
|
+
* result[0].pets[0].pet_id
|
|
29
|
+
* result[0].pets[0].name
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* The generated SQL (PostgreSQL):
|
|
33
|
+
*
|
|
34
|
+
* ```sql
|
|
35
|
+
* select "id", (
|
|
36
|
+
* select coalesce(jsonb_agg(agg), '[]') from (
|
|
37
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
38
|
+
* from "pet"
|
|
39
|
+
* where "pet"."owner_id" = "person"."id"
|
|
40
|
+
* order by "pet"."name"
|
|
41
|
+
* ) as agg
|
|
42
|
+
* ) as "pets"
|
|
43
|
+
* from "person"
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>[]>;
|
|
47
|
+
/**
|
|
48
|
+
* A postgres helper for turning a subquery (or other expression) into a JSONB object.
|
|
49
|
+
*
|
|
50
|
+
* The subquery must only return one row.
|
|
51
|
+
*
|
|
52
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
53
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
54
|
+
* may not parse the nested results into objects.
|
|
55
|
+
*
|
|
56
|
+
* ### Examples
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* const result = await db
|
|
60
|
+
* .selectFrom('person')
|
|
61
|
+
* .select((eb) => [
|
|
62
|
+
* 'id',
|
|
63
|
+
* jsonObjectFrom(
|
|
64
|
+
* eb.selectFrom('pet')
|
|
65
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
66
|
+
* .where('pet.owner_id', '=', 'person.id')
|
|
67
|
+
* .where('pet.is_favorite', '=', true)
|
|
68
|
+
* ).as('favorite_pet')
|
|
69
|
+
* ])
|
|
70
|
+
* .execute()
|
|
71
|
+
*
|
|
72
|
+
* result[0].id
|
|
73
|
+
* result[0].favorite_pet.pet_id
|
|
74
|
+
* result[0].favorite_pet.name
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* The generated SQL (PostgreSQL):
|
|
78
|
+
*
|
|
79
|
+
* ```sql
|
|
80
|
+
* select "id", (
|
|
81
|
+
* select to_jsonb(obj) from (
|
|
82
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
83
|
+
* from "pet"
|
|
84
|
+
* where "pet"."owner_id" = "person"."id"
|
|
85
|
+
* and "pet"."is_favorite" = $1
|
|
86
|
+
* ) as obj
|
|
87
|
+
* ) as "favorite_pet"
|
|
88
|
+
* from "person"
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>>;
|
|
92
|
+
/**
|
|
93
|
+
* The PostgreSQL `jsonb_build_object` function.
|
|
94
|
+
*
|
|
95
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
96
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
97
|
+
* may not parse the nested results into objects.
|
|
98
|
+
*
|
|
99
|
+
* ### Examples
|
|
100
|
+
*
|
|
101
|
+
* ```ts
|
|
102
|
+
* const result = await db
|
|
103
|
+
* .selectFrom('person')
|
|
104
|
+
* .select((eb) => [
|
|
105
|
+
* 'id',
|
|
106
|
+
* jsonbBuildObject({
|
|
107
|
+
* first: eb.ref('first_name'),
|
|
108
|
+
* last: eb.ref('last_name'),
|
|
109
|
+
* full: sql<string>`first_name || ' ' || last_name`
|
|
110
|
+
* }).as('name')
|
|
111
|
+
* ])
|
|
112
|
+
* .execute()
|
|
113
|
+
*
|
|
114
|
+
* result[0].id
|
|
115
|
+
* result[0].name.first
|
|
116
|
+
* result[0].name.last
|
|
117
|
+
* result[0].name.full
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* The generated SQL (PostgreSQL):
|
|
121
|
+
*
|
|
122
|
+
* ```sql
|
|
123
|
+
* select "id", jsonb_build_object(
|
|
124
|
+
* 'first', first_name,
|
|
125
|
+
* 'last', last_name,
|
|
126
|
+
* 'full', first_name || ' ' || last_name
|
|
127
|
+
* ) as "name"
|
|
128
|
+
* from "person"
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function jsonbBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
|
|
132
|
+
[K in keyof O]: O[K] extends Expression<infer V> ? V : never;
|
|
133
|
+
}>>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonbBuildObject = exports.jsonObjectFrom = exports.jsonArrayFrom = void 0;
|
|
4
|
+
const sql_js_1 = require("../raw-builder/sql.js");
|
|
5
|
+
/**
|
|
6
|
+
* A postgres helper for aggregating a subquery (or other expression) into a JSONB array.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
9
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
10
|
+
* may not parse the nested results into arrays.
|
|
11
|
+
*
|
|
12
|
+
* ### Examples
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* const result = await db
|
|
16
|
+
* .selectFrom('person')
|
|
17
|
+
* .select((eb) => [
|
|
18
|
+
* 'id',
|
|
19
|
+
* jsonArrayFrom(
|
|
20
|
+
* eb.selectFrom('pet')
|
|
21
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
22
|
+
* .where('pet.owner_id', '=', 'person.id')
|
|
23
|
+
* .orderBy('pet.name')
|
|
24
|
+
* ).as('pets')
|
|
25
|
+
* ])
|
|
26
|
+
* .execute()
|
|
27
|
+
*
|
|
28
|
+
* result[0].id
|
|
29
|
+
* result[0].pets[0].pet_id
|
|
30
|
+
* result[0].pets[0].name
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* The generated SQL (PostgreSQL):
|
|
34
|
+
*
|
|
35
|
+
* ```sql
|
|
36
|
+
* select "id", (
|
|
37
|
+
* select coalesce(jsonb_agg(agg), '[]') from (
|
|
38
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
39
|
+
* from "pet"
|
|
40
|
+
* where "pet"."owner_id" = "person"."id"
|
|
41
|
+
* order by "pet"."name"
|
|
42
|
+
* ) as agg
|
|
43
|
+
* ) as "pets"
|
|
44
|
+
* from "person"
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function jsonArrayFrom(expr) {
|
|
48
|
+
return (0, sql_js_1.sql) `(select coalesce(jsonb_agg(agg), '[]') from ${expr} as agg)`;
|
|
49
|
+
}
|
|
50
|
+
exports.jsonArrayFrom = jsonArrayFrom;
|
|
51
|
+
/**
|
|
52
|
+
* A postgres helper for turning a subquery (or other expression) into a JSONB object.
|
|
53
|
+
*
|
|
54
|
+
* The subquery must only return one row.
|
|
55
|
+
*
|
|
56
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
57
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
58
|
+
* may not parse the nested results into objects.
|
|
59
|
+
*
|
|
60
|
+
* ### Examples
|
|
61
|
+
*
|
|
62
|
+
* ```ts
|
|
63
|
+
* const result = await db
|
|
64
|
+
* .selectFrom('person')
|
|
65
|
+
* .select((eb) => [
|
|
66
|
+
* 'id',
|
|
67
|
+
* jsonObjectFrom(
|
|
68
|
+
* eb.selectFrom('pet')
|
|
69
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
70
|
+
* .where('pet.owner_id', '=', 'person.id')
|
|
71
|
+
* .where('pet.is_favorite', '=', true)
|
|
72
|
+
* ).as('favorite_pet')
|
|
73
|
+
* ])
|
|
74
|
+
* .execute()
|
|
75
|
+
*
|
|
76
|
+
* result[0].id
|
|
77
|
+
* result[0].favorite_pet.pet_id
|
|
78
|
+
* result[0].favorite_pet.name
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* The generated SQL (PostgreSQL):
|
|
82
|
+
*
|
|
83
|
+
* ```sql
|
|
84
|
+
* select "id", (
|
|
85
|
+
* select to_jsonb(obj) from (
|
|
86
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
87
|
+
* from "pet"
|
|
88
|
+
* where "pet"."owner_id" = "person"."id"
|
|
89
|
+
* and "pet"."is_favorite" = $1
|
|
90
|
+
* ) as obj
|
|
91
|
+
* ) as "favorite_pet"
|
|
92
|
+
* from "person"
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
function jsonObjectFrom(expr) {
|
|
96
|
+
return (0, sql_js_1.sql) `(select to_jsonb(obj) from ${expr} as obj)`;
|
|
97
|
+
}
|
|
98
|
+
exports.jsonObjectFrom = jsonObjectFrom;
|
|
99
|
+
/**
|
|
100
|
+
* The PostgreSQL `jsonb_build_object` function.
|
|
101
|
+
*
|
|
102
|
+
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
103
|
+
* While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
|
|
104
|
+
* may not parse the nested results into objects.
|
|
105
|
+
*
|
|
106
|
+
* ### Examples
|
|
107
|
+
*
|
|
108
|
+
* ```ts
|
|
109
|
+
* const result = await db
|
|
110
|
+
* .selectFrom('person')
|
|
111
|
+
* .select((eb) => [
|
|
112
|
+
* 'id',
|
|
113
|
+
* jsonbBuildObject({
|
|
114
|
+
* first: eb.ref('first_name'),
|
|
115
|
+
* last: eb.ref('last_name'),
|
|
116
|
+
* full: sql<string>`first_name || ' ' || last_name`
|
|
117
|
+
* }).as('name')
|
|
118
|
+
* ])
|
|
119
|
+
* .execute()
|
|
120
|
+
*
|
|
121
|
+
* result[0].id
|
|
122
|
+
* result[0].name.first
|
|
123
|
+
* result[0].name.last
|
|
124
|
+
* result[0].name.full
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* The generated SQL (PostgreSQL):
|
|
128
|
+
*
|
|
129
|
+
* ```sql
|
|
130
|
+
* select "id", jsonb_build_object(
|
|
131
|
+
* 'first', first_name,
|
|
132
|
+
* 'last', last_name,
|
|
133
|
+
* 'full', first_name || ' ' || last_name
|
|
134
|
+
* ) as "name"
|
|
135
|
+
* from "person"
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
function jsonbBuildObject(obj) {
|
|
139
|
+
return (0, sql_js_1.sql) `jsonb_build_object(${sql_js_1.sql.join(Object.keys(obj).flatMap((k) => [sql_js_1.sql.lit(k), obj[k]]))})`;
|
|
140
|
+
}
|
|
141
|
+
exports.jsonbBuildObject = jsonbBuildObject;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './kysely.js';
|
|
2
2
|
export * from './query-creator.js';
|
|
3
3
|
export * from './expression/expression.js';
|
|
4
|
+
export { ExpressionBuilder, expressionBuilder, } from './expression/expression-builder.js';
|
|
4
5
|
export * from './query-builder/where-interface.js';
|
|
5
6
|
export * from './query-builder/returning-interface.js';
|
|
6
7
|
export * from './query-builder/having-interface.js';
|
|
@@ -10,7 +11,6 @@ export * from './query-builder/update-query-builder.js';
|
|
|
10
11
|
export * from './query-builder/delete-query-builder.js';
|
|
11
12
|
export * from './query-builder/no-result-error.js';
|
|
12
13
|
export * from './query-builder/join-builder.js';
|
|
13
|
-
export * from './query-builder/expression-builder.js';
|
|
14
14
|
export * from './query-builder/function-module.js';
|
|
15
15
|
export * from './query-builder/insert-result.js';
|
|
16
16
|
export * from './query-builder/delete-result.js';
|
|
@@ -163,11 +163,12 @@ export * from './operation-node/using-node.js';
|
|
|
163
163
|
export * from './util/column-type.js';
|
|
164
164
|
export * from './util/compilable.js';
|
|
165
165
|
export * from './util/explainable.js';
|
|
166
|
+
export * from './util/streamable.js';
|
|
166
167
|
export * from './util/log.js';
|
|
167
|
-
export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, AnySelectQueryBuilder, Equals, UnknownRow, } from './util/type-utils.js';
|
|
168
|
+
export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, AnySelectQueryBuilder, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
|
|
168
169
|
export * from './util/infer-result.js';
|
|
169
170
|
export { logOnce } from './util/log-once.js';
|
|
170
|
-
export { SelectExpression,
|
|
171
|
+
export { SelectExpression, SelectArg, Selection, } from './parser/select-parser.js';
|
|
171
172
|
export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
|
|
172
173
|
export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
|
|
173
174
|
export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,10 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.logOnce = void 0;
|
|
17
|
+
exports.logOnce = exports.expressionBuilder = void 0;
|
|
18
18
|
__exportStar(require("./kysely.js"), exports);
|
|
19
19
|
__exportStar(require("./query-creator.js"), exports);
|
|
20
20
|
__exportStar(require("./expression/expression.js"), exports);
|
|
21
|
+
var expression_builder_js_1 = require("./expression/expression-builder.js");
|
|
22
|
+
Object.defineProperty(exports, "expressionBuilder", { enumerable: true, get: function () { return expression_builder_js_1.expressionBuilder; } });
|
|
21
23
|
__exportStar(require("./query-builder/where-interface.js"), exports);
|
|
22
24
|
__exportStar(require("./query-builder/returning-interface.js"), exports);
|
|
23
25
|
__exportStar(require("./query-builder/having-interface.js"), exports);
|
|
@@ -27,7 +29,6 @@ __exportStar(require("./query-builder/update-query-builder.js"), exports);
|
|
|
27
29
|
__exportStar(require("./query-builder/delete-query-builder.js"), exports);
|
|
28
30
|
__exportStar(require("./query-builder/no-result-error.js"), exports);
|
|
29
31
|
__exportStar(require("./query-builder/join-builder.js"), exports);
|
|
30
|
-
__exportStar(require("./query-builder/expression-builder.js"), exports);
|
|
31
32
|
__exportStar(require("./query-builder/function-module.js"), exports);
|
|
32
33
|
__exportStar(require("./query-builder/insert-result.js"), exports);
|
|
33
34
|
__exportStar(require("./query-builder/delete-result.js"), exports);
|
|
@@ -180,6 +181,7 @@ __exportStar(require("./operation-node/using-node.js"), exports);
|
|
|
180
181
|
__exportStar(require("./util/column-type.js"), exports);
|
|
181
182
|
__exportStar(require("./util/compilable.js"), exports);
|
|
182
183
|
__exportStar(require("./util/explainable.js"), exports);
|
|
184
|
+
__exportStar(require("./util/streamable.js"), exports);
|
|
183
185
|
__exportStar(require("./util/log.js"), exports);
|
|
184
186
|
__exportStar(require("./util/infer-result.js"), exports);
|
|
185
187
|
var log_once_js_1 = require("./util/log-once.js");
|
package/dist/cjs/kysely.d.ts
CHANGED
|
@@ -9,6 +9,10 @@ import { Driver, IsolationLevel } from './driver/driver.js';
|
|
|
9
9
|
import { FunctionModule } from './query-builder/function-module.js';
|
|
10
10
|
import { LogConfig } from './util/log.js';
|
|
11
11
|
import { QueryExecutorProvider } from './query-executor/query-executor-provider.js';
|
|
12
|
+
import { QueryResult } from './driver/database-connection.js';
|
|
13
|
+
import { CompiledQuery } from './query-compiler/compiled-query.js';
|
|
14
|
+
import { QueryId } from './util/query-id.js';
|
|
15
|
+
import { Compilable } from './util/compilable.js';
|
|
12
16
|
/**
|
|
13
17
|
* The main Kysely class.
|
|
14
18
|
*
|
|
@@ -225,6 +229,12 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
|
|
|
225
229
|
* @private
|
|
226
230
|
*/
|
|
227
231
|
getExecutor(): QueryExecutor;
|
|
232
|
+
/**
|
|
233
|
+
* Executes a given compiled query or query builder.
|
|
234
|
+
*
|
|
235
|
+
* See {@link https://github.com/koskimas/kysely/blob/master/site/docs/recipes/splitting-build-compile-and-execute-code.md#execute-compiled-queries splitting build, compile and execute code recipe} for more information.
|
|
236
|
+
*/
|
|
237
|
+
executeQuery<R>(query: CompiledQuery<R> | Compilable<R>, queryId?: QueryId): Promise<QueryResult<R>>;
|
|
228
238
|
}
|
|
229
239
|
export declare class Transaction<DB> extends Kysely<DB> {
|
|
230
240
|
#private;
|
package/dist/cjs/kysely.js
CHANGED
|
@@ -13,6 +13,8 @@ const driver_js_1 = require("./driver/driver.js");
|
|
|
13
13
|
const prevent_await_js_1 = require("./util/prevent-await.js");
|
|
14
14
|
const function_module_js_1 = require("./query-builder/function-module.js");
|
|
15
15
|
const log_js_1 = require("./util/log.js");
|
|
16
|
+
const query_id_js_1 = require("./util/query-id.js");
|
|
17
|
+
const compilable_js_1 = require("./util/compilable.js");
|
|
16
18
|
/**
|
|
17
19
|
* The main Kysely class.
|
|
18
20
|
*
|
|
@@ -135,7 +137,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
135
137
|
* ```
|
|
136
138
|
*/
|
|
137
139
|
get fn() {
|
|
138
|
-
return
|
|
140
|
+
return (0, function_module_js_1.createFunctionModule)();
|
|
139
141
|
}
|
|
140
142
|
/**
|
|
141
143
|
* Creates a {@link TransactionBuilder} that can be used to run queries inside a transaction.
|
|
@@ -284,6 +286,15 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
284
286
|
getExecutor() {
|
|
285
287
|
return this.#props.executor;
|
|
286
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Executes a given compiled query or query builder.
|
|
291
|
+
*
|
|
292
|
+
* See {@link https://github.com/koskimas/kysely/blob/master/site/docs/recipes/splitting-build-compile-and-execute-code.md#execute-compiled-queries splitting build, compile and execute code recipe} for more information.
|
|
293
|
+
*/
|
|
294
|
+
executeQuery(query, queryId = (0, query_id_js_1.createQueryId)()) {
|
|
295
|
+
const compiledQuery = (0, compilable_js_1.isCompilable)(query) ? query.compile() : query;
|
|
296
|
+
return this.getExecutor().executeQuery(compiledQuery, queryId);
|
|
297
|
+
}
|
|
287
298
|
}
|
|
288
299
|
exports.Kysely = Kysely;
|
|
289
300
|
class Transaction extends Kysely {
|
|
@@ -22,8 +22,11 @@ export declare class FileMigrationProvider implements MigrationProvider {
|
|
|
22
22
|
* Returns all migrations, old and new.
|
|
23
23
|
*
|
|
24
24
|
* For example if you have your migrations in a folder as separate files,
|
|
25
|
-
* you can
|
|
26
|
-
*
|
|
25
|
+
* you can implement this method to return all migration in that folder
|
|
26
|
+
* as {@link Migration} objects.
|
|
27
|
+
*
|
|
28
|
+
* Kysely already has a built-in {@link FileMigrationProvider} for node.js
|
|
29
|
+
* that does exactly that.
|
|
27
30
|
*
|
|
28
31
|
* The keys of the returned object are migration names and values are the
|
|
29
32
|
* migrations. The order of the migrations is determined by the alphabetical
|
|
@@ -258,8 +258,11 @@ export interface MigrationProvider {
|
|
|
258
258
|
* Returns all migrations, old and new.
|
|
259
259
|
*
|
|
260
260
|
* For example if you have your migrations in a folder as separate files,
|
|
261
|
-
* you can
|
|
262
|
-
*
|
|
261
|
+
* you can implement this method to return all migration in that folder
|
|
262
|
+
* as {@link Migration} objects.
|
|
263
|
+
*
|
|
264
|
+
* Kysely already has a built-in {@link FileMigrationProvider} for node.js
|
|
265
|
+
* that does exactly that.
|
|
263
266
|
*
|
|
264
267
|
* The keys of the returned object are migration names and values are the
|
|
265
268
|
* migrations. The order of the migrations is determined by the alphabetical
|