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