kysely 0.22.0 → 0.23.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/CONTRIBUTING.md +70 -0
- package/README.md +25 -2
- package/dist/cjs/dialect/database-introspector.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +6 -3
- package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +7 -2
- package/dist/cjs/dialect/postgres/postgres-introspector.js +8 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +4 -3
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +6 -2
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +2 -3
- package/dist/cjs/dynamic/dynamic-reference-builder.js +1 -1
- package/dist/cjs/expression/expression.d.ts +100 -0
- package/dist/cjs/expression/expression.js +16 -0
- package/dist/cjs/index.d.ts +10 -6
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/migration/file-migration-provider.js +5 -3
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +7 -4
- package/dist/cjs/operation-node/aggregate-function-node.js +17 -0
- package/dist/cjs/operation-node/alias-node.d.ts +3 -11
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
- package/dist/cjs/operation-node/alter-table-node.js +9 -1
- package/dist/cjs/operation-node/and-node.d.ts +3 -4
- package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
- package/dist/cjs/operation-node/binary-operation-node.js +20 -0
- package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
- package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
- package/dist/cjs/operation-node/column-definition-node.js +16 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
- package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
- package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.js +1 -2
- package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
- package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-type-node.js +1 -2
- package/dist/cjs/operation-node/explain-node.d.ts +2 -4
- package/dist/cjs/operation-node/explain-node.js +1 -1
- package/dist/cjs/operation-node/from-node.d.ts +3 -4
- package/dist/cjs/operation-node/generated-node.d.ts +2 -3
- package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
- package/dist/cjs/operation-node/having-node.d.ts +3 -4
- package/dist/cjs/operation-node/having-node.js +4 -4
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -5
- package/dist/cjs/operation-node/join-node.d.ts +5 -9
- package/dist/cjs/operation-node/join-node.js +6 -6
- package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
- package/dist/cjs/operation-node/on-conflict-node.js +12 -12
- package/dist/cjs/operation-node/on-node.d.ts +3 -4
- package/dist/cjs/operation-node/on-node.js +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -2
- package/dist/cjs/operation-node/operation-node-transformer.js +22 -15
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -2
- package/dist/cjs/operation-node/operation-node-visitor.js +2 -1
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +5 -3
- package/dist/cjs/operation-node/operator-node.js +3 -5
- package/dist/cjs/operation-node/or-node.d.ts +3 -4
- package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
- package/dist/cjs/operation-node/parens-node.d.ts +2 -3
- package/dist/cjs/operation-node/partition-by-item-node.d.ts +3 -4
- package/dist/cjs/operation-node/query-node.d.ts +2 -3
- package/dist/cjs/operation-node/query-node.js +6 -6
- package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
- package/dist/cjs/operation-node/select-modifier-node.js +1 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -6
- package/dist/cjs/operation-node/select-query-node.js +10 -10
- package/dist/cjs/operation-node/selection-node.d.ts +2 -3
- package/dist/cjs/operation-node/set-operation-node.d.ts +2 -5
- package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
- package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
- package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
- package/dist/cjs/operation-node/unary-operation-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
- package/dist/cjs/operation-node/value-list-node.d.ts +2 -9
- package/dist/cjs/operation-node/where-node.d.ts +3 -4
- package/dist/cjs/operation-node/where-node.js +4 -4
- package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
- package/dist/cjs/parser/binary-operation-parser.js +99 -0
- package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
- package/dist/cjs/parser/coalesce-parser.js +11 -0
- package/dist/cjs/parser/data-type-parser.d.ts +5 -5
- package/dist/cjs/parser/default-value-parser.d.ts +4 -5
- package/dist/cjs/parser/default-value-parser.js +2 -2
- package/dist/cjs/parser/expression-parser.d.ts +10 -0
- package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
- package/dist/cjs/parser/identifier-parser.d.ts +2 -0
- package/dist/cjs/parser/identifier-parser.js +23 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
- package/dist/cjs/parser/insert-values-parser.js +2 -2
- package/dist/cjs/parser/join-parser.js +2 -2
- package/dist/cjs/parser/order-by-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +14 -14
- package/dist/cjs/parser/reference-parser.js +12 -9
- package/dist/cjs/parser/select-parser.d.ts +6 -7
- package/dist/cjs/parser/select-parser.js +2 -2
- package/dist/cjs/parser/set-operation-parser.d.ts +2 -4
- package/dist/cjs/parser/table-parser.d.ts +11 -12
- package/dist/cjs/parser/table-parser.js +2 -2
- package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
- package/dist/cjs/parser/unary-operation-parser.js +17 -0
- package/dist/cjs/parser/update-set-parser.d.ts +1 -1
- package/dist/cjs/parser/value-parser.d.ts +5 -9
- package/dist/cjs/parser/value-parser.js +4 -4
- package/dist/cjs/parser/with-parser.d.ts +3 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +245 -14
- package/dist/cjs/query-builder/aggregate-function-builder.js +164 -12
- package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
- package/dist/cjs/query-builder/delete-query-builder.js +19 -16
- package/dist/cjs/query-builder/function-module.d.ts +123 -22
- package/dist/cjs/query-builder/function-module.js +91 -48
- package/dist/cjs/query-builder/having-interface.d.ts +9 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
- package/dist/cjs/query-builder/insert-query-builder.js +11 -9
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +12 -1
- package/dist/cjs/query-builder/join-builder.d.ts +9 -8
- package/dist/cjs/query-builder/join-builder.js +10 -9
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
- package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
- package/dist/cjs/query-builder/select-query-builder.d.ts +82 -51
- package/dist/cjs/query-builder/select-query-builder.js +39 -37
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
- package/dist/cjs/query-builder/update-query-builder.js +19 -16
- package/dist/cjs/query-builder/where-interface.d.ts +12 -11
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -3
- package/dist/cjs/query-compiler/default-query-compiler.js +37 -33
- package/dist/cjs/query-executor/query-executor-base.js +16 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
- package/dist/cjs/raw-builder/raw-builder.js +24 -14
- package/dist/cjs/raw-builder/sql.d.ts +4 -4
- package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
- package/dist/cjs/schema/alter-column-builder.js +55 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
- package/dist/cjs/schema/alter-table-builder.js +65 -280
- package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
- package/dist/cjs/schema/column-definition-builder.js +189 -0
- package/dist/cjs/schema/create-index-builder.d.ts +2 -2
- package/dist/cjs/schema/create-table-builder.d.ts +38 -5
- package/dist/cjs/schema/create-table-builder.js +36 -1
- package/dist/cjs/schema/create-view-builder.d.ts +3 -2
- package/dist/cjs/schema/schema.d.ts +2 -2
- package/dist/cjs/schema/schema.js +6 -5
- package/dist/cjs/util/compilable.d.ts +2 -2
- package/dist/cjs/util/explainable.d.ts +2 -2
- package/dist/cjs/util/infer-result.d.ts +46 -0
- package/dist/cjs/util/infer-result.js +2 -0
- package/dist/cjs/util/log-once.d.ts +5 -0
- package/dist/cjs/util/log-once.js +16 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +5 -1
- package/dist/cjs/util/type-utils.d.ts +3 -17
- package/dist/esm/dialect/database-introspector.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
- package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
- package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +6 -2
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
- package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/esm/expression/expression.d.ts +100 -0
- package/dist/esm/expression/expression.js +12 -0
- package/dist/esm/index.d.ts +10 -6
- package/dist/esm/index.js +6 -2
- package/dist/esm/migration/file-migration-provider.js +5 -3
- package/dist/esm/operation-node/aggregate-function-node.d.ts +7 -4
- package/dist/esm/operation-node/aggregate-function-node.js +17 -0
- package/dist/esm/operation-node/alias-node.d.ts +3 -11
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
- package/dist/esm/operation-node/alter-table-node.js +9 -1
- package/dist/esm/operation-node/and-node.d.ts +3 -4
- package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
- package/dist/esm/operation-node/binary-operation-node.js +18 -0
- package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
- package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
- package/dist/esm/operation-node/column-definition-node.js +16 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
- package/dist/esm/operation-node/create-index-node.d.ts +1 -3
- package/dist/esm/operation-node/create-table-node.d.ts +4 -5
- package/dist/esm/operation-node/create-type-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.js +1 -2
- package/dist/esm/operation-node/default-value-node.d.ts +2 -4
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
- package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-type-node.js +1 -2
- package/dist/esm/operation-node/explain-node.d.ts +2 -4
- package/dist/esm/operation-node/explain-node.js +1 -1
- package/dist/esm/operation-node/from-node.d.ts +3 -4
- package/dist/esm/operation-node/generated-node.d.ts +2 -3
- package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
- package/dist/esm/operation-node/having-node.d.ts +3 -4
- package/dist/esm/operation-node/having-node.js +4 -4
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -5
- package/dist/esm/operation-node/join-node.d.ts +5 -9
- package/dist/esm/operation-node/join-node.js +6 -6
- package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
- package/dist/esm/operation-node/on-conflict-node.js +12 -12
- package/dist/esm/operation-node/on-node.d.ts +3 -4
- package/dist/esm/operation-node/on-node.js +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -2
- package/dist/esm/operation-node/operation-node-transformer.js +22 -15
- package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -2
- package/dist/esm/operation-node/operation-node-visitor.js +2 -1
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +5 -3
- package/dist/esm/operation-node/operator-node.js +2 -4
- package/dist/esm/operation-node/or-node.d.ts +3 -4
- package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
- package/dist/esm/operation-node/parens-node.d.ts +2 -3
- package/dist/esm/operation-node/partition-by-item-node.d.ts +3 -4
- package/dist/esm/operation-node/query-node.d.ts +2 -3
- package/dist/esm/operation-node/query-node.js +6 -6
- package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
- package/dist/esm/operation-node/select-modifier-node.js +1 -1
- package/dist/esm/operation-node/select-query-node.d.ts +5 -6
- package/dist/esm/operation-node/select-query-node.js +10 -10
- package/dist/esm/operation-node/selection-node.d.ts +2 -3
- package/dist/esm/operation-node/set-operation-node.d.ts +2 -5
- package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
- package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
- package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
- package/dist/esm/operation-node/unary-operation-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -4
- package/dist/esm/operation-node/value-list-node.d.ts +2 -9
- package/dist/esm/operation-node/where-node.d.ts +3 -4
- package/dist/esm/operation-node/where-node.js +4 -4
- package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
- package/dist/esm/parser/binary-operation-parser.js +92 -0
- package/dist/esm/parser/coalesce-parser.d.ts +4 -0
- package/dist/esm/parser/coalesce-parser.js +8 -0
- package/dist/esm/parser/data-type-parser.d.ts +5 -5
- package/dist/esm/parser/default-value-parser.d.ts +4 -5
- package/dist/esm/parser/default-value-parser.js +2 -2
- package/dist/esm/parser/expression-parser.d.ts +10 -0
- package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
- package/dist/esm/parser/identifier-parser.d.ts +2 -0
- package/dist/esm/parser/identifier-parser.js +20 -0
- package/dist/esm/parser/insert-values-parser.d.ts +1 -1
- package/dist/esm/parser/insert-values-parser.js +2 -2
- package/dist/esm/parser/join-parser.js +2 -2
- package/dist/esm/parser/order-by-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +14 -14
- package/dist/esm/parser/reference-parser.js +10 -8
- package/dist/esm/parser/select-parser.d.ts +6 -7
- package/dist/esm/parser/select-parser.js +2 -2
- package/dist/esm/parser/set-operation-parser.d.ts +2 -4
- package/dist/esm/parser/table-parser.d.ts +11 -12
- package/dist/esm/parser/table-parser.js +2 -2
- package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
- package/dist/esm/parser/unary-operation-parser.js +13 -0
- package/dist/esm/parser/update-set-parser.d.ts +1 -1
- package/dist/esm/parser/value-parser.d.ts +5 -9
- package/dist/esm/parser/value-parser.js +4 -4
- package/dist/esm/parser/with-parser.d.ts +3 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +245 -14
- package/dist/esm/query-builder/aggregate-function-builder.js +164 -12
- package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
- package/dist/esm/query-builder/delete-query-builder.js +19 -16
- package/dist/esm/query-builder/function-module.d.ts +123 -22
- package/dist/esm/query-builder/function-module.js +92 -49
- package/dist/esm/query-builder/having-interface.d.ts +9 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
- package/dist/esm/query-builder/insert-query-builder.js +11 -9
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +12 -1
- package/dist/esm/query-builder/join-builder.d.ts +9 -8
- package/dist/esm/query-builder/join-builder.js +10 -9
- package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
- package/dist/esm/query-builder/on-conflict-builder.js +18 -17
- package/dist/esm/query-builder/select-query-builder.d.ts +82 -51
- package/dist/esm/query-builder/select-query-builder.js +38 -36
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
- package/dist/esm/query-builder/update-query-builder.js +19 -16
- package/dist/esm/query-builder/where-interface.d.ts +12 -11
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -3
- package/dist/esm/query-compiler/default-query-compiler.js +38 -34
- package/dist/esm/query-executor/query-executor-base.js +16 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
- package/dist/esm/raw-builder/raw-builder.js +23 -14
- package/dist/esm/raw-builder/sql.d.ts +4 -4
- package/dist/esm/schema/alter-column-builder.d.ts +28 -0
- package/dist/esm/schema/alter-column-builder.js +51 -0
- package/dist/esm/schema/alter-table-builder.d.ts +39 -341
- package/dist/esm/schema/alter-table-builder.js +61 -274
- package/dist/esm/schema/column-definition-builder.d.ts +43 -155
- package/dist/esm/schema/column-definition-builder.js +189 -0
- package/dist/esm/schema/create-index-builder.d.ts +2 -2
- package/dist/esm/schema/create-table-builder.d.ts +38 -5
- package/dist/esm/schema/create-table-builder.js +36 -1
- package/dist/esm/schema/create-view-builder.d.ts +3 -2
- package/dist/esm/schema/schema.d.ts +2 -2
- package/dist/esm/schema/schema.js +6 -5
- package/dist/esm/util/compilable.d.ts +2 -2
- package/dist/esm/util/explainable.d.ts +2 -2
- package/dist/esm/util/infer-result.d.ts +46 -0
- package/dist/esm/util/infer-result.js +2 -0
- package/dist/esm/util/log-once.d.ts +5 -0
- package/dist/esm/util/log-once.js +13 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +3 -0
- package/dist/esm/util/type-utils.d.ts +3 -17
- package/package.json +1 -1
- package/dist/cjs/operation-node/filter-node.d.ts +0 -18
- package/dist/cjs/operation-node/filter-node.js +0 -20
- package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -18
- package/dist/cjs/parser/complex-expression-parser.d.ts +0 -12
- package/dist/cjs/parser/filter-parser.d.ts +0 -24
- package/dist/cjs/parser/filter-parser.js +0 -109
- package/dist/esm/operation-node/filter-node.d.ts +0 -18
- package/dist/esm/operation-node/filter-node.js +0 -18
- package/dist/esm/operation-node/operation-node-utils.d.ts +0 -18
- package/dist/esm/operation-node/operation-node-utils.js +0 -2
- package/dist/esm/parser/complex-expression-parser.d.ts +0 -12
- package/dist/esm/parser/filter-parser.d.ts +0 -24
- package/dist/esm/parser/filter-parser.js +0 -100
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
1
|
+
import { AliasedSelectQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
2
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
3
|
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
5
4
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
|
-
import {
|
|
5
|
+
import { AliasedExpressionOrFactory } from './expression-parser.js';
|
|
7
6
|
import { Selectable, SelectType } from '../util/column-type.js';
|
|
8
|
-
import {
|
|
9
|
-
export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> |
|
|
7
|
+
import { AliasedExpression } from '../expression/expression.js';
|
|
8
|
+
export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedExpressionOrFactory<DB, TB>;
|
|
10
9
|
export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
|
|
11
10
|
/**
|
|
12
11
|
* Given a selection expression returns a query builder type that
|
|
@@ -20,9 +19,9 @@ export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends
|
|
|
20
19
|
export declare type Selection<DB, TB extends keyof DB, SE> = {
|
|
21
20
|
[A in ExtractAliasFromSelectExpression<SE>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, SE, A>>;
|
|
22
21
|
};
|
|
23
|
-
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends
|
|
22
|
+
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedExpression<any, infer EA> ? EA : SE extends (qb: any) => AliasedExpression<any, infer EA> ? EA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
|
|
24
23
|
declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
|
|
25
|
-
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends
|
|
24
|
+
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedSelectQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedSelectQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends AliasedExpression<infer O, infer EA> ? EA extends A ? O : never : SE extends (qb: any) => AliasedExpression<infer O, infer EA> ? EA extends A ? O : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
|
|
26
25
|
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
|
|
27
26
|
declare type AllSelection<DB, TB extends keyof DB> = Selectable<{
|
|
28
27
|
[C in AnyColumn<DB, TB>]: {
|
|
@@ -3,7 +3,7 @@ import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
4
|
import { parseAliasedStringReference } from './reference-parser.js';
|
|
5
5
|
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
6
|
-
import {
|
|
6
|
+
import { parseAliasedExpression, } from './expression-parser.js';
|
|
7
7
|
import { parseTable } from './table-parser.js';
|
|
8
8
|
export function parseSelectExpressionOrList(selection) {
|
|
9
9
|
if (isReadonlyArray(selection)) {
|
|
@@ -21,7 +21,7 @@ function parseSelectExpression(selection) {
|
|
|
21
21
|
return SelectionNode.create(selection.toOperationNode());
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
return SelectionNode.create(
|
|
24
|
+
return SelectionNode.create(parseAliasedExpression(selection));
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
export function parseSelectAll(table) {
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
+
import { Expression } from '../expression/expression.js';
|
|
1
2
|
import { SetOperator, SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
2
|
-
|
|
3
|
-
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
-
export declare type SetOperationExpression<DB, O> = SelectQueryBuilder<DB, any, O> | RawBuilder<O>;
|
|
5
|
-
export declare function parseSetOperation(operator: SetOperator, expression: SetOperationExpression<any, any>, all: boolean): SetOperationNode;
|
|
3
|
+
export declare function parseSetOperation(operator: SetOperator, expression: Expression<any>, all: boolean): SetOperationNode;
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
2
|
import { TableNode } from '../operation-node/table-node.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
|
|
3
|
+
import { AliasedExpressionOrFactory } from './expression-parser.js';
|
|
4
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
5
|
+
import { AliasedExpression } from '../expression/expression.js';
|
|
6
|
+
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedExpressionOrFactory<DB, TB>;
|
|
8
7
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
|
-
export declare type TableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB> |
|
|
8
|
+
export declare type TableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpression<any, any>;
|
|
10
9
|
export declare type From<DB, TE> = {
|
|
11
10
|
[C in keyof DB | ExtractAliasFromTableExpression<DB, TE>]: C extends ExtractAliasFromTableExpression<DB, TE> ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
12
11
|
};
|
|
13
12
|
export declare type FromTables<DB, TB extends keyof DB, TE> = TB | ExtractAliasFromTableExpression<DB, TE>;
|
|
14
|
-
declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends
|
|
15
|
-
declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends
|
|
13
|
+
declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : never;
|
|
14
|
+
declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : never;
|
|
16
15
|
declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
|
|
17
16
|
declare type AnyTable<DB> = keyof DB & string;
|
|
18
|
-
export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>):
|
|
19
|
-
export declare function parseTableExpression(table: TableExpression<any, any>):
|
|
20
|
-
export declare function parseAliasedTable(from: string):
|
|
17
|
+
export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): OperationNode[];
|
|
18
|
+
export declare function parseTableExpression(table: TableExpression<any, any>): OperationNode;
|
|
19
|
+
export declare function parseAliasedTable(from: string): TableNode | AliasNode;
|
|
21
20
|
export declare function parseTable(from: string): TableNode;
|
|
22
21
|
export {};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
3
3
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
4
4
|
import { TableNode } from '../operation-node/table-node.js';
|
|
5
|
-
import {
|
|
5
|
+
import { parseAliasedExpression, } from './expression-parser.js';
|
|
6
6
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
7
7
|
export function parseTableExpressionOrList(table) {
|
|
8
8
|
if (isReadonlyArray(table)) {
|
|
@@ -17,7 +17,7 @@ export function parseTableExpression(table) {
|
|
|
17
17
|
return parseAliasedTable(table);
|
|
18
18
|
}
|
|
19
19
|
else {
|
|
20
|
-
return
|
|
20
|
+
return parseAliasedExpression(table);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
export function parseAliasedTable(from) {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
|
|
2
|
+
import { ExpressionOrFactory } from './expression-parser.js';
|
|
3
|
+
export declare type ExistsExpression<DB, TB extends keyof DB> = ExpressionOrFactory<DB, TB, any>;
|
|
4
|
+
export declare function parseExists(arg: ExistsExpression<any, any>): UnaryOperationNode;
|
|
5
|
+
export declare function parseNotExists(arg: ExistsExpression<any, any>): UnaryOperationNode;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="./unary-operation-parser.d.ts" />
|
|
2
|
+
import { OperatorNode, } from '../operation-node/operator-node.js';
|
|
3
|
+
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
|
|
4
|
+
import { parseValueExpressionOrList } from './value-parser.js';
|
|
5
|
+
export function parseExists(arg) {
|
|
6
|
+
return parseUnaryOperation('exists', arg);
|
|
7
|
+
}
|
|
8
|
+
export function parseNotExists(arg) {
|
|
9
|
+
return parseUnaryOperation('not exists', arg);
|
|
10
|
+
}
|
|
11
|
+
function parseUnaryOperation(type, arg) {
|
|
12
|
+
return UnaryOperationNode.create(OperatorNode.create(type), parseValueExpressionOrList(arg));
|
|
13
|
+
}
|
|
@@ -2,6 +2,6 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
|
2
2
|
import { UpdateKeys, UpdateType } from '../util/column-type.js';
|
|
3
3
|
import { ValueExpression } from './value-parser.js';
|
|
4
4
|
export declare type MutationObject<DB, TB extends keyof DB, TM extends keyof DB> = {
|
|
5
|
-
[C in UpdateKeys<DB[TM]>]?: ValueExpression<DB, TB, UpdateType<DB[TM][C]
|
|
5
|
+
[C in UpdateKeys<DB[TM]>]?: ValueExpression<DB, TB, UpdateType<DB[TM][C]>> | undefined;
|
|
6
6
|
};
|
|
7
7
|
export declare function parseUpdateObject(row: MutationObject<any, any, any>): ReadonlyArray<ColumnUpdateNode>;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { RawNode } from '../operation-node/raw-node.js';
|
|
5
|
-
import { ComplexExpression } from './complex-expression-parser.js';
|
|
6
|
-
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
7
|
-
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB, V>;
|
|
1
|
+
import { ExpressionOrFactory } from './expression-parser.js';
|
|
2
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
3
|
+
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ExpressionOrFactory<DB, TB, V>;
|
|
8
4
|
export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
9
|
-
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>):
|
|
10
|
-
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>):
|
|
5
|
+
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): OperationNode;
|
|
6
|
+
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): OperationNode;
|
|
@@ -3,7 +3,7 @@ import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-n
|
|
|
3
3
|
import { ValueListNode } from '../operation-node/value-list-node.js';
|
|
4
4
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
5
5
|
import { isReadonlyArray } from '../util/object-utils.js';
|
|
6
|
-
import {
|
|
6
|
+
import { parseExpression, isExpressionOrFactory, } from './expression-parser.js';
|
|
7
7
|
export function parseValueExpressionOrList(arg) {
|
|
8
8
|
if (isReadonlyArray(arg)) {
|
|
9
9
|
return parseValueExpressionList(arg);
|
|
@@ -13,13 +13,13 @@ export function parseValueExpressionOrList(arg) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
export function parseValueExpression(exp) {
|
|
16
|
-
if (
|
|
17
|
-
return
|
|
16
|
+
if (isExpressionOrFactory(exp)) {
|
|
17
|
+
return parseExpression(exp);
|
|
18
18
|
}
|
|
19
19
|
return ValueNode.create(exp);
|
|
20
20
|
}
|
|
21
21
|
function parseValueExpressionList(arg) {
|
|
22
|
-
if (arg.some(
|
|
22
|
+
if (arg.some(isExpressionOrFactory)) {
|
|
23
23
|
return ValueListNode.create(arg.map((it) => parseValueExpression(it)));
|
|
24
24
|
}
|
|
25
25
|
return PrimitiveValueListNode.create(arg);
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
1
|
import { UpdateQueryBuilder } from '../query-builder/update-query-builder.js';
|
|
3
2
|
import { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js';
|
|
4
3
|
import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
|
|
5
4
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
6
5
|
import { QueryCreator } from '../query-creator.js';
|
|
7
|
-
import {
|
|
6
|
+
import { Expression } from '../expression/expression.js';
|
|
8
7
|
export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
|
|
9
8
|
export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
|
|
10
9
|
export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
|
|
11
|
-
declare type CommonTableExpressionOutput<DB, CN extends string> =
|
|
10
|
+
declare type CommonTableExpressionOutput<DB, CN extends string> = Expression<ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>>;
|
|
12
11
|
/**
|
|
13
12
|
* Given a common CommonTableExpression CTE extracts the row type from it.
|
|
14
13
|
*
|
|
15
14
|
* For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
|
|
16
15
|
* would result in `Pick<Person, 'id' | 'first_name'>`.
|
|
17
16
|
*/
|
|
18
|
-
declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends
|
|
17
|
+
declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends Expression<infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : never : never;
|
|
19
18
|
/**
|
|
20
19
|
* Extracts 'person' from a string like 'person(id, first_name)'.
|
|
21
20
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="./camel-case-plugin.d.ts" />
|
|
2
|
-
import { isBuffer, isDate, isObject } from '../../util/object-utils.js';
|
|
2
|
+
import { isArrayBufferOrView, isBuffer, isDate, isObject, } from '../../util/object-utils.js';
|
|
3
3
|
import { SnakeCaseTransformer } from './camel-case-transformer.js';
|
|
4
4
|
import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
|
|
5
5
|
/**
|
|
@@ -108,5 +108,5 @@ export class CamelCasePlugin {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
function canMap(obj) {
|
|
111
|
-
return isObject(obj) && !isDate(obj) && !isBuffer(obj);
|
|
111
|
+
return (isObject(obj) && !isDate(obj) && !isBuffer(obj) && !isArrayBufferOrView(obj));
|
|
112
112
|
}
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
2
|
-
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
4
3
|
import { OverBuilder } from './over-builder.js';
|
|
5
|
-
|
|
4
|
+
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
5
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
|
+
import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
|
|
7
|
+
import { ExistsExpression } from '../parser/unary-operation-parser.js';
|
|
8
|
+
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements Expression<O> {
|
|
6
9
|
#private;
|
|
7
10
|
constructor(props: AggregateFunctionBuilderProps);
|
|
11
|
+
/** @private */
|
|
12
|
+
/**
|
|
13
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
14
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
18
|
+
* get expressionType(): T | undefined {
|
|
19
|
+
* return undefined
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
25
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
26
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
27
|
+
*/
|
|
28
|
+
get expressionType(): O | undefined;
|
|
8
29
|
/**
|
|
9
30
|
* Returns an aliased version of the function.
|
|
10
31
|
*
|
|
@@ -32,13 +53,15 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
32
53
|
*/
|
|
33
54
|
as<A extends string>(alias: A): AliasedAggregateFunctionBuilder<DB, TB, O, A>;
|
|
34
55
|
/**
|
|
35
|
-
* Adds a distinct clause inside the function.
|
|
56
|
+
* Adds a `distinct` clause inside the function.
|
|
57
|
+
*
|
|
58
|
+
* ### Examples
|
|
36
59
|
*
|
|
37
60
|
* ```ts
|
|
38
61
|
* const result = await db
|
|
39
62
|
* .selectFrom('person')
|
|
40
|
-
* .select(
|
|
41
|
-
* eb
|
|
63
|
+
* .select((eb) =>
|
|
64
|
+
* eb.fn.count<number>('first_name').distinct().as('first_name_count')
|
|
42
65
|
* )
|
|
43
66
|
* .executeTakeFirstOrThrow()
|
|
44
67
|
* ```
|
|
@@ -52,7 +75,197 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
52
75
|
*/
|
|
53
76
|
distinct(): AggregateFunctionBuilder<DB, TB, O>;
|
|
54
77
|
/**
|
|
55
|
-
* Adds
|
|
78
|
+
* Adds a `filter` clause with a nested `where` clause after the function.
|
|
79
|
+
*
|
|
80
|
+
* Similar to {@link WhereInterface}'s `where` method.
|
|
81
|
+
*
|
|
82
|
+
* Also see {@link orFilterWhere}, {@link filterWhereExists} and {@link filterWhereRef}.
|
|
83
|
+
*
|
|
84
|
+
* ### Examples
|
|
85
|
+
*
|
|
86
|
+
* Count by gender:
|
|
87
|
+
*
|
|
88
|
+
* ```ts
|
|
89
|
+
* const result = await db
|
|
90
|
+
* .selectFrom('person')
|
|
91
|
+
* .select([
|
|
92
|
+
* (eb) =>
|
|
93
|
+
* eb.fn
|
|
94
|
+
* .count<number>('id')
|
|
95
|
+
* .filterWhere('gender', '=', 'female')
|
|
96
|
+
* .as('female_count'),
|
|
97
|
+
* (eb) =>
|
|
98
|
+
* eb.fn
|
|
99
|
+
* .count<number>('id')
|
|
100
|
+
* .filterWhere('gender', '=', 'male')
|
|
101
|
+
* .as('male_count'),
|
|
102
|
+
* (eb) =>
|
|
103
|
+
* eb.fn
|
|
104
|
+
* .count<number>('id')
|
|
105
|
+
* .filterWhere('gender', '=', 'other')
|
|
106
|
+
* .as('other_count'),
|
|
107
|
+
* ])
|
|
108
|
+
* .executeTakeFirstOrThrow()
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* The generated SQL (PostgreSQL):
|
|
112
|
+
*
|
|
113
|
+
* ```sql
|
|
114
|
+
* select
|
|
115
|
+
* count("id") filter(where "gender" = $1) as "female_count",
|
|
116
|
+
* count("id") filter(where "gender" = $2) as "male_count",
|
|
117
|
+
* count("id") filter(where "gender" = $3) as "other_count"
|
|
118
|
+
* from "person"
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
122
|
+
filterWhere(grouper: WhereGrouper<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
123
|
+
filterWhere(expression: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
124
|
+
/**
|
|
125
|
+
* Adds a `filter` clause with a nested `where exists` clause after the function.
|
|
126
|
+
*
|
|
127
|
+
* Similar to {@link WhereInterface}'s `whereExists` method.
|
|
128
|
+
*
|
|
129
|
+
* ### Examples
|
|
130
|
+
*
|
|
131
|
+
* Count pet owners versus general public:
|
|
132
|
+
*
|
|
133
|
+
* ```ts
|
|
134
|
+
* const result = await db
|
|
135
|
+
* .selectFrom('person')
|
|
136
|
+
* .select([
|
|
137
|
+
* (eb) =>
|
|
138
|
+
* eb.fn
|
|
139
|
+
* .count<number>('person.id')
|
|
140
|
+
* .filterWhereExists((qb) =>
|
|
141
|
+
* qb
|
|
142
|
+
* .selectFrom('pet')
|
|
143
|
+
* .select('pet.id')
|
|
144
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
145
|
+
* )
|
|
146
|
+
* .as('pet_owner_count'),
|
|
147
|
+
* (eb) => eb.fn.count<number>('person.id').as('total_count'),
|
|
148
|
+
* ])
|
|
149
|
+
* .executeTakeFirstOrThrow()
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* The generated SQL (PostgreSQL):
|
|
153
|
+
*
|
|
154
|
+
* ```sql
|
|
155
|
+
* select count("person"."id") filter(where exists (
|
|
156
|
+
* select "pet"."id"
|
|
157
|
+
* from "pet"
|
|
158
|
+
* where "pet"."owner_id" = "person"."id"
|
|
159
|
+
* )) as "pet_ower_count",
|
|
160
|
+
* count("person"."id") as "total_count"
|
|
161
|
+
* from "person"
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
filterWhereExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
165
|
+
/**
|
|
166
|
+
* Just like {@link filterWhereExists} but creates a `not exists` clause inside
|
|
167
|
+
* the `filter` clause.
|
|
168
|
+
*/
|
|
169
|
+
filterWhereNotExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
170
|
+
/**
|
|
171
|
+
* Adds a `filter` clause with a nested `where` clause after the function, where
|
|
172
|
+
* both sides of the operator are references to columns.
|
|
173
|
+
*
|
|
174
|
+
* Similar to {@link WhereInterface}'s `whereRef` method.
|
|
175
|
+
*
|
|
176
|
+
* ### Examples
|
|
177
|
+
*
|
|
178
|
+
* Count people with same first and last names versus general public:
|
|
179
|
+
*
|
|
180
|
+
* ```ts
|
|
181
|
+
* const result = await db
|
|
182
|
+
* .selectFrom('person')
|
|
183
|
+
* .select([
|
|
184
|
+
* (eb) =>
|
|
185
|
+
* eb.fn
|
|
186
|
+
* .count<number>('id')
|
|
187
|
+
* .filterWhereRef('first_name', '=', 'last_name')
|
|
188
|
+
* .as('repeat_name_count'),
|
|
189
|
+
* (eb) => eb.fn.count<number>('id').as('total_count'),
|
|
190
|
+
* ])
|
|
191
|
+
* .executeTakeFirstOrThrow()
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* The generated SQL (PostgreSQL):
|
|
195
|
+
*
|
|
196
|
+
* ```sql
|
|
197
|
+
* select
|
|
198
|
+
* count("id") filter(where "first_name" = "last_name") as "repeat_name_count",
|
|
199
|
+
* count("id") as "total_count"
|
|
200
|
+
* from "person"
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
filterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
204
|
+
/**
|
|
205
|
+
* Adds a `filter` clause with a nested `or where` clause after the function.
|
|
206
|
+
* Otherwise works just like {@link filterWhere}.
|
|
207
|
+
*
|
|
208
|
+
* Similar to {@link WhereInterface}'s `orWhere` method.
|
|
209
|
+
*
|
|
210
|
+
* ### Examples
|
|
211
|
+
*
|
|
212
|
+
* For some reason you're tasked with counting adults (18+) or people called
|
|
213
|
+
* "Bob" versus general public:
|
|
214
|
+
*
|
|
215
|
+
* ```ts
|
|
216
|
+
* const result = await db
|
|
217
|
+
* .selectFrom('person')
|
|
218
|
+
* .select([
|
|
219
|
+
* (eb) =>
|
|
220
|
+
* eb.fn
|
|
221
|
+
* .count<number>('id')
|
|
222
|
+
* .filterWhere('age', '>=', '18')
|
|
223
|
+
* .orFilterWhere('first_name', '=', 'Bob')
|
|
224
|
+
* .as('adult_or_bob_count'),
|
|
225
|
+
* (eb) => eb.fn.count<number>('id').as('total_count'),
|
|
226
|
+
* ])
|
|
227
|
+
* .executeTakeFirstOrThrow()
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* The generated SQL (PostgreSQL):
|
|
231
|
+
*
|
|
232
|
+
* ```sql
|
|
233
|
+
* select
|
|
234
|
+
* count("id") filter(where "age" >= $1 or "first_name" = $2) as "adult_or_bob_count",
|
|
235
|
+
* count("id") as "total_count"
|
|
236
|
+
* from "person"
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
orFilterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
240
|
+
orFilterWhere(grouper: WhereGrouper<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
241
|
+
orFilterWhere(expression: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
242
|
+
/**
|
|
243
|
+
* Just like {@link filterWhereExists} but creates an `or exists` clause inside
|
|
244
|
+
* the `filter` clause.
|
|
245
|
+
*
|
|
246
|
+
* Similar to {@link WhereInterface}'s `orWhereExists` method.
|
|
247
|
+
*/
|
|
248
|
+
orFilterWhereExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
249
|
+
/**
|
|
250
|
+
* Just like {@link filterWhereExists} but creates an `or not exists` clause inside
|
|
251
|
+
* the `filter` clause.
|
|
252
|
+
*
|
|
253
|
+
* Similar to {@link WhereInterface}'s `orWhereNotExists` method.
|
|
254
|
+
*/
|
|
255
|
+
orFilterWhereNotExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
256
|
+
/**
|
|
257
|
+
* Adds an `or where` clause inside the `filter` clause. Otherwise works just
|
|
258
|
+
* like {@link filterWhereRef}.
|
|
259
|
+
*
|
|
260
|
+
* Also see {@link orFilterWhere} and {@link filterWhere}.
|
|
261
|
+
*
|
|
262
|
+
* Similar to {@link WhereInterface}'s `orWhereRef` method.
|
|
263
|
+
*/
|
|
264
|
+
orFilterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
265
|
+
/**
|
|
266
|
+
* Adds an `over` clause (window functions) after the function.
|
|
267
|
+
*
|
|
268
|
+
* ### Examples
|
|
56
269
|
*
|
|
57
270
|
* ```ts
|
|
58
271
|
* const result = await db
|
|
@@ -92,23 +305,41 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
92
305
|
* ```
|
|
93
306
|
*/
|
|
94
307
|
over(over?: OverBuilderCallback<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
308
|
+
/**
|
|
309
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
310
|
+
*
|
|
311
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
312
|
+
* template tag to build the node:
|
|
313
|
+
*
|
|
314
|
+
* ```ts
|
|
315
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
316
|
+
* toOperationNode(): OperationNode {
|
|
317
|
+
* return sql`some sql here`.toOperationNode()
|
|
318
|
+
* }
|
|
319
|
+
* }
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
95
322
|
toOperationNode(): AggregateFunctionNode;
|
|
96
323
|
}
|
|
97
324
|
/**
|
|
98
325
|
* {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
|
|
99
326
|
*/
|
|
100
|
-
export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown, A extends string = never> implements
|
|
327
|
+
export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown, A extends string = never> implements AliasedExpression<O, A> {
|
|
101
328
|
#private;
|
|
102
329
|
constructor(aggregateFunctionBuilder: AggregateFunctionBuilder<DB, TB, O>, alias: A);
|
|
330
|
+
/** @private */
|
|
103
331
|
/**
|
|
104
|
-
*
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
*
|
|
332
|
+
* Returns the aliased expression.
|
|
333
|
+
*/
|
|
334
|
+
get expression(): Expression<O>;
|
|
335
|
+
/** @private */
|
|
336
|
+
/**
|
|
337
|
+
* Returns the alias.
|
|
338
|
+
*/
|
|
339
|
+
get alias(): A;
|
|
340
|
+
/**
|
|
341
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
110
342
|
*/
|
|
111
|
-
protected get alias(): A;
|
|
112
343
|
toOperationNode(): AliasNode;
|
|
113
344
|
}
|
|
114
345
|
export interface AggregateFunctionBuilderProps {
|