kysely 0.27.5 → 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/CODE_OF_CONDUCT.md +183 -0
- package/FUNDING.md +25 -0
- package/README.md +182 -3
- 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-introspector.js +66 -44
- 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 +9 -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 +16 -1
- package/dist/cjs/migration/migrator.js +14 -4
- 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/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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 +8 -3
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +45 -14
- 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 +4 -4
- 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-introspector.js +66 -44
- 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 +9 -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 +16 -1
- package/dist/esm/migration/migrator.js +14 -4
- 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/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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 +8 -3
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +45 -14
- 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 +4 -4
- 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 -70
- 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/cjs/kysely.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionBuilder = exports.ConnectionBuilder = exports.Transaction = exports.Kysely = void 0;
|
|
3
|
+
exports.Command = exports.ControlledTransaction = exports.ControlledTransactionBuilder = exports.TransactionBuilder = exports.ConnectionBuilder = exports.Transaction = exports.Kysely = void 0;
|
|
4
4
|
exports.isKyselyProps = isKyselyProps;
|
|
5
5
|
const schema_js_1 = require("./schema/schema.js");
|
|
6
6
|
const dynamic_js_1 = require("./dynamic/dynamic.js");
|
|
@@ -11,7 +11,6 @@ const object_utils_js_1 = require("./util/object-utils.js");
|
|
|
11
11
|
const runtime_driver_js_1 = require("./driver/runtime-driver.js");
|
|
12
12
|
const single_connection_provider_js_1 = require("./driver/single-connection-provider.js");
|
|
13
13
|
const driver_js_1 = require("./driver/driver.js");
|
|
14
|
-
const prevent_await_js_1 = require("./util/prevent-await.js");
|
|
15
14
|
const function_module_js_1 = require("./query-builder/function-module.js");
|
|
16
15
|
const log_js_1 = require("./util/log.js");
|
|
17
16
|
const query_id_js_1 = require("./util/query-id.js");
|
|
@@ -20,6 +19,9 @@ const case_builder_js_1 = require("./query-builder/case-builder.js");
|
|
|
20
19
|
const case_node_js_1 = require("./operation-node/case-node.js");
|
|
21
20
|
const expression_parser_js_1 = require("./parser/expression-parser.js");
|
|
22
21
|
const with_schema_plugin_js_1 = require("./plugin/with-schema/with-schema-plugin.js");
|
|
22
|
+
const provide_controlled_connection_js_1 = require("./util/provide-controlled-connection.js");
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');
|
|
23
25
|
/**
|
|
24
26
|
* The main Kysely class.
|
|
25
27
|
*
|
|
@@ -176,6 +178,9 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
176
178
|
* of type {@link Transaction} which inherits {@link Kysely}. Any query
|
|
177
179
|
* started through the transaction object is executed inside the transaction.
|
|
178
180
|
*
|
|
181
|
+
* To run a controlled transaction, allowing you to commit and rollback manually,
|
|
182
|
+
* use {@link startTransaction} instead.
|
|
183
|
+
*
|
|
179
184
|
* ### Examples
|
|
180
185
|
*
|
|
181
186
|
* <!-- siteExample("transactions", "Simple transaction", 10) -->
|
|
@@ -230,6 +235,120 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
230
235
|
transaction() {
|
|
231
236
|
return new TransactionBuilder({ ...this.#props });
|
|
232
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* Creates a {@link ControlledTransactionBuilder} that can be used to run queries inside a controlled transaction.
|
|
240
|
+
*
|
|
241
|
+
* The returned {@link ControlledTransactionBuilder} can be used to configure the transaction.
|
|
242
|
+
* The {@link ControlledTransactionBuilder.execute} method can then be called
|
|
243
|
+
* to start the transaction and return a {@link ControlledTransaction}.
|
|
244
|
+
*
|
|
245
|
+
* A {@link ControlledTransaction} allows you to commit and rollback manually,
|
|
246
|
+
* execute savepoint commands. It extends {@link Transaction} which extends {@link Kysely},
|
|
247
|
+
* so you can run queries inside the transaction. Once the transaction is committed,
|
|
248
|
+
* or rolled back, it can't be used anymore - all queries will throw an error.
|
|
249
|
+
* This is to prevent accidentally running queries outside the transaction - where
|
|
250
|
+
* atomicity is not guaranteed anymore.
|
|
251
|
+
*
|
|
252
|
+
* ### Examples
|
|
253
|
+
*
|
|
254
|
+
* <!-- siteExample("transactions", "Controlled transaction", 11) -->
|
|
255
|
+
*
|
|
256
|
+
* A controlled transaction allows you to commit and rollback manually, execute
|
|
257
|
+
* savepoint commands, and queries in general.
|
|
258
|
+
*
|
|
259
|
+
* In this example we start a transaction, use it to insert two rows and then commit
|
|
260
|
+
* the transaction. If an error is thrown, we catch it and rollback the transaction.
|
|
261
|
+
*
|
|
262
|
+
* ```ts
|
|
263
|
+
* const trx = await db.startTransaction().execute()
|
|
264
|
+
*
|
|
265
|
+
* try {
|
|
266
|
+
* const jennifer = await trx.insertInto('person')
|
|
267
|
+
* .values({
|
|
268
|
+
* first_name: 'Jennifer',
|
|
269
|
+
* last_name: 'Aniston',
|
|
270
|
+
* age: 40,
|
|
271
|
+
* })
|
|
272
|
+
* .returning('id')
|
|
273
|
+
* .executeTakeFirstOrThrow()
|
|
274
|
+
*
|
|
275
|
+
* const catto = await trx.insertInto('pet')
|
|
276
|
+
* .values({
|
|
277
|
+
* owner_id: jennifer.id,
|
|
278
|
+
* name: 'Catto',
|
|
279
|
+
* species: 'cat',
|
|
280
|
+
* is_favorite: false,
|
|
281
|
+
* })
|
|
282
|
+
* .returningAll()
|
|
283
|
+
* .executeTakeFirstOrThrow()
|
|
284
|
+
*
|
|
285
|
+
* await trx.commit().execute()
|
|
286
|
+
*
|
|
287
|
+
* // ...
|
|
288
|
+
* } catch (error) {
|
|
289
|
+
* await trx.rollback().execute()
|
|
290
|
+
* }
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* <!-- siteExample("transactions", "Controlled transaction /w savepoints", 12) -->
|
|
294
|
+
*
|
|
295
|
+
* A controlled transaction allows you to commit and rollback manually, execute
|
|
296
|
+
* savepoint commands, and queries in general.
|
|
297
|
+
*
|
|
298
|
+
* In this example we start a transaction, insert a person, create a savepoint,
|
|
299
|
+
* try inserting a toy and a pet, and if an error is thrown, we rollback to the
|
|
300
|
+
* savepoint. Eventually we release the savepoint, insert an audit record and
|
|
301
|
+
* commit the transaction. If an error is thrown, we catch it and rollback the
|
|
302
|
+
* transaction.
|
|
303
|
+
*
|
|
304
|
+
* ```ts
|
|
305
|
+
* const trx = await db.startTransaction().execute()
|
|
306
|
+
*
|
|
307
|
+
* try {
|
|
308
|
+
* const jennifer = await trx
|
|
309
|
+
* .insertInto('person')
|
|
310
|
+
* .values({
|
|
311
|
+
* first_name: 'Jennifer',
|
|
312
|
+
* last_name: 'Aniston',
|
|
313
|
+
* age: 40,
|
|
314
|
+
* })
|
|
315
|
+
* .returning('id')
|
|
316
|
+
* .executeTakeFirstOrThrow()
|
|
317
|
+
*
|
|
318
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
319
|
+
*
|
|
320
|
+
* try {
|
|
321
|
+
* const catto = await trxAfterJennifer
|
|
322
|
+
* .insertInto('pet')
|
|
323
|
+
* .values({
|
|
324
|
+
* owner_id: jennifer.id,
|
|
325
|
+
* name: 'Catto',
|
|
326
|
+
* species: 'cat',
|
|
327
|
+
* })
|
|
328
|
+
* .returning('id')
|
|
329
|
+
* .executeTakeFirstOrThrow()
|
|
330
|
+
*
|
|
331
|
+
* await trxAfterJennifer
|
|
332
|
+
* .insertInto('toy')
|
|
333
|
+
* .values({ name: 'Bone', price: 1.99, pet_id: catto.id })
|
|
334
|
+
* .execute()
|
|
335
|
+
* } catch (error) {
|
|
336
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
337
|
+
* }
|
|
338
|
+
*
|
|
339
|
+
* await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
|
|
340
|
+
*
|
|
341
|
+
* await trx.insertInto('audit').values({ action: 'added Jennifer' }).execute()
|
|
342
|
+
*
|
|
343
|
+
* await trx.commit().execute()
|
|
344
|
+
* } catch (error) {
|
|
345
|
+
* await trx.rollback().execute()
|
|
346
|
+
* }
|
|
347
|
+
* ```
|
|
348
|
+
*/
|
|
349
|
+
startTransaction() {
|
|
350
|
+
return new ControlledTransactionBuilder({ ...this.#props });
|
|
351
|
+
}
|
|
233
352
|
/**
|
|
234
353
|
* Provides a kysely instance bound to a single database connection.
|
|
235
354
|
*
|
|
@@ -345,6 +464,9 @@ class Kysely extends query_creator_js_1.QueryCreator {
|
|
|
345
464
|
const compiledQuery = (0, compilable_js_1.isCompilable)(query) ? query.compile() : query;
|
|
346
465
|
return this.getExecutor().executeQuery(compiledQuery, queryId);
|
|
347
466
|
}
|
|
467
|
+
async [Symbol.asyncDispose]() {
|
|
468
|
+
await this.destroy();
|
|
469
|
+
}
|
|
348
470
|
}
|
|
349
471
|
exports.Kysely = Kysely;
|
|
350
472
|
class Transaction extends Kysely {
|
|
@@ -415,12 +537,17 @@ class ConnectionBuilder {
|
|
|
415
537
|
}
|
|
416
538
|
}
|
|
417
539
|
exports.ConnectionBuilder = ConnectionBuilder;
|
|
418
|
-
(0, prevent_await_js_1.preventAwait)(ConnectionBuilder, "don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");
|
|
419
540
|
class TransactionBuilder {
|
|
420
541
|
#props;
|
|
421
542
|
constructor(props) {
|
|
422
543
|
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
423
544
|
}
|
|
545
|
+
setAccessMode(accessMode) {
|
|
546
|
+
return new TransactionBuilder({
|
|
547
|
+
...this.#props,
|
|
548
|
+
accessMode,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
424
551
|
setIsolationLevel(isolationLevel) {
|
|
425
552
|
return new TransactionBuilder({
|
|
426
553
|
...this.#props,
|
|
@@ -428,9 +555,9 @@ class TransactionBuilder {
|
|
|
428
555
|
});
|
|
429
556
|
}
|
|
430
557
|
async execute(callback) {
|
|
431
|
-
const { isolationLevel, ...kyselyProps } = this.#props;
|
|
432
|
-
const settings = { isolationLevel };
|
|
433
|
-
validateTransactionSettings(settings);
|
|
558
|
+
const { isolationLevel, accessMode, ...kyselyProps } = this.#props;
|
|
559
|
+
const settings = { isolationLevel, accessMode };
|
|
560
|
+
(0, driver_js_1.validateTransactionSettings)(settings);
|
|
434
561
|
return this.#props.executor.provideConnection(async (connection) => {
|
|
435
562
|
const executor = this.#props.executor.withConnectionProvider(new single_connection_provider_js_1.SingleConnectionProvider(connection));
|
|
436
563
|
const transaction = new Transaction({
|
|
@@ -451,10 +578,337 @@ class TransactionBuilder {
|
|
|
451
578
|
}
|
|
452
579
|
}
|
|
453
580
|
exports.TransactionBuilder = TransactionBuilder;
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
581
|
+
class ControlledTransactionBuilder {
|
|
582
|
+
#props;
|
|
583
|
+
constructor(props) {
|
|
584
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
585
|
+
}
|
|
586
|
+
setAccessMode(accessMode) {
|
|
587
|
+
return new ControlledTransactionBuilder({
|
|
588
|
+
...this.#props,
|
|
589
|
+
accessMode,
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
setIsolationLevel(isolationLevel) {
|
|
593
|
+
return new ControlledTransactionBuilder({
|
|
594
|
+
...this.#props,
|
|
595
|
+
isolationLevel,
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
async execute() {
|
|
599
|
+
const { isolationLevel, accessMode, ...props } = this.#props;
|
|
600
|
+
const settings = { isolationLevel, accessMode };
|
|
601
|
+
(0, driver_js_1.validateTransactionSettings)(settings);
|
|
602
|
+
const connection = await (0, provide_controlled_connection_js_1.provideControlledConnection)(this.#props.executor);
|
|
603
|
+
await this.#props.driver.beginTransaction(connection.connection, settings);
|
|
604
|
+
return new ControlledTransaction({
|
|
605
|
+
...props,
|
|
606
|
+
connection,
|
|
607
|
+
executor: this.#props.executor.withConnectionProvider(new single_connection_provider_js_1.SingleConnectionProvider(connection.connection)),
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
exports.ControlledTransactionBuilder = ControlledTransactionBuilder;
|
|
612
|
+
class ControlledTransaction extends Transaction {
|
|
613
|
+
#props;
|
|
614
|
+
#compileQuery;
|
|
615
|
+
#state;
|
|
616
|
+
constructor(props) {
|
|
617
|
+
const state = { isCommitted: false, isRolledBack: false };
|
|
618
|
+
props = {
|
|
619
|
+
...props,
|
|
620
|
+
executor: new NotCommittedOrRolledBackAssertingExecutor(props.executor, state),
|
|
621
|
+
};
|
|
622
|
+
const { connection, ...transactionProps } = props;
|
|
623
|
+
super(transactionProps);
|
|
624
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
625
|
+
this.#state = state;
|
|
626
|
+
const queryId = (0, query_id_js_1.createQueryId)();
|
|
627
|
+
this.#compileQuery = (node) => props.executor.compileQuery(node, queryId);
|
|
628
|
+
}
|
|
629
|
+
get isCommitted() {
|
|
630
|
+
return this.#state.isCommitted;
|
|
631
|
+
}
|
|
632
|
+
get isRolledBack() {
|
|
633
|
+
return this.#state.isRolledBack;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Commits the transaction.
|
|
637
|
+
*
|
|
638
|
+
* See {@link rollback}.
|
|
639
|
+
*
|
|
640
|
+
* ### Examples
|
|
641
|
+
*
|
|
642
|
+
* ```ts
|
|
643
|
+
* import type { Kysely } from 'kysely'
|
|
644
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
645
|
+
*
|
|
646
|
+
* const trx = await db.startTransaction().execute()
|
|
647
|
+
*
|
|
648
|
+
* try {
|
|
649
|
+
* await doSomething(trx)
|
|
650
|
+
*
|
|
651
|
+
* await trx.commit().execute()
|
|
652
|
+
* } catch (error) {
|
|
653
|
+
* await trx.rollback().execute()
|
|
654
|
+
* }
|
|
655
|
+
*
|
|
656
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
commit() {
|
|
660
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
661
|
+
return new Command(async () => {
|
|
662
|
+
await this.#props.driver.commitTransaction(this.#props.connection.connection);
|
|
663
|
+
this.#state.isCommitted = true;
|
|
664
|
+
this.#props.connection.release();
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Rolls back the transaction.
|
|
669
|
+
*
|
|
670
|
+
* See {@link commit} and {@link rollbackToSavepoint}.
|
|
671
|
+
*
|
|
672
|
+
* ### Examples
|
|
673
|
+
*
|
|
674
|
+
* ```ts
|
|
675
|
+
* import type { Kysely } from 'kysely'
|
|
676
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
677
|
+
*
|
|
678
|
+
* const trx = await db.startTransaction().execute()
|
|
679
|
+
*
|
|
680
|
+
* try {
|
|
681
|
+
* await doSomething(trx)
|
|
682
|
+
*
|
|
683
|
+
* await trx.commit().execute()
|
|
684
|
+
* } catch (error) {
|
|
685
|
+
* await trx.rollback().execute()
|
|
686
|
+
* }
|
|
687
|
+
*
|
|
688
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
689
|
+
* ```
|
|
690
|
+
*/
|
|
691
|
+
rollback() {
|
|
692
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
693
|
+
return new Command(async () => {
|
|
694
|
+
await this.#props.driver.rollbackTransaction(this.#props.connection.connection);
|
|
695
|
+
this.#state.isRolledBack = true;
|
|
696
|
+
this.#props.connection.release();
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Creates a savepoint with a given name.
|
|
701
|
+
*
|
|
702
|
+
* See {@link rollbackToSavepoint} and {@link releaseSavepoint}.
|
|
703
|
+
*
|
|
704
|
+
* For a type-safe experience, you should use the returned instance from now on.
|
|
705
|
+
*
|
|
706
|
+
* ### Examples
|
|
707
|
+
*
|
|
708
|
+
* ```ts
|
|
709
|
+
* import type { Kysely } from 'kysely'
|
|
710
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
711
|
+
*
|
|
712
|
+
* const trx = await db.startTransaction().execute()
|
|
713
|
+
*
|
|
714
|
+
* await insertJennifer(trx)
|
|
715
|
+
*
|
|
716
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
717
|
+
*
|
|
718
|
+
* try {
|
|
719
|
+
* await doSomething(trxAfterJennifer)
|
|
720
|
+
* } catch (error) {
|
|
721
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
722
|
+
* }
|
|
723
|
+
*
|
|
724
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
725
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
726
|
+
* ```
|
|
727
|
+
*/
|
|
728
|
+
savepoint(savepointName) {
|
|
729
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
730
|
+
return new Command(async () => {
|
|
731
|
+
await this.#props.driver.savepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
732
|
+
return new ControlledTransaction({ ...this.#props });
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
/**
|
|
736
|
+
* Rolls back to a savepoint with a given name.
|
|
737
|
+
*
|
|
738
|
+
* See {@link savepoint} and {@link releaseSavepoint}.
|
|
739
|
+
*
|
|
740
|
+
* You must use the same instance returned by {@link savepoint}, or
|
|
741
|
+
* escape the type-check by using `as any`.
|
|
742
|
+
*
|
|
743
|
+
* ### Examples
|
|
744
|
+
*
|
|
745
|
+
* ```ts
|
|
746
|
+
* import type { Kysely } from 'kysely'
|
|
747
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
748
|
+
*
|
|
749
|
+
* const trx = await db.startTransaction().execute()
|
|
750
|
+
*
|
|
751
|
+
* await insertJennifer(trx)
|
|
752
|
+
*
|
|
753
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
754
|
+
*
|
|
755
|
+
* try {
|
|
756
|
+
* await doSomething(trxAfterJennifer)
|
|
757
|
+
* } catch (error) {
|
|
758
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
759
|
+
* }
|
|
760
|
+
*
|
|
761
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
762
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
763
|
+
* ```
|
|
764
|
+
*/
|
|
765
|
+
rollbackToSavepoint(savepointName) {
|
|
766
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
767
|
+
return new Command(async () => {
|
|
768
|
+
await this.#props.driver.rollbackToSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
769
|
+
return new ControlledTransaction({ ...this.#props });
|
|
770
|
+
});
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* Releases a savepoint with a given name.
|
|
774
|
+
*
|
|
775
|
+
* See {@link savepoint} and {@link rollbackToSavepoint}.
|
|
776
|
+
*
|
|
777
|
+
* You must use the same instance returned by {@link savepoint}, or
|
|
778
|
+
* escape the type-check by using `as any`.
|
|
779
|
+
*
|
|
780
|
+
* ### Examples
|
|
781
|
+
*
|
|
782
|
+
* ```ts
|
|
783
|
+
* import type { Kysely } from 'kysely'
|
|
784
|
+
* import type { Database } from 'type-editor' // imaginary module
|
|
785
|
+
*
|
|
786
|
+
* const trx = await db.startTransaction().execute()
|
|
787
|
+
*
|
|
788
|
+
* await insertJennifer(trx)
|
|
789
|
+
*
|
|
790
|
+
* const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
|
|
791
|
+
*
|
|
792
|
+
* try {
|
|
793
|
+
* await doSomething(trxAfterJennifer)
|
|
794
|
+
* } catch (error) {
|
|
795
|
+
* await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
|
|
796
|
+
* }
|
|
797
|
+
*
|
|
798
|
+
* await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
|
|
799
|
+
*
|
|
800
|
+
* await doSomethingElse(trx)
|
|
801
|
+
*
|
|
802
|
+
* async function insertJennifer(kysely: Kysely<Database>) {}
|
|
803
|
+
* async function doSomething(kysely: Kysely<Database>) {}
|
|
804
|
+
* async function doSomethingElse(kysely: Kysely<Database>) {}
|
|
805
|
+
* ```
|
|
806
|
+
*/
|
|
807
|
+
releaseSavepoint(savepointName) {
|
|
808
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
809
|
+
return new Command(async () => {
|
|
810
|
+
await this.#props.driver.releaseSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
|
|
811
|
+
return new ControlledTransaction({ ...this.#props });
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
withPlugin(plugin) {
|
|
815
|
+
return new ControlledTransaction({
|
|
816
|
+
...this.#props,
|
|
817
|
+
executor: this.#props.executor.withPlugin(plugin),
|
|
818
|
+
});
|
|
819
|
+
}
|
|
820
|
+
withoutPlugins() {
|
|
821
|
+
return new ControlledTransaction({
|
|
822
|
+
...this.#props,
|
|
823
|
+
executor: this.#props.executor.withoutPlugins(),
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
withSchema(schema) {
|
|
827
|
+
return new ControlledTransaction({
|
|
828
|
+
...this.#props,
|
|
829
|
+
executor: this.#props.executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)),
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
withTables() {
|
|
833
|
+
return new ControlledTransaction({ ...this.#props });
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
exports.ControlledTransaction = ControlledTransaction;
|
|
837
|
+
class Command {
|
|
838
|
+
#cb;
|
|
839
|
+
constructor(cb) {
|
|
840
|
+
this.#cb = cb;
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Executes the command.
|
|
844
|
+
*/
|
|
845
|
+
async execute() {
|
|
846
|
+
return await this.#cb();
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
exports.Command = Command;
|
|
850
|
+
function assertNotCommittedOrRolledBack(state) {
|
|
851
|
+
if (state.isCommitted) {
|
|
852
|
+
throw new Error('Transaction is already committed');
|
|
853
|
+
}
|
|
854
|
+
if (state.isRolledBack) {
|
|
855
|
+
throw new Error('Transaction is already rolled back');
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
/**
|
|
859
|
+
* An executor wrapper that asserts that the transaction state is not committed
|
|
860
|
+
* or rolled back when a query is executed.
|
|
861
|
+
*
|
|
862
|
+
* @internal
|
|
863
|
+
*/
|
|
864
|
+
class NotCommittedOrRolledBackAssertingExecutor {
|
|
865
|
+
#executor;
|
|
866
|
+
#state;
|
|
867
|
+
constructor(executor, state) {
|
|
868
|
+
if (executor instanceof NotCommittedOrRolledBackAssertingExecutor) {
|
|
869
|
+
this.#executor = executor.#executor;
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
this.#executor = executor;
|
|
873
|
+
}
|
|
874
|
+
this.#state = state;
|
|
875
|
+
}
|
|
876
|
+
get adapter() {
|
|
877
|
+
return this.#executor.adapter;
|
|
878
|
+
}
|
|
879
|
+
get plugins() {
|
|
880
|
+
return this.#executor.plugins;
|
|
881
|
+
}
|
|
882
|
+
transformQuery(node, queryId) {
|
|
883
|
+
return this.#executor.transformQuery(node, queryId);
|
|
884
|
+
}
|
|
885
|
+
compileQuery(node, queryId) {
|
|
886
|
+
return this.#executor.compileQuery(node, queryId);
|
|
887
|
+
}
|
|
888
|
+
provideConnection(consumer) {
|
|
889
|
+
return this.#executor.provideConnection(consumer);
|
|
890
|
+
}
|
|
891
|
+
executeQuery(compiledQuery, queryId) {
|
|
892
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
893
|
+
return this.#executor.executeQuery(compiledQuery, queryId);
|
|
894
|
+
}
|
|
895
|
+
stream(compiledQuery, chunkSize, queryId) {
|
|
896
|
+
assertNotCommittedOrRolledBack(this.#state);
|
|
897
|
+
return this.#executor.stream(compiledQuery, chunkSize, queryId);
|
|
898
|
+
}
|
|
899
|
+
withConnectionProvider(connectionProvider) {
|
|
900
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withConnectionProvider(connectionProvider), this.#state);
|
|
901
|
+
}
|
|
902
|
+
withPlugin(plugin) {
|
|
903
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugin(plugin), this.#state);
|
|
904
|
+
}
|
|
905
|
+
withPlugins(plugins) {
|
|
906
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugins(plugins), this.#state);
|
|
907
|
+
}
|
|
908
|
+
withPluginAtFront(plugin) {
|
|
909
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPluginAtFront(plugin), this.#state);
|
|
910
|
+
}
|
|
911
|
+
withoutPlugins() {
|
|
912
|
+
return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withoutPlugins(), this.#state);
|
|
459
913
|
}
|
|
460
914
|
}
|
|
@@ -271,7 +271,7 @@ export interface MigratorProps {
|
|
|
271
271
|
*
|
|
272
272
|
* When false, migrations must be run in their exact alpha-numeric order.
|
|
273
273
|
* This is checked against the migrations already run in the database
|
|
274
|
-
* (`migrationTableName
|
|
274
|
+
* (`migrationTableName`). This ensures your migrations are always run in
|
|
275
275
|
* the same order and is the safest option.
|
|
276
276
|
*
|
|
277
277
|
* When true, migrations are still run in alpha-numeric order, but
|
|
@@ -280,6 +280,21 @@ export interface MigratorProps {
|
|
|
280
280
|
* order.
|
|
281
281
|
*/
|
|
282
282
|
readonly allowUnorderedMigrations?: boolean;
|
|
283
|
+
/**
|
|
284
|
+
* A function that compares migration names, used when sorting migrations in
|
|
285
|
+
* ascending order.
|
|
286
|
+
*
|
|
287
|
+
* Default is `name0.localeCompare(name1)`.
|
|
288
|
+
*/
|
|
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;
|
|
283
298
|
}
|
|
284
299
|
/**
|
|
285
300
|
* All migration methods ({@link Migrator.migrateTo | migrateTo},
|
|
@@ -63,6 +63,7 @@ class Migrator {
|
|
|
63
63
|
.withPlugin(this.#schemaPlugin)
|
|
64
64
|
.selectFrom(this.#migrationTable)
|
|
65
65
|
.select(['name', 'timestamp'])
|
|
66
|
+
.$narrowType()
|
|
66
67
|
.execute()
|
|
67
68
|
: [];
|
|
68
69
|
const migrations = await this.#resolveMigrations();
|
|
@@ -425,7 +426,7 @@ class Migrator {
|
|
|
425
426
|
await adapter.releaseMigrationLock(db, lockOptions);
|
|
426
427
|
}
|
|
427
428
|
};
|
|
428
|
-
if (adapter.supportsTransactionalDdl) {
|
|
429
|
+
if (adapter.supportsTransactionalDdl && !this.#props.disableTransactions) {
|
|
429
430
|
return this.#props.db.transaction().execute(run);
|
|
430
431
|
}
|
|
431
432
|
else {
|
|
@@ -465,10 +466,19 @@ class Migrator {
|
|
|
465
466
|
const executedMigrations = await db
|
|
466
467
|
.withPlugin(this.#schemaPlugin)
|
|
467
468
|
.selectFrom(this.#migrationTable)
|
|
468
|
-
.select('name')
|
|
469
|
-
|
|
469
|
+
.select(['name', 'timestamp'])
|
|
470
|
+
.$narrowType()
|
|
470
471
|
.execute();
|
|
471
|
-
|
|
472
|
+
const nameComparator = this.#props.nameComparator || ((a, b) => a.localeCompare(b));
|
|
473
|
+
return (executedMigrations
|
|
474
|
+
// https://github.com/kysely-org/kysely/issues/843
|
|
475
|
+
.sort((a, b) => {
|
|
476
|
+
if (a.timestamp === b.timestamp) {
|
|
477
|
+
return nameComparator(a.name, b.name);
|
|
478
|
+
}
|
|
479
|
+
return (new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
|
|
480
|
+
})
|
|
481
|
+
.map((it) => it.name));
|
|
472
482
|
}
|
|
473
483
|
#ensureNoMissingMigrations(migrations, executedMigrations) {
|
|
474
484
|
// Ensure all executed migrations exist in the `migrations` list.
|
|
@@ -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;
|
|
@@ -24,11 +24,12 @@ exports.AggregateFunctionNode = (0, object_utils_js_1.freeze)({
|
|
|
24
24
|
distinct: true,
|
|
25
25
|
});
|
|
26
26
|
},
|
|
27
|
-
cloneWithOrderBy(aggregateFunctionNode, orderItems) {
|
|
27
|
+
cloneWithOrderBy(aggregateFunctionNode, orderItems, withinGroup = false) {
|
|
28
|
+
const prop = withinGroup ? 'withinGroup' : 'orderBy';
|
|
28
29
|
return (0, object_utils_js_1.freeze)({
|
|
29
30
|
...aggregateFunctionNode,
|
|
30
|
-
|
|
31
|
-
? order_by_node_js_1.OrderByNode.cloneWithItems(aggregateFunctionNode
|
|
31
|
+
[prop]: aggregateFunctionNode[prop]
|
|
32
|
+
? order_by_node_js_1.OrderByNode.cloneWithItems(aggregateFunctionNode[prop], orderItems)
|
|
32
33
|
: order_by_node_js_1.OrderByNode.create(orderItems),
|
|
33
34
|
});
|
|
34
35
|
},
|
|
@@ -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
|
+
};
|