@fragno-dev/db 0.1.14 → 0.2.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/.turbo/turbo-build.log +242 -139
- package/CHANGELOG.md +47 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +19 -5
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +7 -1
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +46 -45
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
- package/dist/adapters/generic-sql/driver-config.js +94 -0
- package/dist/adapters/generic-sql/driver-config.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.js +18 -0
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/select-builder.js +69 -0
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/where-builder.js +129 -0
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
- package/dist/adapters/generic-sql/result-interpreter.js +74 -0
- package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +105 -0
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
- package/dist/adapters/generic-sql/uow-encoder.js +93 -0
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -159
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
- package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
- package/dist/adapters/shared/table-name-mapper.js +43 -0
- package/dist/adapters/shared/table-name-mapper.js.map +1 -0
- package/dist/adapters/shared/uow-operation-compiler.js +105 -0
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
- package/dist/db-fragment-definition-builder.d.ts +186 -0
- package/dist/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/db-fragment-definition-builder.js +207 -0
- package/dist/db-fragment-definition-builder.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +53 -0
- package/dist/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.js +111 -0
- package/dist/fragments/internal-fragment.js.map +1 -0
- package/dist/hooks/hooks.d.ts +51 -0
- package/dist/hooks/hooks.d.ts.map +1 -0
- package/dist/hooks/hooks.js +88 -0
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/migration-engine/generation-engine.d.ts +0 -2
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +38 -56
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +35 -23
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +48 -45
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/bind-services.js +20 -0
- package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
- package/dist/packages/fragno/dist/api/error.js +48 -0
- package/dist/packages/fragno/dist/api/error.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
- package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/route.js +10 -0
- package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
- package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
- package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/route.js +17 -0
- package/dist/packages/fragno/dist/api/route.js.map +1 -0
- package/dist/packages/fragno/dist/internal/symbols.js +10 -0
- package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +14 -6
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +16 -7
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/orm/orm.d.ts +1 -1
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +30 -0
- package/dist/query/serialize/create-sql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
- package/dist/query/serialize/sql-serializer.js +67 -0
- package/dist/query/serialize/sql-serializer.js.map +1 -0
- package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/unit-of-work/retry-policy.js +61 -0
- package/dist/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/query/value-decoding.js +71 -0
- package/dist/query/value-decoding.js.map +1 -0
- package/dist/query/value-encoding.js +124 -0
- package/dist/query/value-encoding.js.map +1 -0
- package/dist/schema/create.d.ts +3 -0
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +4 -0
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
- package/dist/schema/type-conversion/dialect/mysql.js +57 -0
- package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
- package/dist/schema/type-conversion/dialect/postgres.js +56 -0
- package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
- package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
- package/dist/schema/type-conversion/type-mapping.js +63 -0
- package/dist/schema/type-conversion/type-mapping.js.map +1 -0
- package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/sql-driver/connection/connection-provider.js +19 -0
- package/dist/sql-driver/connection/connection-provider.js.map +1 -0
- package/dist/sql-driver/connection/single-connection-provider.js +23 -0
- package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/sql-driver/dialects/dialects.d.ts +2 -0
- package/dist/sql-driver/dialects/dialects.js +3 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.js +56 -0
- package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
- package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
- package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.js +68 -0
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
- package/dist/sql-driver/sql-driver.d.ts +38 -0
- package/dist/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver.js +1 -0
- package/dist/sql-driver/sql.js +50 -0
- package/dist/sql-driver/sql.js.map +1 -0
- package/dist/with-database.d.ts +32 -0
- package/dist/with-database.d.ts.map +1 -0
- package/dist/with-database.js +34 -0
- package/dist/with-database.js.map +1 -0
- package/package.json +43 -9
- package/src/adapters/adapters.ts +23 -4
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
- package/src/adapters/drizzle/generate.test.ts +102 -269
- package/src/adapters/drizzle/generate.ts +89 -63
- package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
- package/src/adapters/drizzle/shared.ts +0 -34
- package/src/adapters/drizzle/test-utils.ts +36 -5
- package/src/adapters/generic-sql/README.md +14 -0
- package/src/adapters/generic-sql/driver-config.ts +144 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
- package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
- package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
- package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
- package/src/adapters/generic-sql/migration/executor.ts +33 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
- package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
- package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
- package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
- package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
- package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
- package/src/adapters/generic-sql/query/select-builder.ts +137 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
- package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
- package/src/adapters/generic-sql/query/where-builder.ts +211 -0
- package/src/adapters/generic-sql/result-interpreter.ts +102 -0
- package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
- package/src/adapters/generic-sql/uow-decoder.ts +152 -0
- package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
- package/src/adapters/generic-sql/uow-encoder.ts +131 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
- package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
- package/src/adapters/kysely/kysely-adapter.ts +10 -242
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
- package/src/adapters/shared/table-name-mapper.ts +50 -0
- package/src/adapters/shared/uow-operation-compiler.ts +211 -0
- package/src/db-fragment-definition-builder.test.ts +887 -0
- package/src/db-fragment-definition-builder.ts +737 -0
- package/src/db-fragment-instantiator.test.ts +543 -0
- package/src/db-fragment-integration.test.ts +406 -0
- package/src/fragments/internal-fragment.test.ts +549 -0
- package/src/fragments/internal-fragment.ts +249 -0
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +60 -27
- package/src/migration-engine/generation-engine.ts +99 -92
- package/src/mod.ts +139 -78
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +147 -3
- package/src/query/cursor.ts +25 -8
- package/src/query/orm/orm.ts +1 -1
- package/src/query/query-type.test.ts +9 -9
- package/src/query/serialize/create-sql-serializer.ts +34 -0
- package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
- package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
- package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
- package/src/query/serialize/sql-serializer.ts +143 -0
- package/src/query/{query.ts → simple-query-interface.ts} +4 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
- package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
- package/src/query/unit-of-work/retry-policy.test.ts +217 -0
- package/src/query/unit-of-work/retry-policy.ts +141 -0
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
- package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
- package/src/query/value-decoding.ts +113 -0
- package/src/query/value-encoding.test.ts +390 -0
- package/src/query/value-encoding.ts +168 -0
- package/src/schema/create.test.ts +5 -1
- package/src/schema/create.ts +5 -0
- package/src/schema/serialize.test.ts +165 -407
- package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
- package/src/schema/type-conversion/dialect/mysql.ts +64 -0
- package/src/schema/type-conversion/dialect/postgres.ts +62 -0
- package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
- package/src/schema/type-conversion/type-mapping.test.ts +137 -0
- package/src/schema/type-conversion/type-mapping.ts +153 -0
- package/src/shared/connection-pool.ts +5 -5
- package/src/sql-driver/better-sqlite3.test.ts +126 -0
- package/src/sql-driver/connection/connection-provider.ts +27 -0
- package/src/sql-driver/connection/single-connection-provider.ts +42 -0
- package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
- package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
- package/src/sql-driver/dialects/dialects.ts +1 -0
- package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
- package/src/sql-driver/driver/runtime-driver.ts +91 -0
- package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
- package/src/sql-driver/query-executor/plugin.ts +22 -0
- package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
- package/src/sql-driver/query-executor/query-executor.ts +44 -0
- package/src/sql-driver/sql-driver-adapter.ts +96 -0
- package/src/sql-driver/sql-driver.ts +53 -0
- package/src/sql-driver/sql.ts +57 -0
- package/src/sql-driver/sqlocal.test.ts +117 -0
- package/src/with-database.ts +152 -0
- package/tsdown.config.ts +8 -2
- package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
- package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
- package/dist/adapters/drizzle/join-column-utils.js +0 -28
- package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
- package/dist/adapters/drizzle/shared.d.ts +0 -14
- package/dist/adapters/drizzle/shared.d.ts.map +0 -1
- package/dist/adapters/drizzle/shared.js +0 -35
- package/dist/adapters/drizzle/shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
- package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-builder.js +0 -321
- package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -22
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -223
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -18
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
- package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-base.js +0 -128
- package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-factory.js +0 -34
- package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
- package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
- package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
- package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
- package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
- package/dist/adapters/kysely/migration/execute.js +0 -34
- package/dist/adapters/kysely/migration/execute.js.map +0 -1
- package/dist/bind-services.d.ts +0 -7
- package/dist/bind-services.d.ts.map +0 -1
- package/dist/bind-services.js +0 -14
- package/dist/bind-services.js.map +0 -1
- package/dist/fragment.d.ts +0 -173
- package/dist/fragment.d.ts.map +0 -1
- package/dist/fragment.js +0 -191
- package/dist/fragment.js.map +0 -1
- package/dist/migration-engine/create.d.ts +0 -37
- package/dist/migration-engine/create.d.ts.map +0 -1
- package/dist/migration-engine/create.js +0 -58
- package/dist/migration-engine/create.js.map +0 -1
- package/dist/migration-engine/shared.d.ts +0 -112
- package/dist/migration-engine/shared.d.ts.map +0 -1
- package/dist/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -168
- package/dist/query/result-transform.js.map +0 -1
- package/dist/query/unit-of-work.d.ts.map +0 -1
- package/dist/query/unit-of-work.js.map +0 -1
- package/dist/schema/serialize.js +0 -106
- package/dist/schema/serialize.js.map +0 -1
- package/dist/shared/settings-schema.js +0 -36
- package/dist/shared/settings-schema.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
- package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
- package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
- package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
- package/src/adapters/drizzle/join-column-utils.ts +0 -39
- package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
- package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
- package/src/adapters/kysely/kysely-query-builder.ts +0 -666
- package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -390
- package/src/adapters/kysely/kysely-shared.ts +0 -23
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
- package/src/adapters/kysely/migration/execute-base.ts +0 -256
- package/src/adapters/kysely/migration/execute-factory.ts +0 -53
- package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
- package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
- package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
- package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
- package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
- package/src/adapters/kysely/migration/execute.ts +0 -50
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
- package/src/bind-services.test.ts +0 -214
- package/src/bind-services.ts +0 -37
- package/src/db-fragment.test.ts +0 -800
- package/src/fragment.ts +0 -727
- package/src/query/result-transform.ts +0 -271
- package/src/query/unit-of-work-multi-schema.test.ts +0 -64
- package/src/query/unit-of-work.test.ts +0 -943
- package/src/schema/serialize.ts +0 -396
- package/src/shared/settings-schema.ts +0 -61
- package/src/uow-context-integration.test.ts +0 -102
- package/src/uow-context.test.ts +0 -182
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { type ColumnBuilderCallback, type Kysely, type RawBuilder, sql } from "kysely";
|
|
2
|
-
import type {
|
|
3
|
-
ColumnInfo,
|
|
4
|
-
MigrationOperation,
|
|
5
|
-
MigrationOperationMetadata,
|
|
6
|
-
} from "../../../migration-engine/shared";
|
|
7
|
-
import type { SQLProvider } from "../../../shared/providers";
|
|
8
|
-
import { schemaToDBType } from "../../../schema/serialize";
|
|
9
|
-
import type { TableNameMapper } from "../kysely-shared";
|
|
10
|
-
import { SETTINGS_TABLE_NAME } from "../../../shared/settings-schema";
|
|
11
|
-
|
|
12
|
-
export type ExecuteNode = {
|
|
13
|
-
compile(): { sql: string; parameters: readonly unknown[] };
|
|
14
|
-
execute(): Promise<unknown>;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
-
type KyselyAny = Kysely<any>;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Migration executor interface.
|
|
22
|
-
* Each provider implements this to handle database-specific migration execution.
|
|
23
|
-
*/
|
|
24
|
-
export interface MigrationExecutor<
|
|
25
|
-
TMeta extends MigrationOperationMetadata = MigrationOperationMetadata,
|
|
26
|
-
> {
|
|
27
|
-
/**
|
|
28
|
-
* Preprocess operations before execution.
|
|
29
|
-
* Allows executors to combine, split, or transform operations based on provider capabilities.
|
|
30
|
-
*
|
|
31
|
-
* For example, SQLite can merge add-foreign-key operations into create-table operations.
|
|
32
|
-
*/
|
|
33
|
-
preprocessOperations(operations: MigrationOperation[]): MigrationOperation<TMeta>[];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Execute a single migration operation.
|
|
37
|
-
*/
|
|
38
|
-
executeOperation(
|
|
39
|
-
operation: MigrationOperation<TMeta>,
|
|
40
|
-
mapper?: TableNameMapper,
|
|
41
|
-
): ExecuteNode | ExecuteNode[];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Base migration executor with common functionality.
|
|
46
|
-
* Provider-specific executors should extend this class.
|
|
47
|
-
*/
|
|
48
|
-
export abstract class BaseMigrationExecutor<
|
|
49
|
-
TMeta extends MigrationOperationMetadata = MigrationOperationMetadata,
|
|
50
|
-
> implements MigrationExecutor<TMeta>
|
|
51
|
-
{
|
|
52
|
-
constructor(
|
|
53
|
-
protected readonly db: KyselyAny,
|
|
54
|
-
protected readonly provider: SQLProvider,
|
|
55
|
-
) {}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Default implementation: no preprocessing, no metadata.
|
|
59
|
-
* Providers can override to transform operations.
|
|
60
|
-
*/
|
|
61
|
-
preprocessOperations(operations: MigrationOperation[]): MigrationOperation<TMeta>[] {
|
|
62
|
-
return operations as MigrationOperation<TMeta>[];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Execute a single migration operation.
|
|
67
|
-
* Must be implemented by provider-specific executors.
|
|
68
|
-
*/
|
|
69
|
-
abstract executeOperation(
|
|
70
|
-
operation: MigrationOperation<TMeta>,
|
|
71
|
-
mapper?: TableNameMapper,
|
|
72
|
-
): ExecuteNode | ExecuteNode[];
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Get table name, applying namespace mapping if provided.
|
|
76
|
-
* Settings table is never namespaced.
|
|
77
|
-
*/
|
|
78
|
-
protected getTableName(tableName: string, mapper?: TableNameMapper): string {
|
|
79
|
-
return tableName === SETTINGS_TABLE_NAME
|
|
80
|
-
? tableName
|
|
81
|
-
: mapper
|
|
82
|
-
? mapper.toPhysical(tableName)
|
|
83
|
-
: tableName;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Get column builder callback for creating/altering columns.
|
|
88
|
-
*/
|
|
89
|
-
protected getColumnBuilderCallback(col: ColumnInfo): ColumnBuilderCallback {
|
|
90
|
-
return (build) => {
|
|
91
|
-
if (!col.isNullable) {
|
|
92
|
-
build = build.notNull();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Internal ID is the primary key with auto-increment
|
|
96
|
-
if (col.role === "internal-id") {
|
|
97
|
-
build = build.primaryKey();
|
|
98
|
-
// Auto-increment for internal ID
|
|
99
|
-
if (this.provider === "postgresql" || this.provider === "cockroachdb") {
|
|
100
|
-
// SERIAL/BIGSERIAL handles auto-increment
|
|
101
|
-
// Already handled in schemaToDBType
|
|
102
|
-
} else if (this.provider === "mysql") {
|
|
103
|
-
build = build.autoIncrement();
|
|
104
|
-
} else if (this.provider === "sqlite") {
|
|
105
|
-
build = build.autoIncrement();
|
|
106
|
-
} else if (this.provider === "mssql") {
|
|
107
|
-
build = build.identity();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// External ID must be unique
|
|
112
|
-
if (col.role === "external-id") {
|
|
113
|
-
build = build.unique();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const defaultValue = this.defaultValueToDB(col);
|
|
117
|
-
if (defaultValue) {
|
|
118
|
-
build = build.defaultTo(defaultValue);
|
|
119
|
-
}
|
|
120
|
-
return build;
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Convert column default value to database representation.
|
|
126
|
-
*/
|
|
127
|
-
protected defaultValueToDB(column: ColumnInfo): RawBuilder<unknown> | undefined {
|
|
128
|
-
const value = column.default;
|
|
129
|
-
if (!value) {
|
|
130
|
-
return undefined;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// MySQL doesn't support default values for TEXT columns
|
|
134
|
-
if (this.provider === "mysql" && column.type === "string") {
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Static default values: defaultTo(value)
|
|
139
|
-
if ("value" in value && value.value !== undefined) {
|
|
140
|
-
return sql.lit(value.value);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Database-level special functions: defaultTo(b => b.now())
|
|
144
|
-
if ("dbSpecial" in value && value.dbSpecial === "now") {
|
|
145
|
-
return sql`CURRENT_TIMESTAMP`;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Runtime defaults (defaultTo$) are NOT generated in SQL - they're handled in application code
|
|
149
|
-
if ("runtime" in value) {
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return undefined;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Wrap a raw SQL builder in an ExecuteNode.
|
|
158
|
-
*/
|
|
159
|
-
protected rawToNode(raw: RawBuilder<unknown>): ExecuteNode {
|
|
160
|
-
return {
|
|
161
|
-
compile: () => raw.compile(this.db),
|
|
162
|
-
execute: () => raw.execute(this.db),
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Get the database type string for a column.
|
|
168
|
-
*/
|
|
169
|
-
protected getDBType(col: ColumnInfo): string {
|
|
170
|
-
return schemaToDBType(col, this.provider);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// ============================================================================
|
|
175
|
-
// Provider-Specific Helper Functions
|
|
176
|
-
// ============================================================================
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Returns the appropriate foreign key action based on the provider.
|
|
180
|
-
* MSSQL doesn't support RESTRICT, so we use NO ACTION (functionally equivalent).
|
|
181
|
-
*/
|
|
182
|
-
export function getForeignKeyAction(provider: SQLProvider): "restrict" | "no action" {
|
|
183
|
-
return provider === "mssql" ? "no action" : "restrict";
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Generates MSSQL default constraint name following the DF_tableName_columnName pattern.
|
|
188
|
-
*/
|
|
189
|
-
export function getMssqlDefaultConstraintName(tableName: string, columnName: string): string {
|
|
190
|
-
const MSSQL_DEFAULT_CONSTRAINT_PREFIX = "DF" as const;
|
|
191
|
-
return `${MSSQL_DEFAULT_CONSTRAINT_PREFIX}_${tableName}_${columnName}`;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Generate SQL to drop MSSQL default constraint.
|
|
196
|
-
*/
|
|
197
|
-
export function mssqlDropDefaultConstraint(tableName: string, columnName: string) {
|
|
198
|
-
return sql`
|
|
199
|
-
DECLARE @ConstraintName NVARCHAR(200);
|
|
200
|
-
|
|
201
|
-
SELECT @ConstraintName = dc.name
|
|
202
|
-
FROM sys.default_constraints dc
|
|
203
|
-
JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id
|
|
204
|
-
JOIN sys.tables t ON t.object_id = c.object_id
|
|
205
|
-
JOIN sys.schemas s ON t.schema_id = s.schema_id
|
|
206
|
-
WHERE s.name = 'dbo' AND t.name = ${sql.lit(tableName)} AND c.name = ${sql.lit(columnName)};
|
|
207
|
-
|
|
208
|
-
IF @ConstraintName IS NOT NULL
|
|
209
|
-
BEGIN
|
|
210
|
-
EXEC('ALTER TABLE [dbo].[' + ${sql.lit(tableName)} + '] DROP CONSTRAINT [' + @ConstraintName + ']');
|
|
211
|
-
END`;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Create a unique index with provider-specific handling.
|
|
216
|
-
*/
|
|
217
|
-
export function createUniqueIndex(
|
|
218
|
-
db: KyselyAny,
|
|
219
|
-
name: string,
|
|
220
|
-
tableName: string,
|
|
221
|
-
cols: string[],
|
|
222
|
-
provider: SQLProvider,
|
|
223
|
-
) {
|
|
224
|
-
const query = db.schema.createIndex(name).on(tableName).columns(cols).unique();
|
|
225
|
-
|
|
226
|
-
if (provider === "mssql") {
|
|
227
|
-
// MSSQL: ignore null values in unique indexes by default
|
|
228
|
-
return query.where((b) => {
|
|
229
|
-
return b.and(cols.map((col) => b(col, "is not", null)));
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return query;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Drop a unique index with provider-specific handling.
|
|
238
|
-
*/
|
|
239
|
-
export function dropUniqueIndex(
|
|
240
|
-
db: KyselyAny,
|
|
241
|
-
name: string,
|
|
242
|
-
tableName: string,
|
|
243
|
-
provider: SQLProvider,
|
|
244
|
-
) {
|
|
245
|
-
let query = db.schema.dropIndex(name).ifExists();
|
|
246
|
-
|
|
247
|
-
if (provider === "cockroachdb") {
|
|
248
|
-
query = query.cascade();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (provider === "mssql") {
|
|
252
|
-
query = query.on(tableName);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
return query;
|
|
256
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import type { Kysely } from "kysely";
|
|
2
|
-
import type { KyselyConfig } from "../kysely-adapter";
|
|
3
|
-
import type { MigrationExecutor } from "./execute-base";
|
|
4
|
-
import { SqliteMigrationExecutor } from "./execute-sqlite";
|
|
5
|
-
import { PostgresMigrationExecutor } from "./execute-postgres";
|
|
6
|
-
import { MysqlMigrationExecutor } from "./execute-mysql";
|
|
7
|
-
import { MssqlMigrationExecutor } from "./execute-mssql";
|
|
8
|
-
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
-
type KyselyAny = Kysely<any>;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Create a provider-specific migration executor.
|
|
14
|
-
*/
|
|
15
|
-
export function createMigrationExecutor(config: KyselyConfig): MigrationExecutor {
|
|
16
|
-
const { provider } = config;
|
|
17
|
-
// Resolve db instance synchronously
|
|
18
|
-
// Safe cast: This is only called from synchronous contexts where the db must be available
|
|
19
|
-
const dbOrFactory = config.db;
|
|
20
|
-
let kysely: KyselyAny;
|
|
21
|
-
|
|
22
|
-
if (typeof dbOrFactory === "function") {
|
|
23
|
-
const result = dbOrFactory();
|
|
24
|
-
// Check if it's a Promise - if so, this is an error in usage
|
|
25
|
-
if (result && typeof (result as Promise<unknown>).then === "function") {
|
|
26
|
-
throw new Error(
|
|
27
|
-
"Cannot create migration executor with async database factory. " +
|
|
28
|
-
"Database must be initialized before calling preprocessOperations.",
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
// Safe cast: We've verified it's not a Promise
|
|
32
|
-
kysely = result as KyselyAny;
|
|
33
|
-
} else {
|
|
34
|
-
kysely = dbOrFactory;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
switch (provider) {
|
|
38
|
-
case "sqlite":
|
|
39
|
-
return new SqliteMigrationExecutor(kysely, provider);
|
|
40
|
-
case "postgresql":
|
|
41
|
-
case "cockroachdb":
|
|
42
|
-
return new PostgresMigrationExecutor(kysely, provider);
|
|
43
|
-
case "mysql":
|
|
44
|
-
return new MysqlMigrationExecutor(kysely, provider);
|
|
45
|
-
case "mssql":
|
|
46
|
-
return new MssqlMigrationExecutor(kysely, provider);
|
|
47
|
-
default: {
|
|
48
|
-
// Ensure exhaustive switch
|
|
49
|
-
const _exhaustive: never = provider;
|
|
50
|
-
throw new Error(`Unsupported provider: ${_exhaustive}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { sql } from "kysely";
|
|
2
|
-
import {
|
|
3
|
-
type ColumnOperation,
|
|
4
|
-
isUpdated,
|
|
5
|
-
type MigrationOperation,
|
|
6
|
-
} from "../../../migration-engine/shared";
|
|
7
|
-
import type { TableNameMapper } from "../kysely-shared";
|
|
8
|
-
import {
|
|
9
|
-
BaseMigrationExecutor,
|
|
10
|
-
createUniqueIndex,
|
|
11
|
-
dropUniqueIndex,
|
|
12
|
-
type ExecuteNode,
|
|
13
|
-
getForeignKeyAction,
|
|
14
|
-
getMssqlDefaultConstraintName,
|
|
15
|
-
mssqlDropDefaultConstraint,
|
|
16
|
-
} from "./execute-base";
|
|
17
|
-
|
|
18
|
-
const errors = {
|
|
19
|
-
IdColumnUpdate:
|
|
20
|
-
"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
|
|
21
|
-
} as const;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* MSSQL-specific migration executor.
|
|
25
|
-
* Handles complex default constraint management and uses sp_rename for table renames.
|
|
26
|
-
*/
|
|
27
|
-
export class MssqlMigrationExecutor extends BaseMigrationExecutor {
|
|
28
|
-
executeOperation(
|
|
29
|
-
operation: MigrationOperation,
|
|
30
|
-
mapper?: TableNameMapper,
|
|
31
|
-
): ExecuteNode | ExecuteNode[] {
|
|
32
|
-
switch (operation.type) {
|
|
33
|
-
case "create-table":
|
|
34
|
-
return this.createTable(operation, mapper);
|
|
35
|
-
case "rename-table":
|
|
36
|
-
return this.renameTable(operation, mapper);
|
|
37
|
-
case "alter-table":
|
|
38
|
-
return this.alterTable(operation, mapper);
|
|
39
|
-
case "drop-table":
|
|
40
|
-
return this.dropTable(operation, mapper);
|
|
41
|
-
case "add-foreign-key":
|
|
42
|
-
return this.addForeignKey(operation, mapper);
|
|
43
|
-
case "drop-foreign-key":
|
|
44
|
-
return this.dropForeignKey(operation, mapper);
|
|
45
|
-
case "add-index":
|
|
46
|
-
return this.addIndex(operation, mapper);
|
|
47
|
-
case "drop-index":
|
|
48
|
-
return this.dropIndex(operation, mapper);
|
|
49
|
-
case "custom":
|
|
50
|
-
return this.handleCustomOperation(operation);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private createTable(
|
|
55
|
-
operation: Extract<MigrationOperation, { type: "create-table" }>,
|
|
56
|
-
mapper?: TableNameMapper,
|
|
57
|
-
): ExecuteNode {
|
|
58
|
-
const tableName = this.getTableName(operation.name, mapper);
|
|
59
|
-
let builder = this.db.schema.createTable(tableName);
|
|
60
|
-
|
|
61
|
-
// Add columns
|
|
62
|
-
for (const columnInfo of operation.columns) {
|
|
63
|
-
builder = builder.addColumn(
|
|
64
|
-
columnInfo.name,
|
|
65
|
-
sql.raw(this.getDBType(columnInfo)),
|
|
66
|
-
this.getColumnBuilderCallback(columnInfo),
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return builder;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
private renameTable(
|
|
74
|
-
operation: Extract<MigrationOperation, { type: "rename-table" }>,
|
|
75
|
-
mapper?: TableNameMapper,
|
|
76
|
-
): ExecuteNode {
|
|
77
|
-
// MSSQL uses sp_rename procedure
|
|
78
|
-
return this.rawToNode(
|
|
79
|
-
sql`EXEC sp_rename ${sql.lit(this.getTableName(operation.from, mapper))}, ${sql.lit(this.getTableName(operation.to, mapper))}`,
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private alterTable(
|
|
84
|
-
operation: Extract<MigrationOperation, { type: "alter-table" }>,
|
|
85
|
-
mapper?: TableNameMapper,
|
|
86
|
-
): ExecuteNode[] {
|
|
87
|
-
const results: ExecuteNode[] = [];
|
|
88
|
-
const tableName = this.getTableName(operation.name, mapper);
|
|
89
|
-
|
|
90
|
-
for (const columnOp of operation.value) {
|
|
91
|
-
results.push(...this.executeColumnOperation(tableName, columnOp));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return results;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {
|
|
98
|
-
const next = () => this.db.schema.alterTable(tableName);
|
|
99
|
-
const results: ExecuteNode[] = [];
|
|
100
|
-
|
|
101
|
-
switch (operation.type) {
|
|
102
|
-
case "rename-column":
|
|
103
|
-
results.push(next().renameColumn(operation.from, operation.to));
|
|
104
|
-
return results;
|
|
105
|
-
|
|
106
|
-
case "drop-column":
|
|
107
|
-
results.push(next().dropColumn(operation.name));
|
|
108
|
-
return results;
|
|
109
|
-
|
|
110
|
-
case "create-column": {
|
|
111
|
-
const col = operation.value;
|
|
112
|
-
results.push(
|
|
113
|
-
next().addColumn(
|
|
114
|
-
col.name,
|
|
115
|
-
sql.raw(this.getDBType(col)),
|
|
116
|
-
this.getColumnBuilderCallback(col),
|
|
117
|
-
),
|
|
118
|
-
);
|
|
119
|
-
return results;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
case "update-column": {
|
|
123
|
-
const col = operation.value;
|
|
124
|
-
|
|
125
|
-
if (col.role === "external-id" || col.role === "internal-id") {
|
|
126
|
-
throw new Error(errors.IdColumnUpdate);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (!isUpdated(operation)) {
|
|
130
|
-
return results;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// MSSQL requires dropping and recreating default constraints when changing data type or default value
|
|
134
|
-
const mssqlRecreateDefaultConstraint = operation.updateDataType || operation.updateDefault;
|
|
135
|
-
|
|
136
|
-
if (mssqlRecreateDefaultConstraint) {
|
|
137
|
-
results.push(this.rawToNode(mssqlDropDefaultConstraint(tableName, col.name)));
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (operation.updateDataType) {
|
|
141
|
-
const dbType = sql.raw(this.getDBType(col));
|
|
142
|
-
results.push(next().alterColumn(operation.name, (b) => b.setDataType(dbType)));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (operation.updateNullable) {
|
|
146
|
-
results.push(
|
|
147
|
-
next().alterColumn(operation.name, (build) =>
|
|
148
|
-
col.isNullable ? build.dropNotNull() : build.setNotNull(),
|
|
149
|
-
),
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (mssqlRecreateDefaultConstraint) {
|
|
154
|
-
const defaultValue = this.defaultValueToDB(col);
|
|
155
|
-
|
|
156
|
-
if (defaultValue) {
|
|
157
|
-
const constraintName = getMssqlDefaultConstraintName(tableName, col.name);
|
|
158
|
-
results.push(
|
|
159
|
-
this.rawToNode(
|
|
160
|
-
sql`ALTER TABLE ${sql.ref(tableName)} ADD CONSTRAINT ${sql.ref(constraintName)} DEFAULT ${defaultValue} FOR ${sql.ref(col.name)}`,
|
|
161
|
-
),
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
} else if (operation.updateDefault) {
|
|
165
|
-
const defaultValue = this.defaultValueToDB(col);
|
|
166
|
-
results.push(
|
|
167
|
-
next().alterColumn(operation.name, (build) => {
|
|
168
|
-
if (!defaultValue) {
|
|
169
|
-
return build.dropDefault();
|
|
170
|
-
}
|
|
171
|
-
return build.setDefault(defaultValue);
|
|
172
|
-
}),
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return results;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
private dropTable(
|
|
182
|
-
operation: Extract<MigrationOperation, { type: "drop-table" }>,
|
|
183
|
-
mapper?: TableNameMapper,
|
|
184
|
-
): ExecuteNode {
|
|
185
|
-
return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
private addForeignKey(
|
|
189
|
-
operation: Extract<MigrationOperation, { type: "add-foreign-key" }>,
|
|
190
|
-
mapper?: TableNameMapper,
|
|
191
|
-
): ExecuteNode {
|
|
192
|
-
const { table, value } = operation;
|
|
193
|
-
const action = getForeignKeyAction(this.provider);
|
|
194
|
-
|
|
195
|
-
return this.db.schema
|
|
196
|
-
.alterTable(this.getTableName(table, mapper))
|
|
197
|
-
.addForeignKeyConstraint(
|
|
198
|
-
value.name,
|
|
199
|
-
value.columns,
|
|
200
|
-
this.getTableName(value.referencedTable, mapper),
|
|
201
|
-
value.referencedColumns,
|
|
202
|
-
(b) => b.onUpdate(action).onDelete(action),
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
private dropForeignKey(
|
|
207
|
-
operation: Extract<MigrationOperation, { type: "drop-foreign-key" }>,
|
|
208
|
-
mapper?: TableNameMapper,
|
|
209
|
-
): ExecuteNode {
|
|
210
|
-
const { table, name } = operation;
|
|
211
|
-
return this.db.schema
|
|
212
|
-
.alterTable(this.getTableName(table, mapper))
|
|
213
|
-
.dropConstraint(name)
|
|
214
|
-
.ifExists();
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
private addIndex(
|
|
218
|
-
operation: Extract<MigrationOperation, { type: "add-index" }>,
|
|
219
|
-
mapper?: TableNameMapper,
|
|
220
|
-
): ExecuteNode {
|
|
221
|
-
const tableName = this.getTableName(operation.table, mapper);
|
|
222
|
-
|
|
223
|
-
if (operation.unique) {
|
|
224
|
-
return createUniqueIndex(
|
|
225
|
-
this.db,
|
|
226
|
-
operation.name,
|
|
227
|
-
tableName,
|
|
228
|
-
operation.columns,
|
|
229
|
-
this.provider,
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
private dropIndex(
|
|
237
|
-
operation: Extract<MigrationOperation, { type: "drop-index" }>,
|
|
238
|
-
mapper?: TableNameMapper,
|
|
239
|
-
): ExecuteNode {
|
|
240
|
-
const tableName = this.getTableName(operation.table, mapper);
|
|
241
|
-
return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
private handleCustomOperation(
|
|
245
|
-
operation: Extract<MigrationOperation, { type: "custom" }>,
|
|
246
|
-
): ExecuteNode {
|
|
247
|
-
const statement = sql.raw(operation["sql"] as string);
|
|
248
|
-
return this.rawToNode(statement);
|
|
249
|
-
}
|
|
250
|
-
}
|