kysely 0.21.6 → 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 +27 -4
- 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 +17 -8
- package/dist/cjs/index.js +15 -4
- package/dist/cjs/kysely.d.ts +3 -3
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/migration/file-migration-provider.js +11 -4
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +25 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +48 -0
- package/dist/cjs/operation-node/alias-node.d.ts +3 -10
- 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/group-by-node.d.ts +1 -1
- package/dist/cjs/operation-node/group-by-node.js +3 -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 -4
- 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 +14 -4
- package/dist/cjs/operation-node/operation-node-transformer.js +60 -20
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +14 -4
- package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
- 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/over-node.d.ts +19 -0
- package/dist/cjs/operation-node/over-node.js +35 -0
- package/dist/cjs/operation-node/parens-node.d.ts +2 -3
- package/dist/cjs/operation-node/partition-by-item-node.d.ts +13 -0
- package/dist/cjs/operation-node/{filter-node.js → partition-by-item-node.js} +6 -8
- package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
- package/dist/cjs/operation-node/partition-by-node.js +24 -0
- 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 +8 -9
- package/dist/cjs/operation-node/select-query-node.js +14 -14
- package/dist/cjs/operation-node/selection-node.d.ts +2 -3
- package/dist/cjs/operation-node/set-operation-node.d.ts +15 -0
- package/dist/cjs/operation-node/{union-node.js → set-operation-node.js} +7 -6
- 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 -8
- 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/group-by-parser.d.ts +1 -1
- package/dist/cjs/parser/group-by-parser.js +2 -2
- 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/parse-utils.d.ts +2 -0
- package/dist/cjs/parser/parse-utils.js +9 -1
- package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
- package/dist/cjs/parser/partition-by-parser.js +9 -0
- package/dist/cjs/parser/reference-parser.d.ts +14 -13
- package/dist/cjs/parser/reference-parser.js +12 -9
- package/dist/cjs/parser/select-parser.d.ts +6 -6
- package/dist/cjs/parser/select-parser.js +2 -2
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -0
- package/dist/cjs/parser/set-operation-parser.js +8 -0
- 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 -8
- 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 +348 -0
- package/dist/cjs/query-builder/aggregate-function-builder.js +298 -0
- 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/expression-builder.d.ts +3 -3
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +241 -0
- package/dist/cjs/query-builder/function-module.js +214 -0
- 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/over-builder.d.ts +59 -0
- package/dist/cjs/query-builder/over-builder.js +50 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +138 -47
- package/dist/cjs/query-builder/select-query-builder.js +122 -40
- 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 +15 -5
- package/dist/cjs/query-compiler/default-query-compiler.js +78 -47
- 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 +15 -7
- package/dist/cjs/raw-builder/sql.js +6 -0
- 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 -13
- 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 +17 -8
- package/dist/esm/index.js +13 -4
- package/dist/esm/kysely.d.ts +3 -3
- package/dist/esm/kysely.js +3 -3
- package/dist/esm/migration/file-migration-provider.js +11 -4
- package/dist/esm/operation-node/aggregate-function-node.d.ts +25 -0
- package/dist/esm/operation-node/aggregate-function-node.js +46 -0
- package/dist/esm/operation-node/alias-node.d.ts +3 -10
- 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/group-by-node.d.ts +1 -1
- package/dist/esm/operation-node/group-by-node.js +3 -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 -4
- 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 +14 -4
- package/dist/esm/operation-node/operation-node-transformer.js +60 -20
- package/dist/esm/operation-node/operation-node-visitor.d.ts +14 -4
- package/dist/esm/operation-node/operation-node-visitor.js +7 -2
- 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/over-node.d.ts +19 -0
- package/dist/esm/operation-node/over-node.js +33 -0
- package/dist/esm/operation-node/parens-node.d.ts +2 -3
- package/dist/esm/operation-node/partition-by-item-node.d.ts +13 -0
- package/dist/esm/operation-node/partition-by-item-node.js +16 -0
- package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
- package/dist/esm/operation-node/partition-by-node.js +22 -0
- 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 +8 -9
- package/dist/esm/operation-node/select-query-node.js +14 -14
- package/dist/esm/operation-node/selection-node.d.ts +2 -3
- package/dist/esm/operation-node/set-operation-node.d.ts +15 -0
- package/dist/esm/operation-node/set-operation-node.js +18 -0
- 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 -8
- 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/group-by-parser.d.ts +1 -1
- package/dist/esm/parser/group-by-parser.js +2 -2
- 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/parse-utils.d.ts +2 -0
- package/dist/esm/parser/parse-utils.js +7 -0
- package/dist/esm/parser/partition-by-parser.d.ts +6 -0
- package/dist/esm/parser/partition-by-parser.js +6 -0
- package/dist/esm/parser/reference-parser.d.ts +14 -13
- package/dist/esm/parser/reference-parser.js +10 -8
- package/dist/esm/parser/select-parser.d.ts +6 -6
- package/dist/esm/parser/select-parser.js +2 -2
- package/dist/esm/parser/set-operation-parser.d.ts +3 -0
- package/dist/esm/parser/set-operation-parser.js +5 -0
- 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 -8
- 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 +348 -0
- package/dist/esm/query-builder/aggregate-function-builder.js +294 -0
- 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/expression-builder.d.ts +3 -3
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-module.d.ts +241 -0
- package/dist/esm/query-builder/function-module.js +211 -0
- 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/over-builder.d.ts +59 -0
- package/dist/esm/query-builder/over-builder.js +47 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +138 -47
- package/dist/esm/query-builder/select-query-builder.js +120 -38
- 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 +15 -5
- package/dist/esm/query-compiler/default-query-compiler.js +79 -48
- 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 +15 -7
- package/dist/esm/raw-builder/sql.js +6 -0
- 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 -13
- package/package.json +4 -1
- package/dist/cjs/operation-node/filter-node.d.ts +0 -18
- package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -17
- package/dist/cjs/operation-node/union-node.d.ts +0 -16
- package/dist/cjs/parser/complex-expression-parser.d.ts +0 -10
- package/dist/cjs/parser/filter-parser.d.ts +0 -24
- package/dist/cjs/parser/filter-parser.js +0 -109
- package/dist/cjs/parser/union-parser.d.ts +0 -5
- package/dist/cjs/parser/union-parser.js +0 -8
- package/dist/cjs/query-builder/function-builder.d.ts +0 -133
- package/dist/cjs/query-builder/function-builder.js +0 -160
- 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 -17
- package/dist/esm/operation-node/operation-node-utils.js +0 -2
- package/dist/esm/operation-node/union-node.d.ts +0 -16
- package/dist/esm/operation-node/union-node.js +0 -17
- package/dist/esm/parser/complex-expression-parser.d.ts +0 -10
- package/dist/esm/parser/filter-parser.d.ts +0 -24
- package/dist/esm/parser/filter-parser.js +0 -100
- package/dist/esm/parser/union-parser.d.ts +0 -5
- package/dist/esm/parser/union-parser.js +0 -5
- package/dist/esm/query-builder/function-builder.d.ts +0 -133
- package/dist/esm/query-builder/function-builder.js +0 -157
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/// <reference types="./aggregate-function-builder.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
4
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
5
|
+
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
6
|
+
import { preventAwait } from '../util/prevent-await.js';
|
|
7
|
+
import { createOverBuilder } from '../parser/parse-utils.js';
|
|
8
|
+
import { parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
|
|
9
|
+
import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
|
|
10
|
+
export class AggregateFunctionBuilder {
|
|
11
|
+
#props;
|
|
12
|
+
constructor(props) {
|
|
13
|
+
this.#props = freeze(props);
|
|
14
|
+
}
|
|
15
|
+
/** @private */
|
|
16
|
+
get expressionType() {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns an aliased version of the function.
|
|
21
|
+
*
|
|
22
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
23
|
+
* this method also provides strict typing:
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* const result = await db
|
|
27
|
+
* .selectFrom('person')
|
|
28
|
+
* .select(
|
|
29
|
+
* eb => eb.fn.count<number>('id').as('person_count')
|
|
30
|
+
* )
|
|
31
|
+
* .executeTakeFirstOrThrow()
|
|
32
|
+
*
|
|
33
|
+
* // `person_count: number` field exists in the result type.
|
|
34
|
+
* console.log(result.person_count)
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* The generated SQL (PostgreSQL):
|
|
38
|
+
*
|
|
39
|
+
* ```sql
|
|
40
|
+
* select count("id") as "person_count"
|
|
41
|
+
* from "person"
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
as(alias) {
|
|
45
|
+
return new AliasedAggregateFunctionBuilder(this, alias);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Adds a `distinct` clause inside the function.
|
|
49
|
+
*
|
|
50
|
+
* ### Examples
|
|
51
|
+
*
|
|
52
|
+
* ```ts
|
|
53
|
+
* const result = await db
|
|
54
|
+
* .selectFrom('person')
|
|
55
|
+
* .select((eb) =>
|
|
56
|
+
* eb.fn.count<number>('first_name').distinct().as('first_name_count')
|
|
57
|
+
* )
|
|
58
|
+
* .executeTakeFirstOrThrow()
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* The generated SQL (PostgreSQL):
|
|
62
|
+
*
|
|
63
|
+
* ```sql
|
|
64
|
+
* select count(distinct "first_name") as "first_name_count"
|
|
65
|
+
* from "person"
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
distinct() {
|
|
69
|
+
return new AggregateFunctionBuilder({
|
|
70
|
+
...this.#props,
|
|
71
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
filterWhere(...args) {
|
|
75
|
+
return new AggregateFunctionBuilder({
|
|
76
|
+
...this.#props,
|
|
77
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseWhere(args)),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Adds a `filter` clause with a nested `where exists` clause after the function.
|
|
82
|
+
*
|
|
83
|
+
* Similar to {@link WhereInterface}'s `whereExists` method.
|
|
84
|
+
*
|
|
85
|
+
* ### Examples
|
|
86
|
+
*
|
|
87
|
+
* Count pet owners versus general public:
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* const result = await db
|
|
91
|
+
* .selectFrom('person')
|
|
92
|
+
* .select([
|
|
93
|
+
* (eb) =>
|
|
94
|
+
* eb.fn
|
|
95
|
+
* .count<number>('person.id')
|
|
96
|
+
* .filterWhereExists((qb) =>
|
|
97
|
+
* qb
|
|
98
|
+
* .selectFrom('pet')
|
|
99
|
+
* .select('pet.id')
|
|
100
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
101
|
+
* )
|
|
102
|
+
* .as('pet_owner_count'),
|
|
103
|
+
* (eb) => eb.fn.count<number>('person.id').as('total_count'),
|
|
104
|
+
* ])
|
|
105
|
+
* .executeTakeFirstOrThrow()
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* The generated SQL (PostgreSQL):
|
|
109
|
+
*
|
|
110
|
+
* ```sql
|
|
111
|
+
* select count("person"."id") filter(where exists (
|
|
112
|
+
* select "pet"."id"
|
|
113
|
+
* from "pet"
|
|
114
|
+
* where "pet"."owner_id" = "person"."id"
|
|
115
|
+
* )) as "pet_ower_count",
|
|
116
|
+
* count("person"."id") as "total_count"
|
|
117
|
+
* from "person"
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
filterWhereExists(arg) {
|
|
121
|
+
return new AggregateFunctionBuilder({
|
|
122
|
+
...this.#props,
|
|
123
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseExists(arg)),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Just like {@link filterWhereExists} but creates a `not exists` clause inside
|
|
128
|
+
* the `filter` clause.
|
|
129
|
+
*/
|
|
130
|
+
filterWhereNotExists(arg) {
|
|
131
|
+
return new AggregateFunctionBuilder({
|
|
132
|
+
...this.#props,
|
|
133
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseNotExists(arg)),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Adds a `filter` clause with a nested `where` clause after the function, where
|
|
138
|
+
* both sides of the operator are references to columns.
|
|
139
|
+
*
|
|
140
|
+
* Similar to {@link WhereInterface}'s `whereRef` method.
|
|
141
|
+
*
|
|
142
|
+
* ### Examples
|
|
143
|
+
*
|
|
144
|
+
* Count people with same first and last names versus general public:
|
|
145
|
+
*
|
|
146
|
+
* ```ts
|
|
147
|
+
* const result = await db
|
|
148
|
+
* .selectFrom('person')
|
|
149
|
+
* .select([
|
|
150
|
+
* (eb) =>
|
|
151
|
+
* eb.fn
|
|
152
|
+
* .count<number>('id')
|
|
153
|
+
* .filterWhereRef('first_name', '=', 'last_name')
|
|
154
|
+
* .as('repeat_name_count'),
|
|
155
|
+
* (eb) => eb.fn.count<number>('id').as('total_count'),
|
|
156
|
+
* ])
|
|
157
|
+
* .executeTakeFirstOrThrow()
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* The generated SQL (PostgreSQL):
|
|
161
|
+
*
|
|
162
|
+
* ```sql
|
|
163
|
+
* select
|
|
164
|
+
* count("id") filter(where "first_name" = "last_name") as "repeat_name_count",
|
|
165
|
+
* count("id") as "total_count"
|
|
166
|
+
* from "person"
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
filterWhereRef(lhs, op, rhs) {
|
|
170
|
+
return new AggregateFunctionBuilder({
|
|
171
|
+
...this.#props,
|
|
172
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseReferentialFilter(lhs, op, rhs)),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
orFilterWhere(...args) {
|
|
176
|
+
return new AggregateFunctionBuilder({
|
|
177
|
+
...this.#props,
|
|
178
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseWhere(args)),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Just like {@link filterWhereExists} but creates an `or exists` clause inside
|
|
183
|
+
* the `filter` clause.
|
|
184
|
+
*
|
|
185
|
+
* Similar to {@link WhereInterface}'s `orWhereExists` method.
|
|
186
|
+
*/
|
|
187
|
+
orFilterWhereExists(arg) {
|
|
188
|
+
return new AggregateFunctionBuilder({
|
|
189
|
+
...this.#props,
|
|
190
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseExists(arg)),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Just like {@link filterWhereExists} but creates an `or not exists` clause inside
|
|
195
|
+
* the `filter` clause.
|
|
196
|
+
*
|
|
197
|
+
* Similar to {@link WhereInterface}'s `orWhereNotExists` method.
|
|
198
|
+
*/
|
|
199
|
+
orFilterWhereNotExists(arg) {
|
|
200
|
+
return new AggregateFunctionBuilder({
|
|
201
|
+
...this.#props,
|
|
202
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseNotExists(arg)),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Adds an `or where` clause inside the `filter` clause. Otherwise works just
|
|
207
|
+
* like {@link filterWhereRef}.
|
|
208
|
+
*
|
|
209
|
+
* Also see {@link orFilterWhere} and {@link filterWhere}.
|
|
210
|
+
*
|
|
211
|
+
* Similar to {@link WhereInterface}'s `orWhereRef` method.
|
|
212
|
+
*/
|
|
213
|
+
orFilterWhereRef(lhs, op, rhs) {
|
|
214
|
+
return new AggregateFunctionBuilder({
|
|
215
|
+
...this.#props,
|
|
216
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseReferentialFilter(lhs, op, rhs)),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Adds an `over` clause (window functions) after the function.
|
|
221
|
+
*
|
|
222
|
+
* ### Examples
|
|
223
|
+
*
|
|
224
|
+
* ```ts
|
|
225
|
+
* const result = await db
|
|
226
|
+
* .selectFrom('person')
|
|
227
|
+
* .select(
|
|
228
|
+
* eb => eb.fn.avg<number>('age').over().as('average_age')
|
|
229
|
+
* )
|
|
230
|
+
* .execute()
|
|
231
|
+
* ```
|
|
232
|
+
*
|
|
233
|
+
* The generated SQL (PostgreSQL):
|
|
234
|
+
*
|
|
235
|
+
* ```sql
|
|
236
|
+
* select avg("age") over() as "average_age"
|
|
237
|
+
* from "person"
|
|
238
|
+
* ```
|
|
239
|
+
*
|
|
240
|
+
* Also supports passing a callback that returns an over builder,
|
|
241
|
+
* allowing to add partition by and sort by clauses inside over.
|
|
242
|
+
*
|
|
243
|
+
* ```ts
|
|
244
|
+
* const result = await db
|
|
245
|
+
* .selectFrom('person')
|
|
246
|
+
* .select(
|
|
247
|
+
* eb => eb.fn.avg<number>('age').over(
|
|
248
|
+
* ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')
|
|
249
|
+
* ).as('average_age')
|
|
250
|
+
* )
|
|
251
|
+
* .execute()
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* The generated SQL (PostgreSQL):
|
|
255
|
+
*
|
|
256
|
+
* ```sql
|
|
257
|
+
* select avg("age") over(partition by "last_name" order by "first_name" asc) as "average_age"
|
|
258
|
+
* from "person"
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
over(over) {
|
|
262
|
+
const builder = createOverBuilder();
|
|
263
|
+
return new AggregateFunctionBuilder({
|
|
264
|
+
...this.#props,
|
|
265
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOver(this.#props.aggregateFunctionNode, (over ? over(builder) : builder).toOperationNode()),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
toOperationNode() {
|
|
269
|
+
return this.#props.aggregateFunctionNode;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
preventAwait(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
|
|
273
|
+
/**
|
|
274
|
+
* {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
|
|
275
|
+
*/
|
|
276
|
+
export class AliasedAggregateFunctionBuilder {
|
|
277
|
+
#aggregateFunctionBuilder;
|
|
278
|
+
#alias;
|
|
279
|
+
constructor(aggregateFunctionBuilder, alias) {
|
|
280
|
+
this.#aggregateFunctionBuilder = aggregateFunctionBuilder;
|
|
281
|
+
this.#alias = alias;
|
|
282
|
+
}
|
|
283
|
+
/** @private */
|
|
284
|
+
get expression() {
|
|
285
|
+
return this.#aggregateFunctionBuilder;
|
|
286
|
+
}
|
|
287
|
+
/** @private */
|
|
288
|
+
get alias() {
|
|
289
|
+
return this.#alias;
|
|
290
|
+
}
|
|
291
|
+
toOperationNode() {
|
|
292
|
+
return AliasNode.create(this.#aggregateFunctionBuilder.toOperationNode(), IdentifierNode.create(this.#alias));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
@@ -3,10 +3,9 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
|
3
3
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
4
|
import { TableExpression } from '../parser/table-parser.js';
|
|
5
5
|
import { SelectExpression } from '../parser/select-parser.js';
|
|
6
|
-
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
|
|
7
6
|
import { ReturningRow } from '../parser/returning-parser.js';
|
|
8
7
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
9
|
-
import {
|
|
8
|
+
import { MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
|
|
10
9
|
import { Compilable } from '../util/compilable.js';
|
|
11
10
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
12
11
|
import { QueryId } from '../util/query-id.js';
|
|
@@ -18,10 +17,11 @@ import { DeleteResult } from './delete-result.js';
|
|
|
18
17
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
19
18
|
import { Selectable } from '../util/column-type.js';
|
|
20
19
|
import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
|
|
21
|
-
import { AliasedQueryBuilder } from './select-query-builder.js';
|
|
22
|
-
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
23
20
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
24
|
-
|
|
21
|
+
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
22
|
+
import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
|
|
23
|
+
import { ExistsExpression } from '../parser/unary-operation-parser.js';
|
|
24
|
+
export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable {
|
|
25
25
|
#private;
|
|
26
26
|
constructor(props: DeleteQueryBuilderProps);
|
|
27
27
|
/**
|
|
@@ -208,16 +208,16 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
208
208
|
* .execute()
|
|
209
209
|
* ```
|
|
210
210
|
*/
|
|
211
|
-
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op:
|
|
211
|
+
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
|
|
212
212
|
where(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
213
|
-
where(
|
|
213
|
+
where(expression: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
|
|
214
214
|
/**
|
|
215
215
|
* Adds a `where` clause where both sides of the operator are references
|
|
216
216
|
* to columns.
|
|
217
217
|
*
|
|
218
218
|
* The normal `where` method treats the right hand side argument as a
|
|
219
219
|
* value by default. `whereRef` treats it as a column reference. This method is
|
|
220
|
-
* expecially useful with joins and
|
|
220
|
+
* expecially useful with joins and correlated subqueries.
|
|
221
221
|
*
|
|
222
222
|
* ### Examples
|
|
223
223
|
*
|
|
@@ -262,7 +262,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
262
262
|
* ) as "pet_name"
|
|
263
263
|
* from "person"
|
|
264
264
|
*/
|
|
265
|
-
whereRef(lhs: ReferenceExpression<DB, TB>, op:
|
|
265
|
+
whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
266
266
|
/**
|
|
267
267
|
* Adds an `or where` clause to the query. Otherwise works just like {@link where}.
|
|
268
268
|
*
|
|
@@ -326,15 +326,15 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
326
326
|
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
327
327
|
* ```
|
|
328
328
|
*/
|
|
329
|
-
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op:
|
|
329
|
+
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
|
|
330
330
|
orWhere(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
331
|
-
orWhere(
|
|
331
|
+
orWhere(expression: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
|
|
332
332
|
/**
|
|
333
333
|
* Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
|
|
334
334
|
*
|
|
335
335
|
* Also see {@link orWhere} and {@link where}.
|
|
336
336
|
*/
|
|
337
|
-
orWhereRef(lhs: ReferenceExpression<DB, TB>, op:
|
|
337
|
+
orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
338
338
|
/**
|
|
339
339
|
* Adds a `where exists` clause to the query.
|
|
340
340
|
*
|
|
@@ -401,11 +401,11 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
401
401
|
*/
|
|
402
402
|
whereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
403
403
|
/**
|
|
404
|
-
* Just like {@link whereExists} but creates
|
|
404
|
+
* Just like {@link whereExists} but creates an `or exists` clause.
|
|
405
405
|
*/
|
|
406
406
|
orWhereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
407
407
|
/**
|
|
408
|
-
* Just like {@link whereExists} but creates
|
|
408
|
+
* Just like {@link whereExists} but creates an `or not exists` clause.
|
|
409
409
|
*/
|
|
410
410
|
orWhereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
|
|
411
411
|
/**
|
|
@@ -724,7 +724,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
724
724
|
*/
|
|
725
725
|
withPlugin(plugin: KyselyPlugin): DeleteQueryBuilder<DB, TB, O>;
|
|
726
726
|
toOperationNode(): DeleteQueryNode;
|
|
727
|
-
compile(): CompiledQuery
|
|
727
|
+
compile(): CompiledQuery<O>;
|
|
728
728
|
/**
|
|
729
729
|
* Executes the query and returns an array of rows.
|
|
730
730
|
*
|
|
@@ -761,29 +761,29 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
761
761
|
* explain format=json delete from `person` where `id` = ?
|
|
762
762
|
* ```
|
|
763
763
|
*/
|
|
764
|
-
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?:
|
|
764
|
+
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
|
|
765
765
|
}
|
|
766
766
|
export interface DeleteQueryBuilderProps {
|
|
767
767
|
readonly queryId: QueryId;
|
|
768
768
|
readonly queryNode: DeleteQueryNode;
|
|
769
769
|
readonly executor: QueryExecutor;
|
|
770
770
|
}
|
|
771
|
-
export declare type DeleteQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? DeleteQueryBuilder<DB, TB | TE, O> : TE extends
|
|
771
|
+
export declare type DeleteQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? DeleteQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
|
|
772
772
|
declare type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? DeleteQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, R>, TB | A, O>;
|
|
773
773
|
declare type InnerJoinedDB<DB, A extends string, R> = {
|
|
774
774
|
[C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
|
|
775
775
|
};
|
|
776
|
-
export declare type DeleteQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends
|
|
776
|
+
export declare type DeleteQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : never;
|
|
777
777
|
declare type LeftJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? DeleteQueryBuilder<LeftJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, Nullable<R>>, TB | A, O>;
|
|
778
778
|
declare type LeftJoinedDB<DB, A extends keyof any, R> = {
|
|
779
779
|
[C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
|
|
780
780
|
};
|
|
781
|
-
export declare type DeleteQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends
|
|
781
|
+
export declare type DeleteQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : never;
|
|
782
782
|
declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
|
|
783
783
|
declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
|
|
784
784
|
[C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
|
|
785
785
|
};
|
|
786
|
-
export declare type DeleteQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends
|
|
786
|
+
export declare type DeleteQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : never;
|
|
787
787
|
declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
|
|
788
788
|
declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
|
|
789
789
|
[C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="./delete-query-builder.d.ts" />
|
|
2
2
|
import { parseJoin, } from '../parser/join-parser.js';
|
|
3
3
|
import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
|
|
4
|
-
import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
|
|
5
4
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
6
5
|
import { preventAwait } from '../util/prevent-await.js';
|
|
7
6
|
import { freeze } from '../util/object-utils.js';
|
|
@@ -11,6 +10,8 @@ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
|
11
10
|
import { LimitNode } from '../operation-node/limit-node.js';
|
|
12
11
|
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
13
12
|
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
13
|
+
import { parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
|
|
14
|
+
import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
|
|
14
15
|
export class DeleteQueryBuilder {
|
|
15
16
|
#props;
|
|
16
17
|
constructor(props) {
|
|
@@ -19,49 +20,49 @@ export class DeleteQueryBuilder {
|
|
|
19
20
|
where(...args) {
|
|
20
21
|
return new DeleteQueryBuilder({
|
|
21
22
|
...this.#props,
|
|
22
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
23
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhere(args)),
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
whereRef(lhs, op, rhs) {
|
|
26
27
|
return new DeleteQueryBuilder({
|
|
27
28
|
...this.#props,
|
|
28
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
29
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
orWhere(...args) {
|
|
32
33
|
return new DeleteQueryBuilder({
|
|
33
34
|
...this.#props,
|
|
34
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode,
|
|
35
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhere(args)),
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
orWhereRef(lhs, op, rhs) {
|
|
38
39
|
return new DeleteQueryBuilder({
|
|
39
40
|
...this.#props,
|
|
40
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode,
|
|
41
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
44
|
whereExists(arg) {
|
|
44
45
|
return new DeleteQueryBuilder({
|
|
45
46
|
...this.#props,
|
|
46
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
47
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExists(arg)),
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
50
|
whereNotExists(arg) {
|
|
50
51
|
return new DeleteQueryBuilder({
|
|
51
52
|
...this.#props,
|
|
52
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
53
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExists(arg)),
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
orWhereExists(arg) {
|
|
56
57
|
return new DeleteQueryBuilder({
|
|
57
58
|
...this.#props,
|
|
58
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode,
|
|
59
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExists(arg)),
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
orWhereNotExists(arg) {
|
|
62
63
|
return new DeleteQueryBuilder({
|
|
63
64
|
...this.#props,
|
|
64
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode,
|
|
65
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExists(arg)),
|
|
65
66
|
});
|
|
66
67
|
}
|
|
67
68
|
innerJoin(...args) {
|
|
@@ -261,15 +262,17 @@ export class DeleteQueryBuilder {
|
|
|
261
262
|
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
262
263
|
*/
|
|
263
264
|
async execute() {
|
|
264
|
-
const
|
|
265
|
-
const query =
|
|
266
|
-
const result = await this.#props.executor.executeQuery(
|
|
265
|
+
const compiledQuery = this.compile();
|
|
266
|
+
const query = compiledQuery.query;
|
|
267
|
+
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
267
268
|
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
268
269
|
return result.rows;
|
|
269
270
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
271
|
+
return [
|
|
272
|
+
new DeleteResult(
|
|
273
|
+
// TODO: remove numUpdatedOrDeletedRows.
|
|
274
|
+
(result.numAffectedRows ?? result.numUpdatedOrDeletedRows)),
|
|
275
|
+
];
|
|
273
276
|
}
|
|
274
277
|
/**
|
|
275
278
|
* Executes the query and returns the first result or undefined if
|
|
@@ -313,7 +316,7 @@ export class DeleteQueryBuilder {
|
|
|
313
316
|
async explain(format, options) {
|
|
314
317
|
const builder = new DeleteQueryBuilder({
|
|
315
318
|
...this.#props,
|
|
316
|
-
queryNode: DeleteQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options)),
|
|
319
|
+
queryNode: DeleteQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options?.toOperationNode())),
|
|
317
320
|
});
|
|
318
321
|
return await builder.execute();
|
|
319
322
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from './select-query-builder.js';
|
|
2
2
|
import { TableExpression, From, FromTables } from '../parser/table-parser.js';
|
|
3
|
-
import {
|
|
3
|
+
import { FunctionModule } from './function-module.js';
|
|
4
4
|
import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
5
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
6
6
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
@@ -8,7 +8,7 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
8
8
|
#private;
|
|
9
9
|
constructor(props: ExpressionBuilderProps);
|
|
10
10
|
/**
|
|
11
|
-
* Returns a {@link
|
|
11
|
+
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
12
12
|
* calls.
|
|
13
13
|
*
|
|
14
14
|
* The difference between this and {@link Kysely.fn} is that this one is more
|
|
@@ -38,7 +38,7 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
38
38
|
* having count("pet"."id") > $1
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
get fn():
|
|
41
|
+
get fn(): FunctionModule<DB, TB>;
|
|
42
42
|
/**
|
|
43
43
|
* Creates a subquery.
|
|
44
44
|
*
|
|
@@ -4,7 +4,7 @@ import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
|
4
4
|
import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
5
5
|
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
|
|
6
6
|
import { createQueryId } from '../util/query-id.js';
|
|
7
|
-
import {
|
|
7
|
+
import { FunctionModule } from './function-module.js';
|
|
8
8
|
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
9
9
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
10
10
|
import { freeze } from '../util/object-utils.js';
|
|
@@ -15,7 +15,7 @@ export class ExpressionBuilder {
|
|
|
15
15
|
this.#props = freeze(props);
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Returns a {@link
|
|
18
|
+
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
19
19
|
* calls.
|
|
20
20
|
*
|
|
21
21
|
* The difference between this and {@link Kysely.fn} is that this one is more
|
|
@@ -46,7 +46,7 @@ export class ExpressionBuilder {
|
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
48
|
get fn() {
|
|
49
|
-
return new
|
|
49
|
+
return new FunctionModule();
|
|
50
50
|
}
|
|
51
51
|
selectFrom(table) {
|
|
52
52
|
return new SelectQueryBuilder({
|