kysely 0.27.6 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -1
- package/deno.check.d.ts +7 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
- package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
- package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
- package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/cjs/driver/database-connection.d.ts +0 -4
- package/dist/cjs/driver/driver.d.ts +17 -0
- package/dist/cjs/driver/driver.js +13 -1
- package/dist/cjs/driver/dummy-driver.d.ts +3 -0
- package/dist/cjs/driver/dummy-driver.js +9 -0
- package/dist/cjs/driver/runtime-driver.d.ts +4 -0
- package/dist/cjs/driver/runtime-driver.js +43 -3
- package/dist/cjs/expression/expression-builder.d.ts +7 -10
- package/dist/cjs/helpers/postgres.d.ts +48 -0
- package/dist/cjs/helpers/postgres.js +50 -0
- package/dist/cjs/index.d.ts +13 -2
- package/dist/cjs/index.js +13 -2
- package/dist/cjs/kysely.d.ts +339 -2
- package/dist/cjs/kysely.js +465 -11
- package/dist/cjs/migration/migrator.d.ts +8 -0
- package/dist/cjs/migration/migrator.js +1 -1
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
- package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
- package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
- package/dist/cjs/operation-node/collate-node.d.ts +13 -0
- package/dist/cjs/operation-node/collate-node.js +19 -0
- package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-type-node.js +1 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
- package/dist/cjs/operation-node/delete-query-node.js +11 -15
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
- package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
- package/dist/cjs/operation-node/or-action-node.js +18 -0
- package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
- package/dist/cjs/operation-node/order-by-item-node.js +6 -0
- package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
- package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
- package/dist/cjs/operation-node/query-node.d.ts +7 -0
- package/dist/cjs/operation-node/query-node.js +15 -0
- package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
- package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
- package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
- package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
- package/dist/cjs/operation-node/select-query-node.js +11 -15
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
- package/dist/cjs/operation-node/update-query-node.js +5 -2
- package/dist/cjs/parser/collate-parser.d.ts +1 -0
- package/dist/cjs/parser/collate-parser.js +2 -0
- package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
- package/dist/cjs/parser/delete-from-parser.js +2 -0
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.js +7 -1
- package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
- package/dist/cjs/parser/merge-into-parser.js +2 -0
- package/dist/cjs/parser/order-by-parser.d.ts +18 -5
- package/dist/cjs/parser/order-by-parser.js +24 -14
- package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
- package/dist/cjs/parser/savepoint-parser.js +11 -0
- package/dist/cjs/parser/select-from-parser.d.ts +4 -0
- package/dist/cjs/parser/select-from-parser.js +2 -0
- package/dist/cjs/parser/table-parser.d.ts +2 -5
- package/dist/cjs/parser/update-parser.d.ts +5 -0
- package/dist/cjs/parser/update-parser.js +2 -0
- package/dist/cjs/parser/update-set-parser.d.ts +7 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
- package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
- package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
- package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
- package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
- package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
- package/dist/cjs/query-builder/cte-builder.js +0 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
- package/dist/cjs/query-builder/delete-query-builder.js +12 -78
- package/dist/cjs/query-builder/function-module.d.ts +31 -4
- package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
- package/dist/cjs/query-builder/insert-query-builder.js +197 -10
- package/dist/cjs/query-builder/join-builder.js +0 -2
- package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
- package/dist/cjs/query-builder/merge-query-builder.js +28 -7
- package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
- package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
- package/dist/cjs/query-builder/order-by-interface.js +2 -0
- package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
- package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
- package/dist/cjs/query-builder/over-builder.d.ts +43 -6
- package/dist/cjs/query-builder/over-builder.js +8 -25
- package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
- package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
- package/dist/cjs/query-builder/select-query-builder.js +26 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
- package/dist/cjs/query-builder/update-query-builder.js +17 -15
- package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
- package/dist/cjs/query-compiler/compiled-query.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
- package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
- package/dist/cjs/query-creator.d.ts +23 -25
- package/dist/cjs/query-creator.js +280 -8
- package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
- package/dist/cjs/query-executor/default-query-executor.js +2 -2
- package/dist/cjs/query-executor/query-executor-base.js +7 -25
- package/dist/cjs/raw-builder/raw-builder.js +0 -3
- package/dist/cjs/raw-builder/sql.d.ts +3 -3
- package/dist/cjs/raw-builder/sql.js +1 -1
- package/dist/cjs/schema/alter-column-builder.js +0 -3
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
- package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
- package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
- package/dist/cjs/schema/alter-table-builder.js +21 -10
- package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
- package/dist/cjs/schema/alter-table-executor.js +0 -2
- package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
- package/dist/cjs/schema/check-constraint-builder.js +20 -0
- package/dist/cjs/schema/column-definition-builder.js +0 -2
- package/dist/cjs/schema/create-index-builder.js +1 -3
- package/dist/cjs/schema/create-schema-builder.js +0 -2
- package/dist/cjs/schema/create-table-builder.d.ts +5 -4
- package/dist/cjs/schema/create-table-builder.js +9 -7
- package/dist/cjs/schema/create-type-builder.d.ts +1 -1
- package/dist/cjs/schema/create-type-builder.js +0 -2
- package/dist/cjs/schema/create-view-builder.js +0 -2
- package/dist/cjs/schema/drop-index-builder.js +0 -2
- package/dist/cjs/schema/drop-schema-builder.js +0 -2
- package/dist/cjs/schema/drop-table-builder.js +0 -2
- package/dist/cjs/schema/drop-type-builder.js +0 -2
- package/dist/cjs/schema/drop-view-builder.js +0 -2
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
- package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
- package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
- package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
- package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
- package/dist/cjs/schema/schema.d.ts +14 -0
- package/dist/cjs/schema/schema.js +21 -0
- package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
- package/dist/cjs/schema/unique-constraint-builder.js +26 -5
- package/dist/cjs/util/infer-result.d.ts +1 -1
- package/dist/cjs/util/log.d.ts +1 -0
- package/dist/cjs/util/log.js +3 -2
- package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
- package/dist/cjs/util/provide-controlled-connection.js +24 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
- package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
- package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
- package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/esm/driver/database-connection.d.ts +0 -4
- package/dist/esm/driver/driver.d.ts +17 -0
- package/dist/esm/driver/driver.js +11 -0
- package/dist/esm/driver/dummy-driver.d.ts +3 -0
- package/dist/esm/driver/dummy-driver.js +9 -0
- package/dist/esm/driver/runtime-driver.d.ts +4 -0
- package/dist/esm/driver/runtime-driver.js +43 -3
- package/dist/esm/expression/expression-builder.d.ts +7 -10
- package/dist/esm/helpers/postgres.d.ts +48 -0
- package/dist/esm/helpers/postgres.js +49 -0
- package/dist/esm/index.d.ts +13 -2
- package/dist/esm/index.js +11 -1
- package/dist/esm/kysely.d.ts +339 -2
- package/dist/esm/kysely.js +461 -10
- package/dist/esm/migration/migrator.d.ts +8 -0
- package/dist/esm/migration/migrator.js +1 -1
- package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
- package/dist/esm/operation-node/aggregate-function-node.js +4 -3
- package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
- package/dist/esm/operation-node/collate-node.d.ts +13 -0
- package/dist/esm/operation-node/collate-node.js +17 -0
- package/dist/esm/operation-node/constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.d.ts +1 -1
- package/dist/esm/operation-node/create-type-node.js +1 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
- package/dist/esm/operation-node/delete-query-node.js +11 -15
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
- package/dist/esm/operation-node/operation-node-transformer.js +352 -312
- package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/or-action-node.d.ts +12 -0
- package/dist/esm/operation-node/or-action-node.js +16 -0
- package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
- package/dist/esm/operation-node/order-by-item-node.js +6 -0
- package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
- package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
- package/dist/esm/operation-node/query-node.d.ts +7 -0
- package/dist/esm/operation-node/query-node.js +15 -0
- package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
- package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
- package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
- package/dist/esm/operation-node/rename-constraint-node.js +18 -0
- package/dist/esm/operation-node/select-query-node.d.ts +8 -2
- package/dist/esm/operation-node/select-query-node.js +11 -15
- package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -4
- package/dist/esm/operation-node/update-query-node.js +5 -2
- package/dist/esm/parser/collate-parser.d.ts +1 -0
- package/dist/esm/parser/collate-parser.js +2 -0
- package/dist/esm/parser/delete-from-parser.d.ts +5 -0
- package/dist/esm/parser/delete-from-parser.js +2 -0
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.js +7 -1
- package/dist/esm/parser/merge-into-parser.d.ts +5 -0
- package/dist/esm/parser/merge-into-parser.js +2 -0
- package/dist/esm/parser/order-by-parser.d.ts +18 -5
- package/dist/esm/parser/order-by-parser.js +27 -17
- package/dist/esm/parser/savepoint-parser.d.ts +4 -0
- package/dist/esm/parser/savepoint-parser.js +9 -0
- package/dist/esm/parser/select-from-parser.d.ts +4 -0
- package/dist/esm/parser/select-from-parser.js +2 -0
- package/dist/esm/parser/table-parser.d.ts +2 -5
- package/dist/esm/parser/update-parser.d.ts +5 -0
- package/dist/esm/parser/update-parser.js +2 -0
- package/dist/esm/parser/update-set-parser.d.ts +7 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
- package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
- package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
- package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
- package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
- package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
- package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
- package/dist/esm/query-builder/cte-builder.js +0 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
- package/dist/esm/query-builder/delete-query-builder.js +12 -78
- package/dist/esm/query-builder/function-module.d.ts +31 -4
- package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
- package/dist/esm/query-builder/insert-query-builder.js +197 -10
- package/dist/esm/query-builder/join-builder.js +0 -2
- package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
- package/dist/esm/query-builder/merge-query-builder.js +29 -8
- package/dist/esm/query-builder/on-conflict-builder.js +0 -4
- package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
- package/dist/esm/query-builder/order-by-interface.js +2 -0
- package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
- package/dist/esm/query-builder/order-by-item-builder.js +72 -0
- package/dist/esm/query-builder/over-builder.d.ts +43 -6
- package/dist/esm/query-builder/over-builder.js +8 -25
- package/dist/esm/query-builder/returning-interface.d.ts +20 -3
- package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
- package/dist/esm/query-builder/select-query-builder.js +26 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
- package/dist/esm/query-builder/update-query-builder.js +17 -15
- package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
- package/dist/esm/query-compiler/compiled-query.js +2 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
- package/dist/esm/query-compiler/default-query-compiler.js +97 -2
- package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
- package/dist/esm/query-creator.d.ts +23 -25
- package/dist/esm/query-creator.js +281 -9
- package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
- package/dist/esm/query-executor/default-query-executor.js +2 -2
- package/dist/esm/query-executor/query-executor-base.js +7 -25
- package/dist/esm/raw-builder/raw-builder.js +0 -3
- package/dist/esm/raw-builder/sql.d.ts +3 -3
- package/dist/esm/raw-builder/sql.js +1 -1
- package/dist/esm/schema/alter-column-builder.js +0 -3
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
- package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
- package/dist/esm/schema/alter-table-builder.d.ts +7 -3
- package/dist/esm/schema/alter-table-builder.js +22 -11
- package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
- package/dist/esm/schema/alter-table-executor.js +0 -2
- package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
- package/dist/esm/schema/check-constraint-builder.js +17 -0
- package/dist/esm/schema/column-definition-builder.js +0 -2
- package/dist/esm/schema/create-index-builder.js +1 -3
- package/dist/esm/schema/create-schema-builder.js +0 -2
- package/dist/esm/schema/create-table-builder.d.ts +5 -4
- package/dist/esm/schema/create-table-builder.js +10 -8
- package/dist/esm/schema/create-type-builder.d.ts +1 -1
- package/dist/esm/schema/create-type-builder.js +0 -2
- package/dist/esm/schema/create-view-builder.js +0 -2
- package/dist/esm/schema/drop-index-builder.js +0 -2
- package/dist/esm/schema/drop-schema-builder.js +0 -2
- package/dist/esm/schema/drop-table-builder.js +0 -2
- package/dist/esm/schema/drop-type-builder.js +0 -2
- package/dist/esm/schema/drop-view-builder.js +0 -2
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
- package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
- package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
- package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
- package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
- package/dist/esm/schema/schema.d.ts +14 -0
- package/dist/esm/schema/schema.js +21 -0
- package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
- package/dist/esm/schema/unique-constraint-builder.js +26 -5
- package/dist/esm/util/infer-result.d.ts +1 -1
- package/dist/esm/util/log.d.ts +1 -0
- package/dist/esm/util/log.js +3 -2
- package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
- package/dist/esm/util/provide-controlled-connection.js +22 -0
- package/outdated-typescript.d.ts +5 -0
- package/package.json +16 -2
- package/CONTRIBUTING.md +0 -168
- package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
- package/dist/cjs/util/prevent-await.d.ts +0 -1
- package/dist/cjs/util/prevent-await.js +0 -13
- package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
- package/dist/esm/util/prevent-await.d.ts +0 -1
- package/dist/esm/util/prevent-await.js +0 -11
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BinaryOperationNode } from '../../operation-node/binary-operation-node.js';
|
|
2
|
+
import { OperatorNode } from '../../operation-node/operator-node.js';
|
|
3
|
+
import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
|
|
4
|
+
import { ValueListNode } from '../../operation-node/value-list-node.js';
|
|
5
|
+
export interface HandleEmptyInListsOptions {
|
|
6
|
+
/**
|
|
7
|
+
* The strategy to use when handling `in ()` and `not in ()`.
|
|
8
|
+
*
|
|
9
|
+
* See {@link HandleEmptyInListsPlugin} for examples.
|
|
10
|
+
*/
|
|
11
|
+
strategy: EmptyInListsStrategy;
|
|
12
|
+
}
|
|
13
|
+
export type EmptyInListNode = BinaryOperationNode & {
|
|
14
|
+
operator: OperatorNode & {
|
|
15
|
+
operator: 'in' | 'not in';
|
|
16
|
+
};
|
|
17
|
+
rightOperand: (ValueListNode | PrimitiveValueListNode) & {
|
|
18
|
+
values: Readonly<[]>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type EmptyInListsStrategy = (node: EmptyInListNode) => BinaryOperationNode;
|
|
22
|
+
/**
|
|
23
|
+
* Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
|
|
24
|
+
* false) depending on the original operator.
|
|
25
|
+
*
|
|
26
|
+
* This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
|
|
27
|
+
*
|
|
28
|
+
* See {@link pushValueIntoList} for an alternative strategy.
|
|
29
|
+
*/
|
|
30
|
+
export declare function replaceWithNoncontingentExpression(node: EmptyInListNode): BinaryOperationNode;
|
|
31
|
+
/**
|
|
32
|
+
* When `in`, pushes a `null` value into the list resulting in `in (null)`. This
|
|
33
|
+
* is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
|
|
34
|
+
* of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
|
|
35
|
+
* We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
|
|
36
|
+
* or `output` clauses, as the return type differs from the `SqlBool` default type.
|
|
37
|
+
*
|
|
38
|
+
* When `not in`, casts the left operand as `char` and pushes a literal value into
|
|
39
|
+
* the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
|
|
40
|
+
* is required to avoid database errors with non-string columns.
|
|
41
|
+
*
|
|
42
|
+
* See {@link replaceWithNoncontingentExpression} for an alternative strategy.
|
|
43
|
+
*/
|
|
44
|
+
export declare function pushValueIntoList(uniqueNotInLiteral: '__kysely_no_values_were_provided__' | (string & {})): EmptyInListsStrategy;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/// <reference types="./handle-empty-in-lists.d.ts" />
|
|
2
|
+
import { BinaryOperationNode } from '../../operation-node/binary-operation-node.js';
|
|
3
|
+
import { CastNode } from '../../operation-node/cast-node.js';
|
|
4
|
+
import { DataTypeNode } from '../../operation-node/data-type-node.js';
|
|
5
|
+
import { OperatorNode } from '../../operation-node/operator-node.js';
|
|
6
|
+
import { ValueListNode } from '../../operation-node/value-list-node.js';
|
|
7
|
+
import { ValueNode } from '../../operation-node/value-node.js';
|
|
8
|
+
import { freeze } from '../../util/object-utils.js';
|
|
9
|
+
let contradiction;
|
|
10
|
+
let eq;
|
|
11
|
+
let one;
|
|
12
|
+
let tautology;
|
|
13
|
+
/**
|
|
14
|
+
* Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
|
|
15
|
+
* false) depending on the original operator.
|
|
16
|
+
*
|
|
17
|
+
* This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
|
|
18
|
+
*
|
|
19
|
+
* See {@link pushValueIntoList} for an alternative strategy.
|
|
20
|
+
*/
|
|
21
|
+
export function replaceWithNoncontingentExpression(node) {
|
|
22
|
+
const _one = (one ||= ValueNode.createImmediate(1));
|
|
23
|
+
const _eq = (eq ||= OperatorNode.create('='));
|
|
24
|
+
if (node.operator.operator === 'in') {
|
|
25
|
+
return (contradiction ||= BinaryOperationNode.create(_one, _eq, ValueNode.createImmediate(0)));
|
|
26
|
+
}
|
|
27
|
+
return (tautology ||= BinaryOperationNode.create(_one, _eq, _one));
|
|
28
|
+
}
|
|
29
|
+
let char;
|
|
30
|
+
let listNull;
|
|
31
|
+
let listVal;
|
|
32
|
+
/**
|
|
33
|
+
* When `in`, pushes a `null` value into the list resulting in `in (null)`. This
|
|
34
|
+
* is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
|
|
35
|
+
* of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
|
|
36
|
+
* We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
|
|
37
|
+
* or `output` clauses, as the return type differs from the `SqlBool` default type.
|
|
38
|
+
*
|
|
39
|
+
* When `not in`, casts the left operand as `char` and pushes a literal value into
|
|
40
|
+
* the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
|
|
41
|
+
* is required to avoid database errors with non-string columns.
|
|
42
|
+
*
|
|
43
|
+
* See {@link replaceWithNoncontingentExpression} for an alternative strategy.
|
|
44
|
+
*/
|
|
45
|
+
export function pushValueIntoList(uniqueNotInLiteral) {
|
|
46
|
+
return function pushValueIntoList(node) {
|
|
47
|
+
if (node.operator.operator === 'in') {
|
|
48
|
+
return freeze({
|
|
49
|
+
...node,
|
|
50
|
+
rightOperand: (listNull ||= ValueListNode.create([
|
|
51
|
+
ValueNode.createImmediate(null),
|
|
52
|
+
])),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return freeze({
|
|
56
|
+
...node,
|
|
57
|
+
leftOperand: CastNode.create(node.leftOperand, (char ||= DataTypeNode.create('char'))),
|
|
58
|
+
rightOperand: (listVal ||= ValueListNode.create([
|
|
59
|
+
ValueNode.createImmediate(uniqueNotInLiteral),
|
|
60
|
+
])),
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -11,7 +11,7 @@ import { ImmediateValueTransformer } from './immediate-value-transformer.js';
|
|
|
11
11
|
export class ImmediateValuePlugin {
|
|
12
12
|
#transformer = new ImmediateValueTransformer();
|
|
13
13
|
transformQuery(args) {
|
|
14
|
-
return this.#transformer.transformNode(args.node);
|
|
14
|
+
return this.#transformer.transformNode(args.node, args.queryId);
|
|
15
15
|
}
|
|
16
16
|
transformResult(args) {
|
|
17
17
|
return Promise.resolve(args.result);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
|
+
import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
|
|
2
3
|
import { ValueNode } from '../../operation-node/value-node.js';
|
|
3
4
|
/**
|
|
4
5
|
* Transforms all ValueNodes to immediate.
|
|
@@ -9,5 +10,6 @@ import { ValueNode } from '../../operation-node/value-node.js';
|
|
|
9
10
|
* @internal
|
|
10
11
|
*/
|
|
11
12
|
export declare class ImmediateValueTransformer extends OperationNodeTransformer {
|
|
13
|
+
transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
12
14
|
transformValue(node: ValueNode): ValueNode;
|
|
13
15
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/// <reference types="./immediate-value-transformer.d.ts" />
|
|
2
2
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
3
|
+
import { ValueListNode } from '../../operation-node/value-list-node.js';
|
|
4
|
+
import { ValueNode } from '../../operation-node/value-node.js';
|
|
3
5
|
/**
|
|
4
6
|
* Transforms all ValueNodes to immediate.
|
|
5
7
|
*
|
|
@@ -9,10 +11,10 @@ import { OperationNodeTransformer } from '../../operation-node/operation-node-tr
|
|
|
9
11
|
* @internal
|
|
10
12
|
*/
|
|
11
13
|
export class ImmediateValueTransformer extends OperationNodeTransformer {
|
|
14
|
+
transformPrimitiveValueList(node) {
|
|
15
|
+
return ValueListNode.create(node.values.map(ValueNode.createImmediate));
|
|
16
|
+
}
|
|
12
17
|
transformValue(node) {
|
|
13
|
-
return
|
|
14
|
-
...super.transformValue(node),
|
|
15
|
-
immediate: true,
|
|
16
|
-
};
|
|
18
|
+
return ValueNode.createImmediate(node.value);
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -6,7 +6,7 @@ export class WithSchemaPlugin {
|
|
|
6
6
|
this.#transformer = new WithSchemaTransformer(schema);
|
|
7
7
|
}
|
|
8
8
|
transformQuery(args) {
|
|
9
|
-
return this.#transformer.transformNode(args.node);
|
|
9
|
+
return this.#transformer.transformNode(args.node, args.queryId);
|
|
10
10
|
}
|
|
11
11
|
async transformResult(args) {
|
|
12
12
|
return args.result;
|
|
@@ -4,12 +4,13 @@ import { OperationNodeTransformer } from '../../operation-node/operation-node-tr
|
|
|
4
4
|
import { OperationNode } from '../../operation-node/operation-node.js';
|
|
5
5
|
import { ReferencesNode } from '../../operation-node/references-node.js';
|
|
6
6
|
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
7
|
+
import { QueryId } from '../../util/query-id.js';
|
|
7
8
|
export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
8
9
|
#private;
|
|
9
10
|
constructor(schema: string);
|
|
10
|
-
protected transformNodeImpl<T extends OperationNode>(node: T): T;
|
|
11
|
-
protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
|
|
12
|
-
protected transformReferences(node: ReferencesNode): ReferencesNode;
|
|
13
|
-
protected transformAggregateFunction(node: AggregateFunctionNode): AggregateFunctionNode;
|
|
14
|
-
protected transformFunction(node: FunctionNode): FunctionNode;
|
|
11
|
+
protected transformNodeImpl<T extends OperationNode>(node: T, queryId: QueryId): T;
|
|
12
|
+
protected transformSchemableIdentifier(node: SchemableIdentifierNode, queryId: QueryId): SchemableIdentifierNode;
|
|
13
|
+
protected transformReferences(node: ReferencesNode, queryId: QueryId): ReferencesNode;
|
|
14
|
+
protected transformAggregateFunction(node: AggregateFunctionNode, queryId: QueryId): AggregateFunctionNode;
|
|
15
|
+
protected transformFunction(node: FunctionNode, queryId: QueryId): FunctionNode;
|
|
15
16
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="./with-schema-transformer.d.ts" />
|
|
2
2
|
import { AliasNode } from '../../operation-node/alias-node.js';
|
|
3
3
|
import { IdentifierNode } from '../../operation-node/identifier-node.js';
|
|
4
|
+
import { ListNode } from '../../operation-node/list-node.js';
|
|
4
5
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
5
6
|
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
6
7
|
import { TableNode } from '../../operation-node/table-node.js';
|
|
@@ -17,6 +18,7 @@ const ROOT_OPERATION_NODES = freeze({
|
|
|
17
18
|
CreateTableNode: true,
|
|
18
19
|
CreateTypeNode: true,
|
|
19
20
|
CreateViewNode: true,
|
|
21
|
+
RefreshMaterializedViewNode: true,
|
|
20
22
|
DeleteQueryNode: true,
|
|
21
23
|
DropIndexNode: true,
|
|
22
24
|
DropSchemaNode: true,
|
|
@@ -41,9 +43,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
41
43
|
super();
|
|
42
44
|
this.#schema = schema;
|
|
43
45
|
}
|
|
44
|
-
transformNodeImpl(node) {
|
|
46
|
+
transformNodeImpl(node, queryId) {
|
|
45
47
|
if (!this.#isRootOperationNode(node)) {
|
|
46
|
-
return super.transformNodeImpl(node);
|
|
48
|
+
return super.transformNodeImpl(node, queryId);
|
|
47
49
|
}
|
|
48
50
|
const ctes = this.#collectCTEs(node);
|
|
49
51
|
for (const cte of ctes) {
|
|
@@ -53,7 +55,7 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
53
55
|
for (const table of tables) {
|
|
54
56
|
this.#schemableIds.add(table);
|
|
55
57
|
}
|
|
56
|
-
const transformed = super.transformNodeImpl(node);
|
|
58
|
+
const transformed = super.transformNodeImpl(node, queryId);
|
|
57
59
|
for (const table of tables) {
|
|
58
60
|
this.#schemableIds.delete(table);
|
|
59
61
|
}
|
|
@@ -62,8 +64,8 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
62
64
|
}
|
|
63
65
|
return transformed;
|
|
64
66
|
}
|
|
65
|
-
transformSchemableIdentifier(node) {
|
|
66
|
-
const transformed = super.transformSchemableIdentifier(node);
|
|
67
|
+
transformSchemableIdentifier(node, queryId) {
|
|
68
|
+
const transformed = super.transformSchemableIdentifier(node, queryId);
|
|
67
69
|
if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
|
|
68
70
|
return transformed;
|
|
69
71
|
}
|
|
@@ -72,8 +74,8 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
72
74
|
schema: IdentifierNode.create(this.#schema),
|
|
73
75
|
};
|
|
74
76
|
}
|
|
75
|
-
transformReferences(node) {
|
|
76
|
-
const transformed = super.transformReferences(node);
|
|
77
|
+
transformReferences(node, queryId) {
|
|
78
|
+
const transformed = super.transformReferences(node, queryId);
|
|
77
79
|
if (transformed.table.table.schema) {
|
|
78
80
|
return transformed;
|
|
79
81
|
}
|
|
@@ -82,27 +84,27 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
82
84
|
table: TableNode.createWithSchema(this.#schema, transformed.table.table.identifier.name),
|
|
83
85
|
};
|
|
84
86
|
}
|
|
85
|
-
transformAggregateFunction(node) {
|
|
87
|
+
transformAggregateFunction(node, queryId) {
|
|
86
88
|
return {
|
|
87
|
-
...super.transformAggregateFunction({ ...node, aggregated: [] }),
|
|
88
|
-
aggregated: this.#transformTableArgsWithoutSchemas(node, 'aggregated'),
|
|
89
|
+
...super.transformAggregateFunction({ ...node, aggregated: [] }, queryId),
|
|
90
|
+
aggregated: this.#transformTableArgsWithoutSchemas(node, queryId, 'aggregated'),
|
|
89
91
|
};
|
|
90
92
|
}
|
|
91
|
-
transformFunction(node) {
|
|
93
|
+
transformFunction(node, queryId) {
|
|
92
94
|
return {
|
|
93
|
-
...super.transformFunction({ ...node, arguments: [] }),
|
|
94
|
-
arguments: this.#transformTableArgsWithoutSchemas(node, 'arguments'),
|
|
95
|
+
...super.transformFunction({ ...node, arguments: [] }, queryId),
|
|
96
|
+
arguments: this.#transformTableArgsWithoutSchemas(node, queryId, 'arguments'),
|
|
95
97
|
};
|
|
96
98
|
}
|
|
97
|
-
#transformTableArgsWithoutSchemas(node, argsKey) {
|
|
99
|
+
#transformTableArgsWithoutSchemas(node, queryId, argsKey) {
|
|
98
100
|
return SCHEMALESS_FUNCTIONS[node.func]
|
|
99
101
|
? node[argsKey].map((arg) => !TableNode.is(arg) || arg.table.schema
|
|
100
|
-
? this.transformNode(arg)
|
|
102
|
+
? this.transformNode(arg, queryId)
|
|
101
103
|
: {
|
|
102
104
|
...arg,
|
|
103
|
-
table: this.transformIdentifier(arg.table.identifier),
|
|
105
|
+
table: this.transformIdentifier(arg.table.identifier, queryId),
|
|
104
106
|
})
|
|
105
|
-
: this.transformNodeList(node[argsKey]);
|
|
107
|
+
: this.transformNodeList(node[argsKey], queryId);
|
|
106
108
|
}
|
|
107
109
|
#isRootOperationNode(node) {
|
|
108
110
|
return node.kind in ROOT_OPERATION_NODES;
|
|
@@ -141,13 +143,16 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
141
143
|
return ctes;
|
|
142
144
|
}
|
|
143
145
|
#collectSchemableIdsFromTableExpr(node, schemableIds) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
146
|
+
if (TableNode.is(node)) {
|
|
147
|
+
this.#collectSchemableId(node.table, schemableIds);
|
|
148
|
+
}
|
|
149
|
+
else if (AliasNode.is(node) && TableNode.is(node.node)) {
|
|
150
|
+
this.#collectSchemableId(node.node.table, schemableIds);
|
|
151
|
+
}
|
|
152
|
+
else if (ListNode.is(node)) {
|
|
153
|
+
for (const table of node.items) {
|
|
154
|
+
this.#collectSchemableIdsFromTableExpr(table, schemableIds);
|
|
155
|
+
}
|
|
151
156
|
}
|
|
152
157
|
}
|
|
153
158
|
#collectSchemableId(node, schemableIds) {
|
|
@@ -2,13 +2,13 @@ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node
|
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
3
|
import { OverBuilder } from './over-builder.js';
|
|
4
4
|
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
5
|
-
import { ReferenceExpression
|
|
5
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
6
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
7
|
import { SqlBool } from '../util/type-utils.js';
|
|
8
8
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements AliasableExpression<O> {
|
|
9
|
+
import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
|
|
10
|
+
import { OrderByInterface } from './order-by-interface.js';
|
|
11
|
+
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements OrderByInterface<DB, TB, {}>, AliasableExpression<O> {
|
|
12
12
|
#private;
|
|
13
13
|
constructor(props: AggregateFunctionBuilderProps);
|
|
14
14
|
/** @private */
|
|
@@ -108,7 +108,85 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
108
108
|
* inner join "pet" ON "pet"."owner_id" = "person"."id"
|
|
109
109
|
* ```
|
|
110
110
|
*/
|
|
111
|
-
orderBy<OE extends
|
|
111
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
|
|
114
|
+
*/
|
|
115
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
|
|
118
|
+
*/
|
|
119
|
+
orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
|
|
120
|
+
/**
|
|
121
|
+
* @deprecated Use `orderBy(expr, (ob) => ...)` instead.
|
|
122
|
+
*/
|
|
123
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
124
|
+
/**
|
|
125
|
+
* Clears the `order by` clause from the query.
|
|
126
|
+
*
|
|
127
|
+
* See {@link orderBy} for adding an `order by` clause or item to a query.
|
|
128
|
+
*
|
|
129
|
+
* ### Examples
|
|
130
|
+
*
|
|
131
|
+
* ```ts
|
|
132
|
+
* const query = db
|
|
133
|
+
* .selectFrom('person')
|
|
134
|
+
* .selectAll()
|
|
135
|
+
* .orderBy('id', 'desc')
|
|
136
|
+
*
|
|
137
|
+
* const results = await query
|
|
138
|
+
* .clearOrderBy()
|
|
139
|
+
* .execute()
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* The generated SQL (PostgreSQL):
|
|
143
|
+
*
|
|
144
|
+
* ```sql
|
|
145
|
+
* select * from "person"
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
clearOrderBy(): AggregateFunctionBuilder<DB, TB, O>;
|
|
149
|
+
/**
|
|
150
|
+
* Adds a `withing group` clause with a nested `order by` clause after the function.
|
|
151
|
+
*
|
|
152
|
+
* This is only supported by some dialects like PostgreSQL or MS SQL Server.
|
|
153
|
+
*
|
|
154
|
+
* ### Examples
|
|
155
|
+
*
|
|
156
|
+
* Most frequent person name:
|
|
157
|
+
*
|
|
158
|
+
* ```ts
|
|
159
|
+
* const result = await db
|
|
160
|
+
* .selectFrom('person')
|
|
161
|
+
* .select((eb) => [
|
|
162
|
+
* eb.fn
|
|
163
|
+
* .agg<string>('mode')
|
|
164
|
+
* .withinGroupOrderBy('person.first_name')
|
|
165
|
+
* .as('most_frequent_name')
|
|
166
|
+
* ])
|
|
167
|
+
* .executeTakeFirstOrThrow()
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* The generated SQL (PostgreSQL):
|
|
171
|
+
*
|
|
172
|
+
* ```sql
|
|
173
|
+
* select mode() within group (order by "person"."first_name") as "most_frequent_name"
|
|
174
|
+
* from "person"
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
|
|
178
|
+
/**
|
|
179
|
+
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `withinGroupOrderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
|
|
180
|
+
*/
|
|
181
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated It does ~2.9x more compile-time instantiations compared to a `withinGroupOrderBy(expr, direction)` call.
|
|
184
|
+
*/
|
|
185
|
+
withinGroupOrderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
|
|
186
|
+
/**
|
|
187
|
+
* @deprecated Use `withinGroupOrderBy(expr, (ob) => ...)` instead.
|
|
188
|
+
*/
|
|
189
|
+
withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
112
190
|
/**
|
|
113
191
|
* Adds a `filter` clause with a nested `where` clause after the function.
|
|
114
192
|
*
|
|
@@ -3,10 +3,10 @@ import { freeze } from '../util/object-utils.js';
|
|
|
3
3
|
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
4
4
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
5
5
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
6
|
-
import { preventAwait } from '../util/prevent-await.js';
|
|
7
6
|
import { createOverBuilder } from '../parser/parse-utils.js';
|
|
8
7
|
import { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
|
|
9
8
|
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
9
|
+
import { QueryNode } from '../operation-node/query-node.js';
|
|
10
10
|
export class AggregateFunctionBuilder {
|
|
11
11
|
#props;
|
|
12
12
|
constructor(props) {
|
|
@@ -71,33 +71,22 @@ export class AggregateFunctionBuilder {
|
|
|
71
71
|
aggregateFunctionNode: AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
* ```
|
|
88
|
-
*
|
|
89
|
-
* The generated SQL (PostgreSQL):
|
|
90
|
-
*
|
|
91
|
-
* ```sql
|
|
92
|
-
* select json_agg("pet" order by "pet"."name") as "person_pets"
|
|
93
|
-
* from "person"
|
|
94
|
-
* inner join "pet" ON "pet"."owner_id" = "person"."id"
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
|
-
orderBy(orderBy, direction) {
|
|
74
|
+
orderBy(...args) {
|
|
75
|
+
return new AggregateFunctionBuilder({
|
|
76
|
+
...this.#props,
|
|
77
|
+
aggregateFunctionNode: QueryNode.cloneWithOrderByItems(this.#props.aggregateFunctionNode, parseOrderBy(args)),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
clearOrderBy() {
|
|
81
|
+
return new AggregateFunctionBuilder({
|
|
82
|
+
...this.#props,
|
|
83
|
+
aggregateFunctionNode: QueryNode.cloneWithoutOrderBy(this.#props.aggregateFunctionNode),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
withinGroupOrderBy(...args) {
|
|
98
87
|
return new AggregateFunctionBuilder({
|
|
99
88
|
...this.#props,
|
|
100
|
-
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, parseOrderBy(
|
|
89
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, parseOrderBy(args), true),
|
|
101
90
|
});
|
|
102
91
|
}
|
|
103
92
|
filterWhere(...args) {
|
|
@@ -225,7 +214,6 @@ export class AggregateFunctionBuilder {
|
|
|
225
214
|
return this.#props.aggregateFunctionNode;
|
|
226
215
|
}
|
|
227
216
|
}
|
|
228
|
-
preventAwait(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
|
|
229
217
|
/**
|
|
230
218
|
* {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
|
|
231
219
|
*/
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./cte-builder.d.ts" />
|
|
2
2
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
3
|
-
import { preventAwait } from '../util/prevent-await.js';
|
|
4
3
|
import { freeze } from '../util/object-utils.js';
|
|
5
4
|
export class CTEBuilder {
|
|
6
5
|
#props;
|
|
@@ -33,4 +32,3 @@ export class CTEBuilder {
|
|
|
33
32
|
return this.#props.node;
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
|
-
preventAwait(CTEBuilder, "don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");
|
|
@@ -12,11 +12,11 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
12
12
|
import { QueryId } from '../util/query-id.js';
|
|
13
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
14
|
import { WhereInterface } from './where-interface.js';
|
|
15
|
-
import {
|
|
15
|
+
import { MultiTableReturningInterface } from './returning-interface.js';
|
|
16
16
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
17
17
|
import { DeleteResult } from './delete-result.js';
|
|
18
18
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
19
|
-
import {
|
|
19
|
+
import { OrderByExpression, OrderByModifiers, DirectedOrderByStringReference } from '../parser/order-by-parser.js';
|
|
20
20
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
21
21
|
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
22
22
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
@@ -25,7 +25,8 @@ import { Streamable } from '../util/streamable.js';
|
|
|
25
25
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
26
26
|
import { ValueExpression } from '../parser/value-parser.js';
|
|
27
27
|
import { OutputCallback, OutputExpression, OutputInterface, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
|
|
28
|
-
|
|
28
|
+
import { OrderByInterface } from './order-by-interface.js';
|
|
29
|
+
export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, MultiTableReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'deleted'>, OrderByInterface<DB, TB, {}>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
29
30
|
#private;
|
|
30
31
|
constructor(props: DeleteQueryBuilderProps);
|
|
31
32
|
/**
|
|
@@ -650,7 +651,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
650
651
|
* Allows you to return data from modified rows.
|
|
651
652
|
*
|
|
652
653
|
* On supported databases like PostgreSQL, this method can be chained to
|
|
653
|
-
* `insert`, `update` and `
|
|
654
|
+
* `insert`, `update`, `delete` and `merge` queries to return data.
|
|
654
655
|
*
|
|
655
656
|
* Note that on SQLite you need to give aliases for the expressions to avoid
|
|
656
657
|
* [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
|
|
@@ -802,8 +803,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
802
803
|
*/
|
|
803
804
|
returningAll<T extends TB>(tables: ReadonlyArray<T>): DeleteQueryBuilder<DB, TB, ReturningAllRow<DB, T, O>>;
|
|
804
805
|
/**
|
|
805
|
-
* Adds a `returning *` to an insert/update/delete
|
|
806
|
-
* that support `returning` such as PostgreSQL.
|
|
806
|
+
* Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
|
|
807
|
+
* query on databases that support `returning` such as PostgreSQL.
|
|
807
808
|
*
|
|
808
809
|
* Also see the {@link returning} method.
|
|
809
810
|
*/
|
|
@@ -975,61 +976,49 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
975
976
|
*/
|
|
976
977
|
clearLimit(): DeleteQueryBuilder<DB, TB, O>;
|
|
977
978
|
/**
|
|
978
|
-
*
|
|
979
|
-
*
|
|
980
|
-
* ### Examples
|
|
981
|
-
*
|
|
982
|
-
* ```ts
|
|
983
|
-
* await db.deleteFrom('pet')
|
|
984
|
-
* .returningAll()
|
|
985
|
-
* .where('name', '=', 'Max')
|
|
986
|
-
* .orderBy('id')
|
|
987
|
-
* .clearOrderBy()
|
|
988
|
-
* .execute()
|
|
989
|
-
* ```
|
|
990
|
-
*
|
|
991
|
-
* The generated SQL(PostgreSQL):
|
|
992
|
-
*
|
|
993
|
-
* ```sql
|
|
994
|
-
* delete from "pet" where "name" = "Max" returning *
|
|
995
|
-
* ```
|
|
979
|
+
* @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
|
|
996
980
|
*/
|
|
997
|
-
|
|
981
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): DeleteQueryBuilder<DB, TB, O>;
|
|
998
982
|
/**
|
|
999
|
-
*
|
|
1000
|
-
*
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
*
|
|
1005
|
-
*
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
983
|
+
* @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
|
|
984
|
+
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
|
|
985
|
+
*/
|
|
986
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): DeleteQueryBuilder<DB, TB, O>;
|
|
987
|
+
/**
|
|
988
|
+
* @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
|
|
989
|
+
* @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
|
|
990
|
+
*/
|
|
991
|
+
orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): DeleteQueryBuilder<DB, TB, O>;
|
|
992
|
+
/**
|
|
993
|
+
* @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
|
|
994
|
+
* @deprecated Use `orderBy(expr, (ob) => ...)` instead.
|
|
995
|
+
*/
|
|
996
|
+
orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
|
|
997
|
+
/**
|
|
998
|
+
* Clears the `order by` clause from the query.
|
|
1009
999
|
*
|
|
1010
|
-
* See {@link
|
|
1000
|
+
* See {@link orderBy} for adding an `order by` clause or item to a query.
|
|
1011
1001
|
*
|
|
1012
1002
|
* ### Examples
|
|
1013
1003
|
*
|
|
1014
|
-
* Delete 5 oldest items in a table:
|
|
1015
|
-
*
|
|
1016
1004
|
* ```ts
|
|
1017
|
-
*
|
|
1018
|
-
* .
|
|
1019
|
-
* .
|
|
1020
|
-
* .
|
|
1005
|
+
* const query = db
|
|
1006
|
+
* .selectFrom('person')
|
|
1007
|
+
* .selectAll()
|
|
1008
|
+
* .orderBy('id', 'desc')
|
|
1009
|
+
*
|
|
1010
|
+
* const results = await query
|
|
1011
|
+
* .clearOrderBy()
|
|
1021
1012
|
* .execute()
|
|
1022
1013
|
* ```
|
|
1023
1014
|
*
|
|
1024
|
-
* The generated SQL (
|
|
1015
|
+
* The generated SQL (PostgreSQL):
|
|
1025
1016
|
*
|
|
1026
1017
|
* ```sql
|
|
1027
|
-
*
|
|
1028
|
-
* order by `created_at`
|
|
1029
|
-
* limit ?
|
|
1018
|
+
* select * from "person"
|
|
1030
1019
|
* ```
|
|
1031
1020
|
*/
|
|
1032
|
-
|
|
1021
|
+
clearOrderBy(): DeleteQueryBuilder<DB, TB, O>;
|
|
1033
1022
|
/**
|
|
1034
1023
|
* Adds a limit clause to the query.
|
|
1035
1024
|
*
|