kysely 0.27.6 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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
package/dist/esm/kysely.js
CHANGED
|
@@ -7,8 +7,7 @@ import { DefaultQueryExecutor } from './query-executor/default-query-executor.js
|
|
|
7
7
|
import { freeze, isObject, isUndefined } from './util/object-utils.js';
|
|
8
8
|
import { RuntimeDriver } from './driver/runtime-driver.js';
|
|
9
9
|
import { SingleConnectionProvider } from './driver/single-connection-provider.js';
|
|
10
|
-
import {
|
|
11
|
-
import { preventAwait } from './util/prevent-await.js';
|
|
10
|
+
import { validateTransactionSettings, } from './driver/driver.js';
|
|
12
11
|
import { createFunctionModule, } from './query-builder/function-module.js';
|
|
13
12
|
import { Log } from './util/log.js';
|
|
14
13
|
import { createQueryId } from './util/query-id.js';
|
|
@@ -17,6 +16,9 @@ import { CaseBuilder } from './query-builder/case-builder.js';
|
|
|
17
16
|
import { CaseNode } from './operation-node/case-node.js';
|
|
18
17
|
import { parseExpression } from './parser/expression-parser.js';
|
|
19
18
|
import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
|
|
19
|
+
import { provideControlledConnection, } from './util/provide-controlled-connection.js';
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');
|
|
20
22
|
/**
|
|
21
23
|
* The main Kysely class.
|
|
22
24
|
*
|
|
@@ -173,6 +175,9 @@ export class Kysely extends QueryCreator {
|
|
|
173
175
|
* of type {@link Transaction} which inherits {@link Kysely}. Any query
|
|
174
176
|
* started through the transaction object is executed inside the transaction.
|
|
175
177
|
*
|
|
178
|
+
* To run a controlled transaction, allowing you to commit and rollback manually,
|
|
179
|
+
* use {@link startTransaction} instead.
|
|
180
|
+
*
|
|
176
181
|
* ### Examples
|
|
177
182
|
*
|
|
178
183
|
* <!-- siteExample("transactions", "Simple transaction", 10) -->
|
|
@@ -227,6 +232,120 @@ export class Kysely extends QueryCreator {
|
|
|
227
232
|
transaction() {
|
|
228
233
|
return new TransactionBuilder({ ...this.#props });
|
|
229
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Creates a {@link ControlledTransactionBuilder} that can be used to run queries inside a controlled transaction.
|
|
237
|
+
*
|
|
238
|
+
* The returned {@link ControlledTransactionBuilder} can be used to configure the transaction.
|
|
239
|
+
* The {@link ControlledTransactionBuilder.execute} method can then be called
|
|
240
|
+
* to start the transaction and return a {@link ControlledTransaction}.
|
|
241
|
+
*
|
|
242
|
+
* A {@link ControlledTransaction} allows you to commit and rollback manually,
|
|
243
|
+
* execute savepoint commands. It extends {@link Transaction} which extends {@link Kysely},
|
|
244
|
+
* so you can run queries inside the transaction. Once the transaction is committed,
|
|
245
|
+
* or rolled back, it can't be used anymore - all queries will throw an error.
|
|
246
|
+
* This is to prevent accidentally running queries outside the transaction - where
|
|
247
|
+
* atomicity is not guaranteed anymore.
|
|
248
|
+
*
|
|
249
|
+
* ### Examples
|
|
250
|
+
*
|
|
251
|
+
* <!-- siteExample("transactions", "Controlled transaction", 11) -->
|
|
252
|
+
*
|
|
253
|
+
* A controlled transaction allows you to commit and rollback manually, execute
|
|
254
|
+
* savepoint commands, and queries in general.
|
|
255
|
+
*
|
|
256
|
+
* In this example we start a transaction, use it to insert two rows and then commit
|
|
257
|
+
* the transaction. If an error is thrown, we catch it and rollback the transaction.
|
|
258
|
+
*
|
|
259
|
+
* ```ts
|
|
260
|
+
* const trx = await db.startTransaction().execute()
|
|
261
|
+
*
|
|
262
|
+
* try {
|
|
263
|
+
* const jennifer = await trx.insertInto('person')
|
|
264
|
+
* .values({
|
|
265
|
+
* first_name: 'Jennifer',
|
|
266
|
+
* last_name: 'Aniston',
|
|
267
|
+
* age: 40,
|
|
268
|
+
* })
|
|
269
|
+
* .returning('id')
|
|
270
|
+
* .executeTakeFirstOrThrow()
|
|
271
|
+
*
|
|
272
|
+
* const catto = await trx.insertInto('pet')
|
|
273
|
+
* .values({
|
|
274
|
+
* owner_id: jennifer.id,
|
|
275
|
+
* name: 'Catto',
|
|
276
|
+
* species: 'cat',
|
|
277
|
+
* is_favorite: false,
|
|
278
|
+
* })
|
|
279
|
+
* .returningAll()
|
|
280
|
+
* .executeTakeFirstOrThrow()
|
|
281
|
+
*
|
|
282
|
+
* await trx.commit().execute()
|
|
283
|
+
*
|
|
284
|
+
* // ...
|
|
285
|
+
* } catch (error) {
|
|
286
|
+
* await trx.rollback().execute()
|
|
287
|
+
* }
|
|
288
|
+
* ```
|
|
289
|
+
*
|
|
290
|
+
* <!-- siteExample("transactions", "Controlled transaction /w savepoints", 12) -->
|
|
291
|
+
*
|
|
292
|
+
* A controlled transaction allows you to commit and rollback manually, execute
|
|
293
|
+
* savepoint commands, and queries in general.
|
|
294
|
+
*
|
|
295
|
+
* In this example we start a transaction, insert a person, create a savepoint,
|
|
296
|
+
* try inserting a toy and a pet, and if an error is thrown, we rollback to the
|
|
297
|
+
* savepoint. Eventually we release the savepoint, insert an audit record and
|
|
298
|
+
* commit the transaction. If an error is thrown, we catch it and rollback the
|
|
299
|
+
* transaction.
|
|
300
|
+
*
|
|
301
|
+
* ```ts
|
|
302
|
+
* const trx = await db.startTransaction().execute()
|
|
303
|
+
*
|
|
304
|
+
* try {
|
|
305
|
+
* const jennifer = await trx
|
|
306
|
+
* .insertInto('person')
|
|
307
|
+
* .values({
|
|
308
|
+
* first_name: 'Jennifer',
|
|
309
|
+
* last_name: 'Aniston',
|
|
310
|
+
* age: 40,
|
|
311
|
+
* })
|
|
312
|
+
* .returning('id')
|
|
313
|
+
* .executeTakeFirstOrThrow()
|
|
314
|
+
*
|
|
315
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
316
|
+
*
|
|
317
|
+
* try {
|
|
318
|
+
* const catto = await trxAfterJennifer
|
|
319
|
+
* .insertInto('pet')
|
|
320
|
+
* .values({
|
|
321
|
+
* owner_id: jennifer.id,
|
|
322
|
+
* name: 'Catto',
|
|
323
|
+
* species: 'cat',
|
|
324
|
+
* })
|
|
325
|
+
* .returning('id')
|
|
326
|
+
* .executeTakeFirstOrThrow()
|
|
327
|
+
*
|
|
328
|
+
* await trxAfterJennifer
|
|
329
|
+
* .insertInto('toy')
|
|
330
|
+
* .values({ name: 'Bone', price: 1.99, pet_id: catto.id })
|
|
331
|
+
* .execute()
|
|
332
|
+
* } catch (error) {
|
|
333
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
334
|
+
* }
|
|
335
|
+
*
|
|
336
|
+
* await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
|
|
337
|
+
*
|
|
338
|
+
* await trx.insertInto('audit').values({ action: 'added Jennifer' }).execute()
|
|
339
|
+
*
|
|
340
|
+
* await trx.commit().execute()
|
|
341
|
+
* } catch (error) {
|
|
342
|
+
* await trx.rollback().execute()
|
|
343
|
+
* }
|
|
344
|
+
* ```
|
|
345
|
+
*/
|
|
346
|
+
startTransaction() {
|
|
347
|
+
return new ControlledTransactionBuilder({ ...this.#props });
|
|
348
|
+
}
|
|
230
349
|
/**
|
|
231
350
|
* Provides a kysely instance bound to a single database connection.
|
|
232
351
|
*
|
|
@@ -342,6 +461,9 @@ export class Kysely extends QueryCreator {
|
|
|
342
461
|
const compiledQuery = isCompilable(query) ? query.compile() : query;
|
|
343
462
|
return this.getExecutor().executeQuery(compiledQuery, queryId);
|
|
344
463
|
}
|
|
464
|
+
async [Symbol.asyncDispose]() {
|
|
465
|
+
await this.destroy();
|
|
466
|
+
}
|
|
345
467
|
}
|
|
346
468
|
export class Transaction extends Kysely {
|
|
347
469
|
#props;
|
|
@@ -409,12 +531,17 @@ export class ConnectionBuilder {
|
|
|
409
531
|
});
|
|
410
532
|
}
|
|
411
533
|
}
|
|
412
|
-
preventAwait(ConnectionBuilder, "don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");
|
|
413
534
|
export class TransactionBuilder {
|
|
414
535
|
#props;
|
|
415
536
|
constructor(props) {
|
|
416
537
|
this.#props = freeze(props);
|
|
417
538
|
}
|
|
539
|
+
setAccessMode(accessMode) {
|
|
540
|
+
return new TransactionBuilder({
|
|
541
|
+
...this.#props,
|
|
542
|
+
accessMode,
|
|
543
|
+
});
|
|
544
|
+
}
|
|
418
545
|
setIsolationLevel(isolationLevel) {
|
|
419
546
|
return new TransactionBuilder({
|
|
420
547
|
...this.#props,
|
|
@@ -422,8 +549,8 @@ export class TransactionBuilder {
|
|
|
422
549
|
});
|
|
423
550
|
}
|
|
424
551
|
async execute(callback) {
|
|
425
|
-
const { isolationLevel, ...kyselyProps } = this.#props;
|
|
426
|
-
const settings = { isolationLevel };
|
|
552
|
+
const { isolationLevel, accessMode, ...kyselyProps } = this.#props;
|
|
553
|
+
const settings = { isolationLevel, accessMode };
|
|
427
554
|
validateTransactionSettings(settings);
|
|
428
555
|
return this.#props.executor.provideConnection(async (connection) => {
|
|
429
556
|
const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
|
|
@@ -444,10 +571,334 @@ export class TransactionBuilder {
|
|
|
444
571
|
});
|
|
445
572
|
}
|
|
446
573
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
574
|
+
export class ControlledTransactionBuilder {
|
|
575
|
+
#props;
|
|
576
|
+
constructor(props) {
|
|
577
|
+
this.#props = freeze(props);
|
|
578
|
+
}
|
|
579
|
+
setAccessMode(accessMode) {
|
|
580
|
+
return new ControlledTransactionBuilder({
|
|
581
|
+
...this.#props,
|
|
582
|
+
accessMode,
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
setIsolationLevel(isolationLevel) {
|
|
586
|
+
return new ControlledTransactionBuilder({
|
|
587
|
+
...this.#props,
|
|
588
|
+
isolationLevel,
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
async execute() {
|
|
592
|
+
const { isolationLevel, accessMode, ...props } = this.#props;
|
|
593
|
+
const settings = { isolationLevel, accessMode };
|
|
594
|
+
validateTransactionSettings(settings);
|
|
595
|
+
const connection = await provideControlledConnection(this.#props.executor);
|
|
596
|
+
await this.#props.driver.beginTransaction(connection.connection, settings);
|
|
597
|
+
return new ControlledTransaction({
|
|
598
|
+
...props,
|
|
599
|
+
connection,
|
|
600
|
+
executor: this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection.connection)),
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
export class ControlledTransaction extends Transaction {
|
|
605
|
+
#props;
|
|
606
|
+
#compileQuery;
|
|
607
|
+
#state;
|
|
608
|
+
constructor(props) {
|
|
609
|
+
const state = { isCommitted: false, isRolledBack: false };
|
|
610
|
+
props = {
|
|
611
|
+
...props,
|
|
612
|
+
executor: new NotCommittedOrRolledBackAssertingExecutor(props.executor, state),
|
|
613
|
+
};
|
|
614
|
+
const { connection, ...transactionProps } = props;
|
|
615
|
+
super(transactionProps);
|
|
616
|
+
this.#props = freeze(props);
|
|
617
|
+
this.#state = state;
|
|
618
|
+
const queryId = createQueryId();
|
|
619
|
+
this.#compileQuery = (node) => props.executor.compileQuery(node, queryId);
|
|
620
|
+
}
|
|
621
|
+
get isCommitted() {
|
|
622
|
+
return this.#state.isCommitted;
|
|
623
|
+
}
|
|
624
|
+
get isRolledBack() {
|
|
625
|
+
return this.#state.isRolledBack;
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Commits the transaction.
|
|
629
|
+
*
|
|
630
|
+
* See {@link rollback}.
|
|
631
|
+
*
|
|
632
|
+
* ### Examples
|
|
633
|
+
*
|
|
634
|
+
* ```ts
|
|
635
|
+
* import type { Kysely } from 'kysely'
|
|
636
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
637
|
+
*
|
|
638
|
+
* const trx = await db.startTransaction().execute()
|
|
639
|
+
*
|
|
640
|
+
* try {
|
|
641
|
+
* await doSomething(trx)
|
|
642
|
+
*
|
|
643
|
+
* await trx.commit().execute()
|
|
644
|
+
* } catch (error) {
|
|
645
|
+
* await trx.rollback().execute()
|
|
646
|
+
* }
|
|
647
|
+
*
|
|
648
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
649
|
+
* ```
|
|
650
|
+
*/
|
|
651
|
+
commit() {
|
|
652
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
653
|
+
return new Command(async () => {
|
|
654
|
+
await this.#props.driver.commitTransaction(this.#props.connection.connection);
|
|
655
|
+
this.#state.isCommitted = true;
|
|
656
|
+
this.#props.connection.release();
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* Rolls back the transaction.
|
|
661
|
+
*
|
|
662
|
+
* See {@link commit} and {@link rollbackToSavepoint}.
|
|
663
|
+
*
|
|
664
|
+
* ### Examples
|
|
665
|
+
*
|
|
666
|
+
* ```ts
|
|
667
|
+
* import type { Kysely } from 'kysely'
|
|
668
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
669
|
+
*
|
|
670
|
+
* const trx = await db.startTransaction().execute()
|
|
671
|
+
*
|
|
672
|
+
* try {
|
|
673
|
+
* await doSomething(trx)
|
|
674
|
+
*
|
|
675
|
+
* await trx.commit().execute()
|
|
676
|
+
* } catch (error) {
|
|
677
|
+
* await trx.rollback().execute()
|
|
678
|
+
* }
|
|
679
|
+
*
|
|
680
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
681
|
+
* ```
|
|
682
|
+
*/
|
|
683
|
+
rollback() {
|
|
684
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
685
|
+
return new Command(async () => {
|
|
686
|
+
await this.#props.driver.rollbackTransaction(this.#props.connection.connection);
|
|
687
|
+
this.#state.isRolledBack = true;
|
|
688
|
+
this.#props.connection.release();
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Creates a savepoint with a given name.
|
|
693
|
+
*
|
|
694
|
+
* See {@link rollbackToSavepoint} and {@link releaseSavepoint}.
|
|
695
|
+
*
|
|
696
|
+
* For a type-safe experience, you should use the returned instance from now on.
|
|
697
|
+
*
|
|
698
|
+
* ### Examples
|
|
699
|
+
*
|
|
700
|
+
* ```ts
|
|
701
|
+
* import type { Kysely } from 'kysely'
|
|
702
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
703
|
+
*
|
|
704
|
+
* const trx = await db.startTransaction().execute()
|
|
705
|
+
*
|
|
706
|
+
* await insertJennifer(trx)
|
|
707
|
+
*
|
|
708
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
709
|
+
*
|
|
710
|
+
* try {
|
|
711
|
+
* await doSomething(trxAfterJennifer)
|
|
712
|
+
* } catch (error) {
|
|
713
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
714
|
+
* }
|
|
715
|
+
*
|
|
716
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
717
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
718
|
+
* ```
|
|
719
|
+
*/
|
|
720
|
+
savepoint(savepointName) {
|
|
721
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
722
|
+
return new Command(async () => {
|
|
723
|
+
await this.#props.driver.savepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
724
|
+
return new ControlledTransaction({ ...this.#props });
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
/**
|
|
728
|
+
* Rolls back to a savepoint with a given name.
|
|
729
|
+
*
|
|
730
|
+
* See {@link savepoint} and {@link releaseSavepoint}.
|
|
731
|
+
*
|
|
732
|
+
* You must use the same instance returned by {@link savepoint}, or
|
|
733
|
+
* escape the type-check by using `as any`.
|
|
734
|
+
*
|
|
735
|
+
* ### Examples
|
|
736
|
+
*
|
|
737
|
+
* ```ts
|
|
738
|
+
* import type { Kysely } from 'kysely'
|
|
739
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
740
|
+
*
|
|
741
|
+
* const trx = await db.startTransaction().execute()
|
|
742
|
+
*
|
|
743
|
+
* await insertJennifer(trx)
|
|
744
|
+
*
|
|
745
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
746
|
+
*
|
|
747
|
+
* try {
|
|
748
|
+
* await doSomething(trxAfterJennifer)
|
|
749
|
+
* } catch (error) {
|
|
750
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
751
|
+
* }
|
|
752
|
+
*
|
|
753
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
754
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
755
|
+
* ```
|
|
756
|
+
*/
|
|
757
|
+
rollbackToSavepoint(savepointName) {
|
|
758
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
759
|
+
return new Command(async () => {
|
|
760
|
+
await this.#props.driver.rollbackToSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
761
|
+
return new ControlledTransaction({ ...this.#props });
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Releases a savepoint with a given name.
|
|
766
|
+
*
|
|
767
|
+
* See {@link savepoint} and {@link rollbackToSavepoint}.
|
|
768
|
+
*
|
|
769
|
+
* You must use the same instance returned by {@link savepoint}, or
|
|
770
|
+
* escape the type-check by using `as any`.
|
|
771
|
+
*
|
|
772
|
+
* ### Examples
|
|
773
|
+
*
|
|
774
|
+
* ```ts
|
|
775
|
+
* import type { Kysely } from 'kysely'
|
|
776
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
777
|
+
*
|
|
778
|
+
* const trx = await db.startTransaction().execute()
|
|
779
|
+
*
|
|
780
|
+
* await insertJennifer(trx)
|
|
781
|
+
*
|
|
782
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
783
|
+
*
|
|
784
|
+
* try {
|
|
785
|
+
* await doSomething(trxAfterJennifer)
|
|
786
|
+
* } catch (error) {
|
|
787
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
788
|
+
* }
|
|
789
|
+
*
|
|
790
|
+
* await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
|
|
791
|
+
*
|
|
792
|
+
* await doSomethingElse(trx)
|
|
793
|
+
*
|
|
794
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
795
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
796
|
+
* async function doSomethingElse(kysely: Kysely<Database>) {}
|
|
797
|
+
* ```
|
|
798
|
+
*/
|
|
799
|
+
releaseSavepoint(savepointName) {
|
|
800
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
801
|
+
return new Command(async () => {
|
|
802
|
+
await this.#props.driver.releaseSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
803
|
+
return new ControlledTransaction({ ...this.#props });
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
withPlugin(plugin) {
|
|
807
|
+
return new ControlledTransaction({
|
|
808
|
+
...this.#props,
|
|
809
|
+
executor: this.#props.executor.withPlugin(plugin),
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
withoutPlugins() {
|
|
813
|
+
return new ControlledTransaction({
|
|
814
|
+
...this.#props,
|
|
815
|
+
executor: this.#props.executor.withoutPlugins(),
|
|
816
|
+
});
|
|
817
|
+
}
|
|
818
|
+
withSchema(schema) {
|
|
819
|
+
return new ControlledTransaction({
|
|
820
|
+
...this.#props,
|
|
821
|
+
executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
withTables() {
|
|
825
|
+
return new ControlledTransaction({ ...this.#props });
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
export class Command {
|
|
829
|
+
#cb;
|
|
830
|
+
constructor(cb) {
|
|
831
|
+
this.#cb = cb;
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* Executes the command.
|
|
835
|
+
*/
|
|
836
|
+
async execute() {
|
|
837
|
+
return await this.#cb();
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
function assertNotCommittedOrRolledBack(state) {
|
|
841
|
+
if (state.isCommitted) {
|
|
842
|
+
throw new Error('Transaction is already committed');
|
|
843
|
+
}
|
|
844
|
+
if (state.isRolledBack) {
|
|
845
|
+
throw new Error('Transaction is already rolled back');
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* An executor wrapper that asserts that the transaction state is not committed
|
|
850
|
+
* or rolled back when a query is executed.
|
|
851
|
+
*
|
|
852
|
+
* @internal
|
|
853
|
+
*/
|
|
854
|
+
class NotCommittedOrRolledBackAssertingExecutor {
|
|
855
|
+
#executor;
|
|
856
|
+
#state;
|
|
857
|
+
constructor(executor, state) {
|
|
858
|
+
if (executor instanceof NotCommittedOrRolledBackAssertingExecutor) {
|
|
859
|
+
this.#executor = executor.#executor;
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
this.#executor = executor;
|
|
863
|
+
}
|
|
864
|
+
this.#state = state;
|
|
865
|
+
}
|
|
866
|
+
get adapter() {
|
|
867
|
+
return this.#executor.adapter;
|
|
868
|
+
}
|
|
869
|
+
get plugins() {
|
|
870
|
+
return this.#executor.plugins;
|
|
871
|
+
}
|
|
872
|
+
transformQuery(node, queryId) {
|
|
873
|
+
return this.#executor.transformQuery(node, queryId);
|
|
874
|
+
}
|
|
875
|
+
compileQuery(node, queryId) {
|
|
876
|
+
return this.#executor.compileQuery(node, queryId);
|
|
877
|
+
}
|
|
878
|
+
provideConnection(consumer) {
|
|
879
|
+
return this.#executor.provideConnection(consumer);
|
|
880
|
+
}
|
|
881
|
+
executeQuery(compiledQuery, queryId) {
|
|
882
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
883
|
+
return this.#executor.executeQuery(compiledQuery, queryId);
|
|
884
|
+
}
|
|
885
|
+
stream(compiledQuery, chunkSize, queryId) {
|
|
886
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
887
|
+
return this.#executor.stream(compiledQuery, chunkSize, queryId);
|
|
888
|
+
}
|
|
889
|
+
withConnectionProvider(connectionProvider) {
|
|
890
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withConnectionProvider(connectionProvider), this.#state);
|
|
891
|
+
}
|
|
892
|
+
withPlugin(plugin) {
|
|
893
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugin(plugin), this.#state);
|
|
894
|
+
}
|
|
895
|
+
withPlugins(plugins) {
|
|
896
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugins(plugins), this.#state);
|
|
897
|
+
}
|
|
898
|
+
withPluginAtFront(plugin) {
|
|
899
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPluginAtFront(plugin), this.#state);
|
|
900
|
+
}
|
|
901
|
+
withoutPlugins() {
|
|
902
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withoutPlugins(), this.#state);
|
|
452
903
|
}
|
|
453
904
|
}
|
|
@@ -287,6 +287,14 @@ export interface MigratorProps {
|
|
|
287
287
|
* Default is `name0.localeCompare(name1)`.
|
|
288
288
|
*/
|
|
289
289
|
readonly nameComparator?: (name0: string, name1: string) => number;
|
|
290
|
+
/**
|
|
291
|
+
* When `true`, don't run migrations in transactions even if the dialect supports transactional DDL.
|
|
292
|
+
*
|
|
293
|
+
* Default is `false`.
|
|
294
|
+
*
|
|
295
|
+
* This is useful when some migrations include queries that would fail otherwise.
|
|
296
|
+
*/
|
|
297
|
+
readonly disableTransactions?: boolean;
|
|
290
298
|
}
|
|
291
299
|
/**
|
|
292
300
|
* All migration methods ({@link Migrator.migrateTo | migrateTo},
|
|
@@ -424,7 +424,7 @@ export class Migrator {
|
|
|
424
424
|
await adapter.releaseMigrationLock(db, lockOptions);
|
|
425
425
|
}
|
|
426
426
|
};
|
|
427
|
-
if (adapter.supportsTransactionalDdl) {
|
|
427
|
+
if (adapter.supportsTransactionalDdl && !this.#props.disableTransactions) {
|
|
428
428
|
return this.#props.db.transaction().execute(run);
|
|
429
429
|
}
|
|
430
430
|
else {
|
|
@@ -9,6 +9,7 @@ export interface AggregateFunctionNode extends OperationNode {
|
|
|
9
9
|
readonly aggregated: readonly OperationNode[];
|
|
10
10
|
readonly distinct?: boolean;
|
|
11
11
|
readonly orderBy?: OrderByNode;
|
|
12
|
+
readonly withinGroup?: OrderByNode;
|
|
12
13
|
readonly filter?: WhereNode;
|
|
13
14
|
readonly over?: OverNode;
|
|
14
15
|
}
|
|
@@ -19,7 +20,7 @@ export declare const AggregateFunctionNode: Readonly<{
|
|
|
19
20
|
is(node: OperationNode): node is AggregateFunctionNode;
|
|
20
21
|
create(aggregateFunction: string, aggregated?: readonly OperationNode[]): AggregateFunctionNode;
|
|
21
22
|
cloneWithDistinct(aggregateFunctionNode: AggregateFunctionNode): AggregateFunctionNode;
|
|
22
|
-
cloneWithOrderBy(aggregateFunctionNode: AggregateFunctionNode, orderItems: ReadonlyArray<OrderByItemNode
|
|
23
|
+
cloneWithOrderBy(aggregateFunctionNode: AggregateFunctionNode, orderItems: ReadonlyArray<OrderByItemNode>, withinGroup?: boolean): AggregateFunctionNode;
|
|
23
24
|
cloneWithFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
|
|
24
25
|
cloneWithOrFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
|
|
25
26
|
cloneWithOver(aggregateFunctionNode: AggregateFunctionNode, over?: OverNode): AggregateFunctionNode;
|
|
@@ -22,11 +22,12 @@ export const AggregateFunctionNode = freeze({
|
|
|
22
22
|
distinct: true,
|
|
23
23
|
});
|
|
24
24
|
},
|
|
25
|
-
cloneWithOrderBy(aggregateFunctionNode, orderItems) {
|
|
25
|
+
cloneWithOrderBy(aggregateFunctionNode, orderItems, withinGroup = false) {
|
|
26
|
+
const prop = withinGroup ? 'withinGroup' : 'orderBy';
|
|
26
27
|
return freeze({
|
|
27
28
|
...aggregateFunctionNode,
|
|
28
|
-
|
|
29
|
-
? OrderByNode.cloneWithItems(aggregateFunctionNode
|
|
29
|
+
[prop]: aggregateFunctionNode[prop]
|
|
30
|
+
? OrderByNode.cloneWithItems(aggregateFunctionNode[prop], orderItems)
|
|
30
31
|
: OrderByNode.create(orderItems),
|
|
31
32
|
});
|
|
32
33
|
},
|
|
@@ -10,7 +10,8 @@ import { DropConstraintNode } from './drop-constraint-node.js';
|
|
|
10
10
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
11
11
|
import { DropIndexNode } from './drop-index-node.js';
|
|
12
12
|
import { AddIndexNode } from './add-index-node.js';
|
|
13
|
-
|
|
13
|
+
import { RenameConstraintNode } from './rename-constraint-node.js';
|
|
14
|
+
export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex' | 'renameConstraint'>;
|
|
14
15
|
export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
|
|
15
16
|
export interface AlterTableNode extends OperationNode {
|
|
16
17
|
readonly kind: 'AlterTableNode';
|
|
@@ -20,6 +21,7 @@ export interface AlterTableNode extends OperationNode {
|
|
|
20
21
|
readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
|
|
21
22
|
readonly addConstraint?: AddConstraintNode;
|
|
22
23
|
readonly dropConstraint?: DropConstraintNode;
|
|
24
|
+
readonly renameConstraint?: RenameConstraintNode;
|
|
23
25
|
readonly addIndex?: AddIndexNode;
|
|
24
26
|
readonly dropIndex?: DropIndexNode;
|
|
25
27
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export interface CollateNode extends OperationNode {
|
|
4
|
+
readonly kind: 'CollateNode';
|
|
5
|
+
readonly collation: IdentifierNode;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const CollateNode: {
|
|
11
|
+
is(node: OperationNode): node is CollateNode;
|
|
12
|
+
create(collation: string): CollateNode;
|
|
13
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./collate-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const CollateNode = {
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'CollateNode';
|
|
10
|
+
},
|
|
11
|
+
create(collation) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'CollateNode',
|
|
14
|
+
collation: IdentifierNode.create(collation),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CheckConstraintNode } from './check-constraint-node.js';
|
|
2
2
|
import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
3
|
-
import { PrimaryKeyConstraintNode } from './primary-constraint-node.js';
|
|
3
|
+
import { PrimaryKeyConstraintNode } from './primary-key-constraint-node.js';
|
|
4
4
|
import { UniqueConstraintNode } from './unique-constraint-node.js';
|
|
5
5
|
export type ConstraintNode = PrimaryKeyConstraintNode | UniqueConstraintNode | CheckConstraintNode | ForeignKeyConstraintNode;
|
|
@@ -13,5 +13,5 @@ export interface CreateTypeNode extends OperationNode {
|
|
|
13
13
|
export declare const CreateTypeNode: Readonly<{
|
|
14
14
|
is(node: OperationNode): node is CreateTypeNode;
|
|
15
15
|
create(name: SchemableIdentifierNode): CreateTypeNode;
|
|
16
|
-
cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
|
|
16
|
+
cloneWithEnum(createType: CreateTypeNode, values: readonly string[]): CreateTypeNode;
|
|
17
17
|
}>;
|
|
@@ -18,7 +18,7 @@ export const CreateTypeNode = freeze({
|
|
|
18
18
|
cloneWithEnum(createType, values) {
|
|
19
19
|
return freeze({
|
|
20
20
|
...createType,
|
|
21
|
-
enum: ValueListNode.create(values.map(
|
|
21
|
+
enum: ValueListNode.create(values.map(ValueNode.createImmediate)),
|
|
22
22
|
});
|
|
23
23
|
},
|
|
24
24
|
});
|
|
@@ -32,8 +32,14 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
32
32
|
export declare const DeleteQueryNode: Readonly<{
|
|
33
33
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
34
34
|
create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use `QueryNode.cloneWithoutOrderBy` instead.
|
|
37
|
+
*/
|
|
38
|
+
cloneWithOrderByItems: (node: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>) => DeleteQueryNode;
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Use `QueryNode.cloneWithoutOrderBy` instead.
|
|
41
|
+
*/
|
|
42
|
+
cloneWithoutOrderBy: (node: DeleteQueryNode) => DeleteQueryNode;
|
|
37
43
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
38
44
|
cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
|
|
39
45
|
cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
|