@fragno-dev/db 0.2.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +404 -175
- package/CHANGELOG.md +109 -0
- package/README.md +54 -9
- package/dist/adapters/adapters.d.ts +23 -21
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
- package/dist/adapters/generic-sql/driver-config.js +23 -1
- package/dist/adapters/generic-sql/driver-config.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.js +30 -3
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
- package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
- package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js +5 -3
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +43 -29
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
- package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
- package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
- package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +6 -2
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +27 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +135 -0
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
- package/dist/adapters/in-memory/errors.d.ts +13 -0
- package/dist/adapters/in-memory/errors.d.ts.map +1 -0
- package/dist/adapters/in-memory/errors.js +23 -0
- package/dist/adapters/in-memory/errors.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +871 -0
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
- package/dist/adapters/in-memory/index.d.ts +4 -0
- package/dist/adapters/in-memory/index.js +4 -0
- package/dist/adapters/in-memory/options.d.ts +30 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +62 -0
- package/dist/adapters/in-memory/options.js.map +1 -0
- package/dist/adapters/in-memory/reference-resolution.js +26 -0
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
- package/dist/adapters/in-memory/sorted-array-index.js +129 -0
- package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
- package/dist/adapters/in-memory/store.js +71 -0
- package/dist/adapters/in-memory/store.js.map +1 -0
- package/dist/adapters/in-memory/value-comparison.js +28 -0
- package/dist/adapters/in-memory/value-comparison.js.map +1 -0
- package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
- package/dist/adapters/shared/uow-operation-compiler.js +11 -11
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
- package/dist/adapters/sql/index.d.ts +5 -0
- package/dist/adapters/sql/index.js +4 -0
- package/dist/browser/adapters/adapters.d.ts +61 -0
- package/dist/browser/adapters/adapters.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
- package/dist/browser/adapters/in-memory/index.d.ts +2 -0
- package/dist/browser/adapters/in-memory/options.d.ts +1 -0
- package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
- package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/browser/durable-hooks.d.ts +3 -0
- package/dist/browser/fragments/internal-fragment.d.ts +317 -0
- package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/browser/hooks/hooks.d.ts +146 -0
- package/dist/browser/hooks/hooks.d.ts.map +1 -0
- package/dist/browser/id.js +1 -0
- package/dist/browser/internal/adapter-registry.d.ts +4 -0
- package/dist/browser/internal/outbox-state.d.ts +2 -0
- package/dist/browser/mod.d.ts +15 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +17 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/browser/mod2.d.ts +48 -0
- package/dist/browser/mod2.d.ts.map +1 -0
- package/dist/browser/naming/sql-naming.d.ts +19 -0
- package/dist/browser/naming/sql-naming.d.ts.map +1 -0
- package/dist/browser/outbox/outbox.d.ts +21 -0
- package/dist/browser/outbox/outbox.d.ts.map +1 -0
- package/dist/browser/query/column-defaults.js +1 -0
- package/dist/browser/query/condition-builder.d.ts +44 -0
- package/dist/browser/query/condition-builder.d.ts.map +1 -0
- package/dist/browser/query/condition-builder.js +97 -0
- package/dist/browser/query/condition-builder.js.map +1 -0
- package/dist/browser/query/cursor.d.ts +105 -0
- package/dist/browser/query/cursor.d.ts.map +1 -0
- package/dist/browser/query/cursor.js +150 -0
- package/dist/browser/query/cursor.js.map +1 -0
- package/dist/browser/query/db-now.d.ts +22 -0
- package/dist/browser/query/db-now.d.ts.map +1 -0
- package/dist/browser/query/db-now.js +33 -0
- package/dist/browser/query/db-now.js.map +1 -0
- package/dist/browser/query/orm/orm.d.ts +18 -0
- package/dist/browser/query/orm/orm.d.ts.map +1 -0
- package/dist/browser/query/simple-query-interface.d.ts +108 -0
- package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
- package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/browser/query/value-encoding.js +38 -0
- package/dist/browser/query/value-encoding.js.map +1 -0
- package/dist/browser/schema/create.d.ts +326 -0
- package/dist/browser/schema/create.d.ts.map +1 -0
- package/dist/browser/schema/create.js +89 -0
- package/dist/browser/schema/create.js.map +1 -0
- package/dist/browser/schema/generate-id.js +28 -0
- package/dist/browser/schema/generate-id.js.map +1 -0
- package/dist/browser/shared/providers.d.ts +6 -0
- package/dist/browser/shared/providers.d.ts.map +1 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
- package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/browser/sync/commands.d.ts +15 -0
- package/dist/browser/sync/commands.d.ts.map +1 -0
- package/dist/browser/sync/commands.js +27 -0
- package/dist/browser/sync/commands.js.map +1 -0
- package/dist/browser/sync/types.d.ts +63 -0
- package/dist/browser/sync/types.d.ts.map +1 -0
- package/dist/browser/util/types.d.ts +8 -0
- package/dist/browser/util/types.d.ts.map +1 -0
- package/dist/browser/with-database.d.ts +29 -0
- package/dist/browser/with-database.d.ts.map +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +5 -0
- package/dist/db-fragment-definition-builder.d.ts +101 -33
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +450 -60
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +31 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/dispatcher.d.ts +14 -0
- package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/node/dispatcher.js +80 -0
- package/dist/dispatchers/node/dispatcher.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +12 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +27 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/durable-hooks.d.ts +31 -0
- package/dist/durable-hooks.d.ts.map +1 -0
- package/dist/durable-hooks.js +23 -0
- package/dist/durable-hooks.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +186 -8
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +203 -38
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +164 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +15 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +39 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-logger.js +75 -0
- package/dist/hooks/durable-hooks-logger.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +1 -0
- package/dist/hooks/durable-hooks-processor.js +80 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/durable-hooks-runtime.js +44 -0
- package/dist/hooks/durable-hooks-runtime.js.map +1 -0
- package/dist/hooks/hooks.d.ts +100 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +254 -27
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/id.d.ts +2 -2
- package/dist/id.js +2 -2
- package/dist/internal/adapter-registry.d.ts +11 -0
- package/dist/internal/adapter-registry.d.ts.map +1 -0
- package/dist/internal/adapter-registry.js +135 -0
- package/dist/internal/adapter-registry.js.map +1 -0
- package/dist/internal/outbox-state.d.ts +2 -0
- package/dist/internal/outbox-state.js +26 -0
- package/dist/internal/outbox-state.js.map +1 -0
- package/dist/migration-engine/auto-from-schema.d.ts +33 -0
- package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
- package/dist/migration-engine/auto-from-schema.js +223 -37
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +16 -10
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +86 -35
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.d.ts +113 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +20 -12
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +18 -12
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts +19 -0
- package/dist/naming/sql-naming.d.ts.map +1 -0
- package/dist/naming/sql-naming.js +116 -0
- package/dist/naming/sql-naming.js.map +1 -0
- package/dist/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +54 -0
- package/dist/outbox/outbox.d.ts.map +1 -0
- package/dist/outbox/outbox.js +37 -0
- package/dist/outbox/outbox.js.map +1 -0
- package/dist/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/condition-builder.d.ts +7 -1
- package/dist/query/condition-builder.d.ts.map +1 -1
- package/dist/query/condition-builder.js +5 -1
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/cursor-client.d.ts +105 -0
- package/dist/query/cursor-client.d.ts.map +1 -0
- package/dist/query/cursor-client.js +165 -0
- package/dist/query/cursor-client.js.map +1 -0
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +51 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +22 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +35 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +5 -4
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/serialize/sql-serializer.js +2 -2
- package/dist/query/serialize/sql-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +13 -4
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +136 -11
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +16 -6
- package/dist/query/value-decoding.js.map +1 -1
- package/dist/query/value-encoding.js +29 -9
- package/dist/query/value-encoding.js.map +1 -1
- package/dist/schema/create.d.ts +103 -35
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +172 -58
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/generate-id.js +2 -2
- package/dist/schema/generate-id.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +123 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-output/drizzle.d.ts +30 -0
- package/dist/schema-output/drizzle.d.ts.map +1 -0
- package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
- package/dist/schema-output/drizzle.js.map +1 -0
- package/dist/schema-output/prisma.d.ts +17 -0
- package/dist/schema-output/prisma.d.ts.map +1 -0
- package/dist/schema-output/prisma.js +307 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
- package/dist/sql-driver/sql.js.map +1 -1
- package/dist/sync/commands.d.ts +15 -0
- package/dist/sync/commands.d.ts.map +1 -0
- package/dist/sync/commands.js +27 -0
- package/dist/sync/commands.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/read-tracking.d.ts +25 -0
- package/dist/sync/read-tracking.d.ts.map +1 -0
- package/dist/sync/read-tracking.js +148 -0
- package/dist/sync/read-tracking.js.map +1 -0
- package/dist/sync/submit.js +213 -0
- package/dist/sync/submit.js.map +1 -0
- package/dist/sync/types.d.ts +63 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/util/default-database-adapter.js +66 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +3 -6
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +8 -7
- package/dist/with-database.js.map +1 -1
- package/package.json +62 -55
- package/src/adapters/adapters.ts +33 -26
- package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
- package/src/adapters/drizzle/test-utils.ts +13 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
- package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
- package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
- package/src/adapters/generic-sql/migration/executor.ts +47 -4
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
- package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
- package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
- package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
- package/src/adapters/generic-sql/query/select-builder.ts +7 -3
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
- package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
- package/src/adapters/generic-sql/query/where-builder.ts +112 -41
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
- package/src/adapters/generic-sql/uow-decoder.ts +23 -5
- package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
- package/src/adapters/generic-sql/uow-encoder.ts +48 -13
- package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
- package/src/adapters/in-memory/condition-evaluator.ts +280 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +42 -0
- package/src/adapters/in-memory/options.ts +91 -0
- package/src/adapters/in-memory/outbox.test.ts +361 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +69 -0
- package/src/adapters/in-memory/store.ts +145 -0
- package/src/adapters/in-memory/value-comparison.ts +53 -0
- package/src/adapters/in-memory/value-normalization.test.ts +58 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
- package/src/adapters/shared/uow-operation-compiler.ts +28 -18
- package/src/adapters/sql/index.ts +12 -0
- package/src/browser/mod.ts +64 -0
- package/src/client.ts +19 -0
- package/src/db-fragment-definition-builder.test.ts +845 -53
- package/src/db-fragment-definition-builder.ts +911 -95
- package/src/db-fragment-instantiator.test.ts +210 -94
- package/src/db-fragment-integration.test.ts +17 -12
- package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
- package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
- package/src/dispatchers/cloudflare-do/index.ts +63 -0
- package/src/dispatchers/node/dispatcher.ts +112 -0
- package/src/dispatchers/node/index.test.ts +120 -0
- package/src/dispatchers/node/index.ts +50 -0
- package/src/durable-hooks.test.ts +80 -0
- package/src/durable-hooks.ts +67 -0
- package/src/fragments/internal-fragment.routes.test.ts +570 -0
- package/src/fragments/internal-fragment.routes.ts +334 -0
- package/src/fragments/internal-fragment.schema.ts +95 -0
- package/src/fragments/internal-fragment.test.ts +505 -83
- package/src/fragments/internal-fragment.ts +453 -70
- package/src/hooks/durable-hooks-logger.ts +126 -0
- package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
- package/src/hooks/durable-hooks-processor.test.ts +282 -0
- package/src/hooks/durable-hooks-processor.ts +173 -0
- package/src/hooks/durable-hooks-runtime.test.ts +65 -0
- package/src/hooks/durable-hooks-runtime.ts +81 -0
- package/src/hooks/hooks.test.ts +455 -34
- package/src/hooks/hooks.ts +501 -34
- package/src/id.test.ts +34 -0
- package/src/id.ts +1 -3
- package/src/internal/adapter-registry.test.ts +93 -0
- package/src/internal/adapter-registry.ts +239 -0
- package/src/internal/outbox-state.ts +43 -0
- package/src/migration-engine/auto-from-schema.test.ts +107 -14
- package/src/migration-engine/auto-from-schema.ts +365 -44
- package/src/migration-engine/create.test.ts +4 -3
- package/src/migration-engine/create.ts +1 -1
- package/src/migration-engine/generation-engine.test.ts +292 -110
- package/src/migration-engine/generation-engine.ts +117 -66
- package/src/migration-engine/shared.ts +14 -0
- package/src/mod.ts +95 -39
- package/src/naming/sql-naming.ts +181 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +424 -0
- package/src/outbox/outbox.ts +139 -0
- package/src/query/column-defaults.ts +42 -4
- package/src/query/condition-builder.test.ts +18 -3
- package/src/query/condition-builder.ts +7 -0
- package/src/query/cursor-client.test.ts +70 -0
- package/src/query/cursor-client.ts +263 -0
- package/src/query/cursor.test.ts +119 -20
- package/src/query/cursor.ts +88 -27
- package/src/query/db-now.ts +73 -0
- package/src/query/orm/orm.ts +2 -2
- package/src/query/query-type.test.ts +4 -3
- package/src/query/serialize/create-sql-serializer.ts +10 -5
- package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
- package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
- package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +15 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
- package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
- package/src/query/unit-of-work/retry-policy.test.ts +1 -0
- package/src/query/unit-of-work/tx-builder.test.ts +73 -1
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
- package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
- package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
- package/src/query/unit-of-work/unit-of-work.ts +309 -38
- package/src/query/value-decoding.test.ts +63 -4
- package/src/query/value-decoding.ts +32 -6
- package/src/query/value-encoding.test.ts +86 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +293 -47
- package/src/schema/create.ts +406 -70
- package/src/schema/generate-id.test.ts +3 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +18 -5
- package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +26 -1
- package/src/schema/validator.test.ts +199 -0
- package/src/schema/validator.ts +232 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
- package/src/schema-output/prisma.test.ts +694 -0
- package/src/schema-output/prisma.ts +593 -0
- package/src/sql-driver/better-sqlite3.test.ts +5 -3
- package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
- package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
- package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
- package/src/sql-driver/query-executor/query-executor.ts +1 -1
- package/src/sql-driver/sql-driver-adapter.ts +2 -2
- package/src/sql-driver/sql.ts +2 -1
- package/src/sql-driver/sqlocal.test.ts +4 -2
- package/src/sync/commands.test.ts +39 -0
- package/src/sync/commands.ts +51 -0
- package/src/sync/conflict-checker.test.ts +450 -0
- package/src/sync/conflict-checker.ts +248 -0
- package/src/sync/index.ts +14 -0
- package/src/sync/plan.ts +9 -0
- package/src/sync/read-tracking.test.ts +177 -0
- package/src/sync/read-tracking.ts +287 -0
- package/src/sync/submit.test.ts +205 -0
- package/src/sync/submit.ts +328 -0
- package/src/sync/types.ts +80 -0
- package/src/util/default-database-adapter.ts +119 -0
- package/src/with-database.ts +20 -31
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +38 -24
- package/vitest.config.ts +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
- package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
- package/dist/adapters/drizzle/generate.d.ts +0 -30
- package/dist/adapters/drizzle/generate.d.ts.map +0 -1
- package/dist/adapters/drizzle/generate.js.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.js +0 -17
- package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
- package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
- package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
- package/dist/adapters/shared/table-name-mapper.js +0 -43
- package/dist/adapters/shared/table-name-mapper.js.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/packages/fragno/dist/api/bind-services.js +0 -20
- package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
- package/dist/packages/fragno/dist/api/error.js +0 -48
- package/dist/packages/fragno/dist/api/error.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
- package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/route.js +0 -10
- package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
- package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
- package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
- package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
- package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/route.js +0 -17
- package/dist/packages/fragno/dist/api/route.js.map +0 -1
- package/dist/packages/fragno/dist/internal/symbols.js +0 -10
- package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
- package/dist/schema-generator/schema-generator.d.ts +0 -15
- package/dist/schema-generator/schema-generator.d.ts.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
- package/src/adapters/kysely/kysely-adapter.ts +0 -27
- package/src/adapters/shared/table-name-mapper.ts +0 -50
- package/src/schema-generator/schema-generator.ts +0 -12
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SQLGenerator } from "../sql-generator.js";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
2
3
|
import { sql } from "kysely";
|
|
3
4
|
|
|
4
5
|
//#region src/adapters/generic-sql/migration/dialect/sqlite.ts
|
|
@@ -7,6 +8,75 @@ const errors = {
|
|
|
7
8
|
SQLiteUpdateColumn: "SQLite doesn't support updating columns. Recreate the table instead.",
|
|
8
9
|
SQLiteUpdateForeignKeys: "SQLite doesn't support modifying foreign keys directly. Use `recreate-table` instead."
|
|
9
10
|
};
|
|
11
|
+
function normalizeCopyColumns(copyColumns) {
|
|
12
|
+
return copyColumns.map((column) => typeof column === "string" ? {
|
|
13
|
+
from: column,
|
|
14
|
+
to: column
|
|
15
|
+
} : {
|
|
16
|
+
from: column.from,
|
|
17
|
+
to: column.to
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function applyRenameDropToColumns(columns, operations) {
|
|
21
|
+
let next = columns.map((column) => ({ ...column }));
|
|
22
|
+
for (const op of operations) if (op.type === "rename-column") {
|
|
23
|
+
const column = next.find((col) => col.name === op.from);
|
|
24
|
+
if (column) column.name = op.to;
|
|
25
|
+
} else if (op.type === "drop-column") next = next.filter((column) => column.name !== op.name);
|
|
26
|
+
return next;
|
|
27
|
+
}
|
|
28
|
+
function applyRenameDropToCopyColumns(copyColumns, operations) {
|
|
29
|
+
let next = copyColumns.map((column) => ({ ...column }));
|
|
30
|
+
for (const op of operations) if (op.type === "rename-column") {
|
|
31
|
+
for (const mapping of next) if (mapping.to === op.from) mapping.to = op.to;
|
|
32
|
+
} else if (op.type === "drop-column") next = next.filter((mapping) => mapping.to !== op.name);
|
|
33
|
+
return next;
|
|
34
|
+
}
|
|
35
|
+
function applyRenameDropToIndexes(indexes, operations) {
|
|
36
|
+
const next = [];
|
|
37
|
+
for (const index of indexes) {
|
|
38
|
+
let columns = [...index.columns];
|
|
39
|
+
let dropped = false;
|
|
40
|
+
for (const op of operations) if (op.type === "rename-column") columns = columns.map((column) => column === op.from ? op.to : column);
|
|
41
|
+
else if (columns.includes(op.name)) {
|
|
42
|
+
dropped = true;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (!dropped) next.push({
|
|
46
|
+
...index,
|
|
47
|
+
columns
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return next;
|
|
51
|
+
}
|
|
52
|
+
function applyRenameDropToForeignKeys(foreignKeys, operations) {
|
|
53
|
+
const next = [];
|
|
54
|
+
for (const foreignKey of foreignKeys) {
|
|
55
|
+
let columns = [...foreignKey.columns];
|
|
56
|
+
let dropped = false;
|
|
57
|
+
for (const op of operations) if (op.type === "rename-column") columns = columns.map((column) => column === op.from ? op.to : column);
|
|
58
|
+
else if (columns.includes(op.name)) {
|
|
59
|
+
dropped = true;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (!dropped) next.push({
|
|
63
|
+
...foreignKey,
|
|
64
|
+
columns
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return next;
|
|
68
|
+
}
|
|
69
|
+
function mergeRenameDropIntoRecreate(recreate, operations) {
|
|
70
|
+
const renameDropOps = operations.filter((op) => op.type === "rename-column" || op.type === "drop-column");
|
|
71
|
+
if (renameDropOps.length === 0) return recreate;
|
|
72
|
+
return {
|
|
73
|
+
...recreate,
|
|
74
|
+
columns: applyRenameDropToColumns(recreate.columns, renameDropOps),
|
|
75
|
+
copyColumns: applyRenameDropToCopyColumns(normalizeCopyColumns(recreate.copyColumns), renameDropOps),
|
|
76
|
+
indexes: applyRenameDropToIndexes(recreate.indexes, renameDropOps),
|
|
77
|
+
foreignKeys: applyRenameDropToForeignKeys(recreate.foreignKeys, renameDropOps)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
10
80
|
/**
|
|
11
81
|
* SQLite-specific SQL generator.
|
|
12
82
|
* Handles SQLite's limitations around foreign keys and column updates.
|
|
@@ -22,20 +92,70 @@ var SQLiteSQLGenerator = class extends SQLGenerator {
|
|
|
22
92
|
if (operations.length === 0) return operations;
|
|
23
93
|
const result = [];
|
|
24
94
|
const createTableIndices = /* @__PURE__ */ new Map();
|
|
95
|
+
const alterTableIndices = /* @__PURE__ */ new Map();
|
|
25
96
|
const foreignKeysByTable = /* @__PURE__ */ new Map();
|
|
26
97
|
for (const op of operations) if (op.type === "create-table") {
|
|
27
98
|
createTableIndices.set(op.name, result.length);
|
|
28
99
|
result.push(op);
|
|
100
|
+
} else if (op.type === "alter-table") {
|
|
101
|
+
const index = result.length;
|
|
102
|
+
result.push(op);
|
|
103
|
+
const existing = alterTableIndices.get(op.name);
|
|
104
|
+
if (existing) existing.push(index);
|
|
105
|
+
else alterTableIndices.set(op.name, [index]);
|
|
29
106
|
} else if (op.type === "add-foreign-key") {
|
|
30
107
|
if (!foreignKeysByTable.has(op.table)) foreignKeysByTable.set(op.table, []);
|
|
31
108
|
foreignKeysByTable.get(op.table).push(op);
|
|
32
109
|
} else result.push(op);
|
|
110
|
+
const extractCreateColumn = (tableName, columnName) => {
|
|
111
|
+
const indices = alterTableIndices.get(tableName);
|
|
112
|
+
if (!indices) return;
|
|
113
|
+
for (const index of indices) {
|
|
114
|
+
const operation = result[index];
|
|
115
|
+
if (!operation || operation.type !== "alter-table") continue;
|
|
116
|
+
let extracted;
|
|
117
|
+
const nextValue = operation.value.filter((columnOp) => {
|
|
118
|
+
if (columnOp.type === "create-column" && columnOp.value.name === columnName) {
|
|
119
|
+
extracted = columnOp.value;
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
if (extracted) {
|
|
125
|
+
result[index] = {
|
|
126
|
+
...operation,
|
|
127
|
+
value: nextValue
|
|
128
|
+
};
|
|
129
|
+
return extracted;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
33
133
|
for (const [tableName, fkOps] of foreignKeysByTable.entries()) {
|
|
34
134
|
const createTableIdx = createTableIndices.get(tableName);
|
|
35
135
|
if (createTableIdx !== void 0) {
|
|
36
|
-
|
|
136
|
+
let createOp = result[createTableIdx];
|
|
37
137
|
if (createOp.type === "create-table") {
|
|
38
|
-
const
|
|
138
|
+
const columnNames = new Set(createOp.columns.map((column) => column.name));
|
|
139
|
+
const missingColumns = /* @__PURE__ */ new Set();
|
|
140
|
+
for (const fkOp of fkOps) for (const columnName of fkOp.value.columns) if (!columnNames.has(columnName)) missingColumns.add(columnName);
|
|
141
|
+
if (missingColumns.size > 0) for (const columnName of Array.from(missingColumns)) {
|
|
142
|
+
const column = extractCreateColumn(tableName, columnName);
|
|
143
|
+
if (column) {
|
|
144
|
+
createOp = {
|
|
145
|
+
...createOp,
|
|
146
|
+
columns: [...createOp.columns, column]
|
|
147
|
+
};
|
|
148
|
+
result[createTableIdx] = createOp;
|
|
149
|
+
columnNames.add(columnName);
|
|
150
|
+
missingColumns.delete(columnName);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (missingColumns.size > 0) throw new Error(`SQLite FK preprocessing failed for "${tableName}": missing column(s) ${Array.from(missingColumns).join(", ")} required by foreign keys.`);
|
|
154
|
+
const existingInline = createOp.metadata?.inlineForeignKeys;
|
|
155
|
+
const metadata = {
|
|
156
|
+
...createOp.metadata,
|
|
157
|
+
inlineForeignKeys: [...existingInline ?? [], ...fkOps.map((fkOp) => fkOp.value)]
|
|
158
|
+
};
|
|
39
159
|
result[createTableIdx] = {
|
|
40
160
|
...createOp,
|
|
41
161
|
metadata
|
|
@@ -46,7 +166,10 @@ var SQLiteSQLGenerator = class extends SQLGenerator {
|
|
|
46
166
|
return [{
|
|
47
167
|
type: "custom",
|
|
48
168
|
sql: "PRAGMA defer_foreign_keys = ON"
|
|
49
|
-
}, ...result
|
|
169
|
+
}, ...result.filter((op) => {
|
|
170
|
+
if (op.type !== "alter-table") return true;
|
|
171
|
+
return op.value.length > 0;
|
|
172
|
+
})];
|
|
50
173
|
}
|
|
51
174
|
applyAutoIncrement(builder) {
|
|
52
175
|
return builder.autoIncrement();
|
|
@@ -55,40 +178,94 @@ var SQLiteSQLGenerator = class extends SQLGenerator {
|
|
|
55
178
|
const value = column.default;
|
|
56
179
|
if (!value) return;
|
|
57
180
|
if ("value" in value && value.value !== void 0) return sql.lit(value.value);
|
|
58
|
-
if ("dbSpecial" in value && value.dbSpecial === "now")
|
|
181
|
+
if ("dbSpecial" in value && value.dbSpecial === "now") {
|
|
182
|
+
if (this.typeMapper.getDatabaseType(column) === "integer" && (column.type === "timestamp" || column.type === "date")) return sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`;
|
|
183
|
+
return sql`CURRENT_TIMESTAMP`;
|
|
184
|
+
}
|
|
59
185
|
if ("runtime" in value) return;
|
|
60
186
|
}
|
|
61
187
|
/**
|
|
62
188
|
* Override create-table to add inline foreign keys from metadata.
|
|
63
189
|
*/
|
|
64
|
-
compileCreateTable(operation,
|
|
65
|
-
const tableName = this.getTableName(operation.name,
|
|
66
|
-
let builder = this.db.schema.createTable(tableName);
|
|
67
|
-
for (const col of operation.columns) builder = builder.addColumn(col.name, sql.raw(this.getDBType(col)), (b) => this.buildColumn(col, b));
|
|
190
|
+
compileCreateTable(operation, resolver) {
|
|
191
|
+
const tableName = this.getTableName(operation.name, resolver);
|
|
68
192
|
const metadata = operation.metadata;
|
|
69
|
-
|
|
70
|
-
return builder.compile();
|
|
193
|
+
return this.compileCreateTableForName(tableName, operation.name, operation.columns, metadata, resolver);
|
|
71
194
|
}
|
|
72
195
|
/**
|
|
73
196
|
* SQLite doesn't support adding foreign keys to existing tables.
|
|
74
197
|
*/
|
|
75
|
-
compileAddForeignKey(_operation,
|
|
198
|
+
compileAddForeignKey(_operation, _resolver) {
|
|
76
199
|
throw new Error(errors.SQLiteUpdateForeignKeys);
|
|
77
200
|
}
|
|
78
201
|
/**
|
|
79
202
|
* SQLite doesn't support dropping foreign keys.
|
|
80
203
|
*/
|
|
81
|
-
compileDropForeignKey(_operation,
|
|
204
|
+
compileDropForeignKey(_operation, _resolver) {
|
|
82
205
|
throw new Error(errors.SQLiteUpdateForeignKeys);
|
|
83
206
|
}
|
|
84
207
|
/**
|
|
85
|
-
* SQLite doesn't support updating columns.
|
|
208
|
+
* SQLite doesn't support updating columns directly. Use table recreation when metadata is provided.
|
|
86
209
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
210
|
+
compileAlterTable(operation, resolver) {
|
|
211
|
+
if (!operation.value.some((columnOp) => columnOp.type === "update-column")) return super.compileAlterTable(operation, resolver);
|
|
212
|
+
for (const columnOp of operation.value) {
|
|
213
|
+
if (columnOp.type !== "update-column") continue;
|
|
214
|
+
const col = columnOp.value;
|
|
215
|
+
if (col.role === "external-id" || col.role === "internal-id") throw new Error(errors.IdColumnUpdate);
|
|
216
|
+
}
|
|
217
|
+
const recreate = operation.metadata?.recreateTable;
|
|
218
|
+
if (!recreate) throw new Error(errors.SQLiteUpdateColumn);
|
|
219
|
+
const mergedRecreate = mergeRenameDropIntoRecreate(recreate, operation.value);
|
|
220
|
+
return this.compileRecreateTable(operation.name, mergedRecreate, resolver);
|
|
221
|
+
}
|
|
222
|
+
compileUpdateColumn(_tableName, _logicalTableName, _operation, _resolver) {
|
|
90
223
|
throw new Error(errors.SQLiteUpdateColumn);
|
|
91
224
|
}
|
|
225
|
+
compileRecreateTable(logicalTableName, recreate, resolver) {
|
|
226
|
+
const queries = [];
|
|
227
|
+
const tableName = this.getTableName(logicalTableName, resolver);
|
|
228
|
+
const tempTableName = `${tableName}__fragno_tmp_${createHash("md5").update(tableName).digest("hex").slice(0, 6)}`;
|
|
229
|
+
queries.push(this.compileRaw(sql.raw("PRAGMA foreign_keys = OFF")));
|
|
230
|
+
queries.push(this.compileCreateTableForName(tempTableName, logicalTableName, recreate.columns, { inlineForeignKeys: recreate.foreignKeys }, resolver));
|
|
231
|
+
const copyColumns = normalizeCopyColumns(recreate.copyColumns);
|
|
232
|
+
if (copyColumns.length > 0) {
|
|
233
|
+
const targetRefs = copyColumns.map((column) => sql.ref(this.getColumnName(column.to, logicalTableName, resolver)));
|
|
234
|
+
const sourceRefs = copyColumns.map((column) => sql.ref(this.getColumnName(column.from, logicalTableName, resolver)));
|
|
235
|
+
const targetList = sql.join(targetRefs);
|
|
236
|
+
const sourceList = sql.join(sourceRefs);
|
|
237
|
+
queries.push(sql`insert into ${sql.ref(tempTableName)} (${targetList}) select ${sourceList} from ${sql.ref(tableName)}`.compile(this.db));
|
|
238
|
+
}
|
|
239
|
+
queries.push(this.getSchemaBuilder(resolver).dropTable(tableName).compile());
|
|
240
|
+
queries.push(this.getSchemaBuilder(resolver).alterTable(tempTableName).renameTo(tableName).compile());
|
|
241
|
+
for (const index of recreate.indexes) {
|
|
242
|
+
const compiled = this.compileAddIndex({
|
|
243
|
+
type: "add-index",
|
|
244
|
+
table: logicalTableName,
|
|
245
|
+
name: index.name,
|
|
246
|
+
columns: index.columns,
|
|
247
|
+
unique: index.unique
|
|
248
|
+
}, resolver);
|
|
249
|
+
if (Array.isArray(compiled)) queries.push(...compiled);
|
|
250
|
+
else queries.push(compiled);
|
|
251
|
+
}
|
|
252
|
+
queries.push(this.compileRaw(sql.raw("PRAGMA foreign_keys = ON")));
|
|
253
|
+
return queries;
|
|
254
|
+
}
|
|
255
|
+
compileCreateTableForName(physicalTableName, logicalTableName, columns, metadata, resolver) {
|
|
256
|
+
let builder = this.getSchemaBuilder(resolver).createTable(physicalTableName);
|
|
257
|
+
for (const col of columns) {
|
|
258
|
+
const columnName = this.getColumnName(col.name, logicalTableName, resolver);
|
|
259
|
+
builder = builder.addColumn(columnName, sql.raw(this.getDBType(col)), (b) => this.buildColumn(col, b));
|
|
260
|
+
}
|
|
261
|
+
if (metadata?.inlineForeignKeys) for (const fk of metadata.inlineForeignKeys) builder = builder.addForeignKeyConstraint(this.getForeignKeyName(fk.name, logicalTableName, fk.referencedTable, resolver), fk.columns.map((columnName) => this.getColumnName(columnName, logicalTableName, resolver)), this.getTableName(fk.referencedTable, resolver), fk.referencedColumns.map((columnName) => this.getColumnName(columnName, fk.referencedTable, resolver)), (cb) => cb.onUpdate("restrict").onDelete("restrict"));
|
|
262
|
+
const compiled = builder.compile();
|
|
263
|
+
const sqlText = compiled.sql.replace(/\bconstraint\s+"[^"]+"\s+foreign key\b/gi, "foreign key");
|
|
264
|
+
return {
|
|
265
|
+
...compiled,
|
|
266
|
+
sql: sqlText
|
|
267
|
+
};
|
|
268
|
+
}
|
|
92
269
|
};
|
|
93
270
|
|
|
94
271
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","names":["result: MigrationOperation[]","metadata: SqliteCreateTableMetadata","builder: CreateTableBuilderAny"],"sources":["../../../../../src/adapters/generic-sql/migration/dialect/sqlite.ts"],"sourcesContent":["import { type ColumnDefinitionBuilder, type CompiledQuery, type RawBuilder, sql } from \"kysely\";\nimport type {\n ColumnInfo,\n ColumnOperation,\n ForeignKeyInfo,\n MigrationOperation,\n} from \"../../../../migration-engine/shared\";\nimport type { TableNameMapper } from \"../../../shared/table-name-mapper\";\nimport { SQLGenerator } from \"../sql-generator\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CreateTableBuilderAny = any;\n\n/**\n * Metadata attached to create-table operations for inline foreign keys.\n */\ninterface SqliteCreateTableMetadata {\n [key: string]: unknown;\n inlineForeignKeys?: ForeignKeyInfo[];\n}\n\nconst errors = {\n IdColumnUpdate:\n \"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.\",\n SQLiteUpdateColumn: \"SQLite doesn't support updating columns. Recreate the table instead.\",\n SQLiteUpdateForeignKeys:\n \"SQLite doesn't support modifying foreign keys directly. Use `recreate-table` instead.\",\n} as const;\n\n/**\n * SQLite-specific SQL generator.\n * Handles SQLite's limitations around foreign keys and column updates.\n */\nexport class SQLiteSQLGenerator extends SQLGenerator {\n /**\n * SQLite preprocessing: merge add-foreign-key operations into create-table operations\n * when both exist in the same batch, and add pragma for deferred foreign keys.\n *\n * SQLite requires foreign keys to be defined at table creation time.\n */\n override preprocess(operations: MigrationOperation[]): MigrationOperation[] {\n if (operations.length === 0) {\n return operations;\n }\n\n const result: MigrationOperation[] = [];\n const createTableIndices = new Map<string, number>();\n const foreignKeysByTable = new Map<\n string,\n Extract<MigrationOperation, { type: \"add-foreign-key\" }>[]\n >();\n\n // First pass: identify create-table operations and collect foreign keys\n for (const op of operations) {\n if (op.type === \"create-table\") {\n createTableIndices.set(op.name, result.length);\n result.push(op);\n } else if (op.type === \"add-foreign-key\") {\n if (!foreignKeysByTable.has(op.table)) {\n foreignKeysByTable.set(op.table, []);\n }\n foreignKeysByTable.get(op.table)!.push(op);\n } else {\n result.push(op);\n }\n }\n\n // Second pass: attach foreign keys as metadata to create-table ops\n for (const [tableName, fkOps] of foreignKeysByTable.entries()) {\n const createTableIdx = createTableIndices.get(tableName);\n\n if (createTableIdx !== undefined) {\n const createOp = result[createTableIdx];\n if (createOp.type === \"create-table\") {\n const metadata: SqliteCreateTableMetadata = {\n inlineForeignKeys: fkOps.map((fkOp) => fkOp.value),\n };\n result[createTableIdx] = {\n ...createOp,\n metadata,\n };\n }\n } else {\n // Table already exists - keep add-foreign-key operations (will throw error during compile)\n result.push(...fkOps);\n }\n }\n\n // Add pragma at the beginning for deferred foreign key checking\n return [{ type: \"custom\", sql: \"PRAGMA defer_foreign_keys = ON\" }, ...result];\n }\n\n override applyAutoIncrement(builder: ColumnDefinitionBuilder): ColumnDefinitionBuilder {\n return builder.autoIncrement();\n }\n\n override getDefaultValue(column: ColumnInfo): RawBuilder<unknown> | undefined {\n const value = column.default;\n if (!value) {\n return undefined;\n }\n\n if (\"value\" in value && value.value !== undefined) {\n return sql.lit(value.value);\n }\n\n if (\"dbSpecial\" in value && value.dbSpecial === \"now\") {\n return sql`CURRENT_TIMESTAMP`;\n }\n\n // Runtime defaults are handled in application code, not SQL\n if (\"runtime\" in value) {\n return undefined;\n }\n\n return undefined;\n }\n\n /**\n * Override create-table to add inline foreign keys from metadata.\n */\n protected override compileCreateTable(\n operation: Extract<MigrationOperation, { type: \"create-table\" }>,\n mapper?: TableNameMapper,\n ): CompiledQuery {\n const tableName = this.getTableName(operation.name, mapper);\n let builder: CreateTableBuilderAny = this.db.schema.createTable(tableName);\n\n // Add columns\n for (const col of operation.columns) {\n builder = builder.addColumn(\n col.name,\n sql.raw(this.getDBType(col)),\n (b: ColumnDefinitionBuilder) => this.buildColumn(col, b),\n );\n }\n\n // Add inline foreign keys from metadata\n const metadata = operation.metadata as SqliteCreateTableMetadata | undefined;\n if (metadata?.inlineForeignKeys) {\n for (const fk of metadata.inlineForeignKeys) {\n builder = builder.addForeignKeyConstraint(\n fk.name,\n fk.columns,\n this.getTableName(fk.referencedTable, mapper),\n fk.referencedColumns,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cb: any) => cb.onUpdate(\"restrict\").onDelete(\"restrict\"),\n );\n }\n }\n\n return builder.compile();\n }\n\n /**\n * SQLite doesn't support adding foreign keys to existing tables.\n */\n protected override compileAddForeignKey(\n _operation: Extract<MigrationOperation, { type: \"add-foreign-key\" }>,\n _mapper?: TableNameMapper,\n ): CompiledQuery {\n throw new Error(errors.SQLiteUpdateForeignKeys);\n }\n\n /**\n * SQLite doesn't support dropping foreign keys.\n */\n protected override compileDropForeignKey(\n _operation: Extract<MigrationOperation, { type: \"drop-foreign-key\" }>,\n _mapper?: TableNameMapper,\n ): CompiledQuery {\n throw new Error(errors.SQLiteUpdateForeignKeys);\n }\n\n /**\n * SQLite doesn't support updating columns.\n */\n protected override compileUpdateColumn(\n _tableName: string,\n operation: Extract<ColumnOperation, { type: \"update-column\" }>,\n ): CompiledQuery | CompiledQuery[] {\n const col = operation.value;\n if (col.role === \"external-id\" || col.role === \"internal-id\") {\n throw new Error(errors.IdColumnUpdate);\n }\n throw new Error(errors.SQLiteUpdateColumn);\n }\n}\n"],"mappings":";;;;AAqBA,MAAM,SAAS;CACb,gBACE;CACF,oBAAoB;CACpB,yBACE;CACH;;;;;AAMD,IAAa,qBAAb,cAAwC,aAAa;;;;;;;CAOnD,AAAS,WAAW,YAAwD;AAC1E,MAAI,WAAW,WAAW,EACxB,QAAO;EAGT,MAAMA,SAA+B,EAAE;EACvC,MAAM,qCAAqB,IAAI,KAAqB;EACpD,MAAM,qCAAqB,IAAI,KAG5B;AAGH,OAAK,MAAM,MAAM,WACf,KAAI,GAAG,SAAS,gBAAgB;AAC9B,sBAAmB,IAAI,GAAG,MAAM,OAAO,OAAO;AAC9C,UAAO,KAAK,GAAG;aACN,GAAG,SAAS,mBAAmB;AACxC,OAAI,CAAC,mBAAmB,IAAI,GAAG,MAAM,CACnC,oBAAmB,IAAI,GAAG,OAAO,EAAE,CAAC;AAEtC,sBAAmB,IAAI,GAAG,MAAM,CAAE,KAAK,GAAG;QAE1C,QAAO,KAAK,GAAG;AAKnB,OAAK,MAAM,CAAC,WAAW,UAAU,mBAAmB,SAAS,EAAE;GAC7D,MAAM,iBAAiB,mBAAmB,IAAI,UAAU;AAExD,OAAI,mBAAmB,QAAW;IAChC,MAAM,WAAW,OAAO;AACxB,QAAI,SAAS,SAAS,gBAAgB;KACpC,MAAMC,WAAsC,EAC1C,mBAAmB,MAAM,KAAK,SAAS,KAAK,MAAM,EACnD;AACD,YAAO,kBAAkB;MACvB,GAAG;MACH;MACD;;SAIH,QAAO,KAAK,GAAG,MAAM;;AAKzB,SAAO,CAAC;GAAE,MAAM;GAAU,KAAK;GAAkC,EAAE,GAAG,OAAO;;CAG/E,AAAS,mBAAmB,SAA2D;AACrF,SAAO,QAAQ,eAAe;;CAGhC,AAAS,gBAAgB,QAAqD;EAC5E,MAAM,QAAQ,OAAO;AACrB,MAAI,CAAC,MACH;AAGF,MAAI,WAAW,SAAS,MAAM,UAAU,OACtC,QAAO,IAAI,IAAI,MAAM,MAAM;AAG7B,MAAI,eAAe,SAAS,MAAM,cAAc,MAC9C,QAAO,GAAG;AAIZ,MAAI,aAAa,MACf;;;;;CASJ,AAAmB,mBACjB,WACA,QACe;EACf,MAAM,YAAY,KAAK,aAAa,UAAU,MAAM,OAAO;EAC3D,IAAIC,UAAiC,KAAK,GAAG,OAAO,YAAY,UAAU;AAG1E,OAAK,MAAM,OAAO,UAAU,QAC1B,WAAU,QAAQ,UAChB,IAAI,MACJ,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,GAC3B,MAA+B,KAAK,YAAY,KAAK,EAAE,CACzD;EAIH,MAAM,WAAW,UAAU;AAC3B,MAAI,UAAU,kBACZ,MAAK,MAAM,MAAM,SAAS,kBACxB,WAAU,QAAQ,wBAChB,GAAG,MACH,GAAG,SACH,KAAK,aAAa,GAAG,iBAAiB,OAAO,EAC7C,GAAG,oBAEF,OAAY,GAAG,SAAS,WAAW,CAAC,SAAS,WAAW,CAC1D;AAIL,SAAO,QAAQ,SAAS;;;;;CAM1B,AAAmB,qBACjB,YACA,SACe;AACf,QAAM,IAAI,MAAM,OAAO,wBAAwB;;;;;CAMjD,AAAmB,sBACjB,YACA,SACe;AACf,QAAM,IAAI,MAAM,OAAO,wBAAwB;;;;;CAMjD,AAAmB,oBACjB,YACA,WACiC;EACjC,MAAM,MAAM,UAAU;AACtB,MAAI,IAAI,SAAS,iBAAiB,IAAI,SAAS,cAC7C,OAAM,IAAI,MAAM,OAAO,eAAe;AAExC,QAAM,IAAI,MAAM,OAAO,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"sqlite.js","names":["next: SqliteRecreateIndex[]","next: SqliteRecreateForeignKey[]","result: MigrationOperation[]","extracted: ColumnInfo | undefined","metadata: SqliteCreateTableMetadata","queries: CompiledQuery[]","builder: CreateTableBuilderAny"],"sources":["../../../../../src/adapters/generic-sql/migration/dialect/sqlite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { type ColumnDefinitionBuilder, type CompiledQuery, type RawBuilder, sql } from \"kysely\";\n\nimport type {\n ColumnInfo,\n ColumnOperation,\n MigrationOperation,\n SqliteAlterTableMetadata,\n SqliteCopyColumn,\n SqliteCreateTableMetadata,\n} from \"../../../../migration-engine/shared\";\nimport type { NamingResolver } from \"../../../../naming/sql-naming\";\nimport { SQLGenerator } from \"../sql-generator\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CreateTableBuilderAny = any;\n\nconst errors = {\n IdColumnUpdate:\n \"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.\",\n SQLiteUpdateColumn: \"SQLite doesn't support updating columns. Recreate the table instead.\",\n SQLiteUpdateForeignKeys:\n \"SQLite doesn't support modifying foreign keys directly. Use `recreate-table` instead.\",\n} as const;\n\ntype RenameOrDropColumnOperation = Extract<\n ColumnOperation,\n { type: \"rename-column\" } | { type: \"drop-column\" }\n>;\n\ntype CopyColumnMapping = { from: string; to: string };\ntype SqliteRecreateTable = NonNullable<SqliteAlterTableMetadata[\"recreateTable\"]>;\ntype SqliteRecreateIndex = SqliteRecreateTable[\"indexes\"][number];\ntype SqliteRecreateForeignKey = SqliteRecreateTable[\"foreignKeys\"][number];\n\nfunction normalizeCopyColumns(copyColumns: SqliteCopyColumn[]): CopyColumnMapping[] {\n return copyColumns.map((column) =>\n typeof column === \"string\"\n ? { from: column, to: column }\n : { from: column.from, to: column.to },\n );\n}\n\nfunction applyRenameDropToColumns(\n columns: ColumnInfo[],\n operations: RenameOrDropColumnOperation[],\n): ColumnInfo[] {\n let next = columns.map((column) => ({ ...column }));\n\n for (const op of operations) {\n if (op.type === \"rename-column\") {\n const column = next.find((col) => col.name === op.from);\n if (column) {\n column.name = op.to;\n }\n } else if (op.type === \"drop-column\") {\n next = next.filter((column) => column.name !== op.name);\n }\n }\n\n return next;\n}\n\nfunction applyRenameDropToCopyColumns(\n copyColumns: CopyColumnMapping[],\n operations: RenameOrDropColumnOperation[],\n): CopyColumnMapping[] {\n let next = copyColumns.map((column) => ({ ...column }));\n\n for (const op of operations) {\n if (op.type === \"rename-column\") {\n for (const mapping of next) {\n if (mapping.to === op.from) {\n mapping.to = op.to;\n }\n }\n } else if (op.type === \"drop-column\") {\n next = next.filter((mapping) => mapping.to !== op.name);\n }\n }\n\n return next;\n}\n\nfunction applyRenameDropToIndexes(\n indexes: SqliteRecreateIndex[],\n operations: RenameOrDropColumnOperation[],\n): SqliteRecreateIndex[] {\n const next: SqliteRecreateIndex[] = [];\n\n for (const index of indexes) {\n let columns = [...index.columns];\n let dropped = false;\n\n for (const op of operations) {\n if (op.type === \"rename-column\") {\n columns = columns.map((column) => (column === op.from ? op.to : column));\n } else if (columns.includes(op.name)) {\n dropped = true;\n break;\n }\n }\n\n if (!dropped) {\n next.push({ ...index, columns });\n }\n }\n\n return next;\n}\n\nfunction applyRenameDropToForeignKeys(\n foreignKeys: SqliteRecreateForeignKey[],\n operations: RenameOrDropColumnOperation[],\n): SqliteRecreateForeignKey[] {\n const next: SqliteRecreateForeignKey[] = [];\n\n for (const foreignKey of foreignKeys) {\n let columns = [...foreignKey.columns];\n let dropped = false;\n\n for (const op of operations) {\n if (op.type === \"rename-column\") {\n columns = columns.map((column) => (column === op.from ? op.to : column));\n } else if (columns.includes(op.name)) {\n dropped = true;\n break;\n }\n }\n\n if (!dropped) {\n next.push({\n ...foreignKey,\n columns,\n });\n }\n }\n\n return next;\n}\n\nfunction mergeRenameDropIntoRecreate(\n recreate: SqliteRecreateTable,\n operations: ColumnOperation[],\n): SqliteRecreateTable {\n const renameDropOps = operations.filter(\n (op): op is RenameOrDropColumnOperation =>\n op.type === \"rename-column\" || op.type === \"drop-column\",\n );\n\n if (renameDropOps.length === 0) {\n return recreate;\n }\n\n return {\n ...recreate,\n columns: applyRenameDropToColumns(recreate.columns, renameDropOps),\n copyColumns: applyRenameDropToCopyColumns(\n normalizeCopyColumns(recreate.copyColumns),\n renameDropOps,\n ),\n indexes: applyRenameDropToIndexes(recreate.indexes, renameDropOps),\n foreignKeys: applyRenameDropToForeignKeys(recreate.foreignKeys, renameDropOps),\n };\n}\n\n/**\n * SQLite-specific SQL generator.\n * Handles SQLite's limitations around foreign keys and column updates.\n */\nexport class SQLiteSQLGenerator extends SQLGenerator {\n /**\n * SQLite preprocessing: merge add-foreign-key operations into create-table operations\n * when both exist in the same batch, and add pragma for deferred foreign keys.\n *\n * SQLite requires foreign keys to be defined at table creation time.\n */\n override preprocess(operations: MigrationOperation[]): MigrationOperation[] {\n if (operations.length === 0) {\n return operations;\n }\n\n const result: MigrationOperation[] = [];\n const createTableIndices = new Map<string, number>();\n const alterTableIndices = new Map<string, number[]>();\n const foreignKeysByTable = new Map<\n string,\n Extract<MigrationOperation, { type: \"add-foreign-key\" }>[]\n >();\n\n // First pass: identify create-table operations and collect foreign keys\n for (const op of operations) {\n if (op.type === \"create-table\") {\n createTableIndices.set(op.name, result.length);\n result.push(op);\n } else if (op.type === \"alter-table\") {\n const index = result.length;\n result.push(op);\n const existing = alterTableIndices.get(op.name);\n if (existing) {\n existing.push(index);\n } else {\n alterTableIndices.set(op.name, [index]);\n }\n } else if (op.type === \"add-foreign-key\") {\n if (!foreignKeysByTable.has(op.table)) {\n foreignKeysByTable.set(op.table, []);\n }\n foreignKeysByTable.get(op.table)!.push(op);\n } else {\n result.push(op);\n }\n }\n\n const extractCreateColumn = (tableName: string, columnName: string): ColumnInfo | undefined => {\n const indices = alterTableIndices.get(tableName);\n if (!indices) {\n return undefined;\n }\n\n for (const index of indices) {\n const operation = result[index];\n if (!operation || operation.type !== \"alter-table\") {\n continue;\n }\n\n let extracted: ColumnInfo | undefined;\n const nextValue = operation.value.filter((columnOp) => {\n if (columnOp.type === \"create-column\" && columnOp.value.name === columnName) {\n extracted = columnOp.value;\n return false;\n }\n return true;\n });\n\n if (extracted) {\n result[index] = { ...operation, value: nextValue };\n return extracted;\n }\n }\n\n return undefined;\n };\n\n // Second pass: attach foreign keys as metadata to create-table ops\n for (const [tableName, fkOps] of foreignKeysByTable.entries()) {\n const createTableIdx = createTableIndices.get(tableName);\n\n if (createTableIdx !== undefined) {\n let createOp = result[createTableIdx];\n if (createOp.type === \"create-table\") {\n const columnNames = new Set(createOp.columns.map((column) => column.name));\n const missingColumns = new Set<string>();\n\n for (const fkOp of fkOps) {\n for (const columnName of fkOp.value.columns) {\n if (!columnNames.has(columnName)) {\n missingColumns.add(columnName);\n }\n }\n }\n\n if (missingColumns.size > 0) {\n for (const columnName of Array.from(missingColumns)) {\n const column = extractCreateColumn(tableName, columnName);\n if (column) {\n createOp = { ...createOp, columns: [...createOp.columns, column] };\n result[createTableIdx] = createOp;\n columnNames.add(columnName);\n missingColumns.delete(columnName);\n }\n }\n }\n\n if (missingColumns.size > 0) {\n throw new Error(\n `SQLite FK preprocessing failed for \"${tableName}\": missing column(s) ${Array.from(\n missingColumns,\n ).join(\", \")} required by foreign keys.`,\n );\n }\n\n const existingInline = (createOp.metadata as SqliteCreateTableMetadata | undefined)\n ?.inlineForeignKeys;\n const metadata: SqliteCreateTableMetadata = {\n ...createOp.metadata,\n inlineForeignKeys: [...(existingInline ?? []), ...fkOps.map((fkOp) => fkOp.value)],\n };\n result[createTableIdx] = { ...createOp, metadata };\n }\n } else {\n // Table already exists - keep add-foreign-key operations (will throw error during compile)\n result.push(...fkOps);\n }\n }\n\n // Add pragma at the beginning for deferred foreign key checking\n const pruned = result.filter((op) => {\n if (op.type !== \"alter-table\") {\n return true;\n }\n return op.value.length > 0;\n });\n return [{ type: \"custom\", sql: \"PRAGMA defer_foreign_keys = ON\" }, ...pruned];\n }\n\n override applyAutoIncrement(builder: ColumnDefinitionBuilder): ColumnDefinitionBuilder {\n return builder.autoIncrement();\n }\n\n override getDefaultValue(column: ColumnInfo): RawBuilder<unknown> | undefined {\n const value = column.default;\n if (!value) {\n return undefined;\n }\n\n if (\"value\" in value && value.value !== undefined) {\n return sql.lit(value.value);\n }\n\n if (\"dbSpecial\" in value && value.dbSpecial === \"now\") {\n const dbType = this.typeMapper.getDatabaseType(column);\n if (dbType === \"integer\" && (column.type === \"timestamp\" || column.type === \"date\")) {\n return sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`;\n }\n return sql`CURRENT_TIMESTAMP`;\n }\n\n // Runtime defaults are handled in application code, not SQL\n if (\"runtime\" in value) {\n return undefined;\n }\n\n return undefined;\n }\n\n /**\n * Override create-table to add inline foreign keys from metadata.\n */\n protected override compileCreateTable(\n operation: Extract<MigrationOperation, { type: \"create-table\" }>,\n resolver?: NamingResolver,\n ): CompiledQuery {\n const tableName = this.getTableName(operation.name, resolver);\n const metadata = operation.metadata as SqliteCreateTableMetadata | undefined;\n return this.compileCreateTableForName(\n tableName,\n operation.name,\n operation.columns,\n metadata,\n resolver,\n );\n }\n\n /**\n * SQLite doesn't support adding foreign keys to existing tables.\n */\n protected override compileAddForeignKey(\n _operation: Extract<MigrationOperation, { type: \"add-foreign-key\" }>,\n _resolver?: NamingResolver,\n ): CompiledQuery {\n throw new Error(errors.SQLiteUpdateForeignKeys);\n }\n\n /**\n * SQLite doesn't support dropping foreign keys.\n */\n protected override compileDropForeignKey(\n _operation: Extract<MigrationOperation, { type: \"drop-foreign-key\" }>,\n _resolver?: NamingResolver,\n ): CompiledQuery {\n throw new Error(errors.SQLiteUpdateForeignKeys);\n }\n\n /**\n * SQLite doesn't support updating columns directly. Use table recreation when metadata is provided.\n */\n protected override compileAlterTable(\n operation: Extract<MigrationOperation, { type: \"alter-table\" }>,\n resolver?: NamingResolver,\n ): CompiledQuery[] {\n const hasUpdateColumn = operation.value.some((columnOp) => columnOp.type === \"update-column\");\n\n if (!hasUpdateColumn) {\n return super.compileAlterTable(operation, resolver);\n }\n\n for (const columnOp of operation.value) {\n if (columnOp.type !== \"update-column\") {\n continue;\n }\n const col = columnOp.value;\n if (col.role === \"external-id\" || col.role === \"internal-id\") {\n throw new Error(errors.IdColumnUpdate);\n }\n }\n\n const metadata = operation.metadata as SqliteAlterTableMetadata | undefined;\n const recreate = metadata?.recreateTable;\n if (!recreate) {\n throw new Error(errors.SQLiteUpdateColumn);\n }\n\n const mergedRecreate = mergeRenameDropIntoRecreate(recreate, operation.value);\n return this.compileRecreateTable(operation.name, mergedRecreate, resolver);\n }\n\n protected override compileUpdateColumn(\n _tableName: string,\n _logicalTableName: string,\n _operation: Extract<ColumnOperation, { type: \"update-column\" }>,\n _resolver?: NamingResolver,\n ): CompiledQuery | CompiledQuery[] {\n throw new Error(errors.SQLiteUpdateColumn);\n }\n\n private compileRecreateTable(\n logicalTableName: string,\n recreate: NonNullable<SqliteAlterTableMetadata[\"recreateTable\"]>,\n resolver?: NamingResolver,\n ): CompiledQuery[] {\n const queries: CompiledQuery[] = [];\n const tableName = this.getTableName(logicalTableName, resolver);\n const tempTableName = `${tableName}__fragno_tmp_${createHash(\"md5\")\n .update(tableName)\n .digest(\"hex\")\n .slice(0, 6)}`;\n\n queries.push(this.compileRaw(sql.raw(\"PRAGMA foreign_keys = OFF\")));\n\n queries.push(\n this.compileCreateTableForName(\n tempTableName,\n logicalTableName,\n recreate.columns,\n {\n inlineForeignKeys: recreate.foreignKeys,\n },\n resolver,\n ),\n );\n\n const copyColumns = normalizeCopyColumns(recreate.copyColumns);\n if (copyColumns.length > 0) {\n const targetRefs = copyColumns.map((column) =>\n sql.ref(this.getColumnName(column.to, logicalTableName, resolver)),\n );\n const sourceRefs = copyColumns.map((column) =>\n sql.ref(this.getColumnName(column.from, logicalTableName, resolver)),\n );\n const targetList = sql.join(targetRefs);\n const sourceList = sql.join(sourceRefs);\n queries.push(\n sql`insert into ${sql.ref(tempTableName)} (${targetList}) select ${sourceList} from ${sql.ref(\n tableName,\n )}`.compile(this.db),\n );\n }\n\n queries.push(this.getSchemaBuilder(resolver).dropTable(tableName).compile());\n queries.push(\n this.getSchemaBuilder(resolver).alterTable(tempTableName).renameTo(tableName).compile(),\n );\n\n for (const index of recreate.indexes) {\n const compiled = this.compileAddIndex(\n {\n type: \"add-index\",\n table: logicalTableName,\n name: index.name,\n columns: index.columns,\n unique: index.unique,\n },\n resolver,\n );\n if (Array.isArray(compiled)) {\n queries.push(...compiled);\n } else {\n queries.push(compiled);\n }\n }\n\n queries.push(this.compileRaw(sql.raw(\"PRAGMA foreign_keys = ON\")));\n\n return queries;\n }\n\n private compileCreateTableForName(\n physicalTableName: string,\n logicalTableName: string,\n columns: ColumnInfo[],\n metadata: SqliteCreateTableMetadata | undefined,\n resolver?: NamingResolver,\n ): CompiledQuery {\n let builder: CreateTableBuilderAny =\n this.getSchemaBuilder(resolver).createTable(physicalTableName);\n\n for (const col of columns) {\n const columnName = this.getColumnName(col.name, logicalTableName, resolver);\n builder = builder.addColumn(\n columnName,\n sql.raw(this.getDBType(col)),\n (b: ColumnDefinitionBuilder) => this.buildColumn(col, b),\n );\n }\n\n if (metadata?.inlineForeignKeys) {\n for (const fk of metadata.inlineForeignKeys) {\n builder = builder.addForeignKeyConstraint(\n this.getForeignKeyName(fk.name, logicalTableName, fk.referencedTable, resolver),\n fk.columns.map((columnName) =>\n this.getColumnName(columnName, logicalTableName, resolver),\n ),\n this.getTableName(fk.referencedTable, resolver),\n fk.referencedColumns.map((columnName) =>\n this.getColumnName(columnName, fk.referencedTable, resolver),\n ),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cb: any) => cb.onUpdate(\"restrict\").onDelete(\"restrict\"),\n );\n }\n }\n\n const compiled = builder.compile();\n const sqlText = compiled.sql.replace(/\\bconstraint\\s+\"[^\"]+\"\\s+foreign key\\b/gi, \"foreign key\");\n return {\n ...compiled,\n sql: sqlText,\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","names":[],"sources":["../../../../src/adapters/generic-sql/migration/executor.ts"],"sourcesContent":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","names":[],"sources":["../../../../src/adapters/generic-sql/migration/executor.ts"],"sourcesContent":[],"mappings":";;;;;AAOA;;UAAiB,iBAAA;cACH"}
|
|
@@ -8,9 +8,36 @@
|
|
|
8
8
|
*/
|
|
9
9
|
async function executeMigration(driver, migration) {
|
|
10
10
|
if (migration.statements.length === 0) return;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const isForeignKeysOff = (statement) => /^\s*pragma\s+foreign_keys\s*=\s*off\s*;?\s*$/i.test(statement.sql.trim());
|
|
12
|
+
const isForeignKeysOn = (statement) => /^\s*pragma\s+foreign_keys\s*=\s*on\s*;?\s*$/i.test(statement.sql.trim());
|
|
13
|
+
const preStatements = [];
|
|
14
|
+
const postStatements = [];
|
|
15
|
+
const transactionalStatements = [];
|
|
16
|
+
for (const statement of migration.statements) {
|
|
17
|
+
if (isForeignKeysOff(statement)) {
|
|
18
|
+
preStatements.push(statement);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (isForeignKeysOn(statement)) {
|
|
22
|
+
postStatements.push(statement);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
transactionalStatements.push(statement);
|
|
26
|
+
}
|
|
27
|
+
if (preStatements.length === 0 && postStatements.length === 0) {
|
|
28
|
+
await driver.transaction(async (tx) => {
|
|
29
|
+
for (const statement of migration.statements) await tx.executeQuery(statement);
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const statement of preStatements) await driver.executeQuery(statement);
|
|
34
|
+
try {
|
|
35
|
+
if (transactionalStatements.length > 0) await driver.transaction(async (tx) => {
|
|
36
|
+
for (const statement of transactionalStatements) await tx.executeQuery(statement);
|
|
37
|
+
});
|
|
38
|
+
} finally {
|
|
39
|
+
for (const statement of postStatements) await driver.executeQuery(statement);
|
|
40
|
+
}
|
|
14
41
|
}
|
|
15
42
|
|
|
16
43
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","names":[],"sources":["../../../../src/adapters/generic-sql/migration/executor.ts"],"sourcesContent":["import type { CompiledQuery } from \"kysely\";\nimport type { SqlDriverAdapter } from \"../../../sql-driver/sql-driver-adapter\";\n\n/**\n * Compiled migration containing all SQL statements to execute.\n */\nexport interface CompiledMigration {\n statements: CompiledQuery[];\n fromVersion: number;\n toVersion: number;\n}\n\n/**\n * Execute a compiled migration using the provided driver adapter.\n * All statements are executed within a single transaction.\n *\n * @param driver - The SQL driver adapter to execute queries\n * @param migration - The compiled migration containing SQL statements\n */\nexport async function executeMigration(\n driver: SqlDriverAdapter,\n migration: CompiledMigration,\n): Promise<void> {\n if (migration.statements.length === 0) {\n return;\n }\n\n await driver.transaction(async (tx) => {\n
|
|
1
|
+
{"version":3,"file":"executor.js","names":["preStatements: CompiledQuery[]","postStatements: CompiledQuery[]","transactionalStatements: CompiledQuery[]"],"sources":["../../../../src/adapters/generic-sql/migration/executor.ts"],"sourcesContent":["import type { CompiledQuery } from \"kysely\";\n\nimport type { SqlDriverAdapter } from \"../../../sql-driver/sql-driver-adapter\";\n\n/**\n * Compiled migration containing all SQL statements to execute.\n */\nexport interface CompiledMigration {\n statements: CompiledQuery[];\n fromVersion: number;\n toVersion: number;\n}\n\n/**\n * Execute a compiled migration using the provided driver adapter.\n * All statements are executed within a single transaction.\n *\n * @param driver - The SQL driver adapter to execute queries\n * @param migration - The compiled migration containing SQL statements\n */\nexport async function executeMigration(\n driver: SqlDriverAdapter,\n migration: CompiledMigration,\n): Promise<void> {\n if (migration.statements.length === 0) {\n return;\n }\n\n const isForeignKeysOff = (statement: CompiledQuery) =>\n /^\\s*pragma\\s+foreign_keys\\s*=\\s*off\\s*;?\\s*$/i.test(statement.sql.trim());\n const isForeignKeysOn = (statement: CompiledQuery) =>\n /^\\s*pragma\\s+foreign_keys\\s*=\\s*on\\s*;?\\s*$/i.test(statement.sql.trim());\n\n const preStatements: CompiledQuery[] = [];\n const postStatements: CompiledQuery[] = [];\n const transactionalStatements: CompiledQuery[] = [];\n\n for (const statement of migration.statements) {\n if (isForeignKeysOff(statement)) {\n preStatements.push(statement);\n continue;\n }\n if (isForeignKeysOn(statement)) {\n postStatements.push(statement);\n continue;\n }\n transactionalStatements.push(statement);\n }\n\n if (preStatements.length === 0 && postStatements.length === 0) {\n await driver.transaction(async (tx) => {\n for (const statement of migration.statements) {\n await tx.executeQuery(statement);\n }\n });\n return;\n }\n\n for (const statement of preStatements) {\n await driver.executeQuery(statement);\n }\n\n try {\n if (transactionalStatements.length > 0) {\n await driver.transaction(async (tx) => {\n for (const statement of transactionalStatements) {\n await tx.executeQuery(statement);\n }\n });\n }\n } finally {\n for (const statement of postStatements) {\n await driver.executeQuery(statement);\n }\n }\n}\n"],"mappings":";;;;;;;;AAoBA,eAAsB,iBACpB,QACA,WACe;AACf,KAAI,UAAU,WAAW,WAAW,EAClC;CAGF,MAAM,oBAAoB,cACxB,gDAAgD,KAAK,UAAU,IAAI,MAAM,CAAC;CAC5E,MAAM,mBAAmB,cACvB,+CAA+C,KAAK,UAAU,IAAI,MAAM,CAAC;CAE3E,MAAMA,gBAAiC,EAAE;CACzC,MAAMC,iBAAkC,EAAE;CAC1C,MAAMC,0BAA2C,EAAE;AAEnD,MAAK,MAAM,aAAa,UAAU,YAAY;AAC5C,MAAI,iBAAiB,UAAU,EAAE;AAC/B,iBAAc,KAAK,UAAU;AAC7B;;AAEF,MAAI,gBAAgB,UAAU,EAAE;AAC9B,kBAAe,KAAK,UAAU;AAC9B;;AAEF,0BAAwB,KAAK,UAAU;;AAGzC,KAAI,cAAc,WAAW,KAAK,eAAe,WAAW,GAAG;AAC7D,QAAM,OAAO,YAAY,OAAO,OAAO;AACrC,QAAK,MAAM,aAAa,UAAU,WAChC,OAAM,GAAG,aAAa,UAAU;IAElC;AACF;;AAGF,MAAK,MAAM,aAAa,cACtB,OAAM,OAAO,aAAa,UAAU;AAGtC,KAAI;AACF,MAAI,wBAAwB,SAAS,EACnC,OAAM,OAAO,YAAY,OAAO,OAAO;AACrC,QAAK,MAAM,aAAa,wBACtB,OAAM,GAAG,aAAa,UAAU;IAElC;WAEI;AACR,OAAK,MAAM,aAAa,eACtB,OAAM,OAAO,aAAa,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-migrations.d.ts","names":[],"sources":["../../../../src/adapters/generic-sql/migration/prepared-migrations.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepared-migrations.d.ts","names":[],"sources":["../../../../src/adapters/generic-sql/migration/prepared-migrations.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAwDc,UAvCG,cAAA,CAuCH;EACT;;;;EAsB0F,wBAAA,CAAA,EAAA,OAAA;;;;;;UAlD9E,kBAAA;;;;;;;;;;;;6DAY4C,iBAAiB;;;;;;;;;;4BAYlE,qEAGE,iBACT;;;;;;;;;;4DAWuD;;;;;;;;;;6DAWC,iBAAiB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { generateMigrationFromSchema } from "../../../migration-engine/auto-from-schema.js";
|
|
2
2
|
import { createColdKysely } from "./cold-kysely.js";
|
|
3
3
|
import "./sql-generator.js";
|
|
4
|
-
import { SQLiteSQLGenerator } from "./dialect/sqlite.js";
|
|
5
|
-
import { PostgresSQLGenerator } from "./dialect/postgres.js";
|
|
6
4
|
import { MySQLSQLGenerator } from "./dialect/mysql.js";
|
|
5
|
+
import { PostgresSQLGenerator } from "./dialect/postgres.js";
|
|
6
|
+
import { SQLiteSQLGenerator } from "./dialect/sqlite.js";
|
|
7
7
|
import { executeMigration } from "./executor.js";
|
|
8
8
|
|
|
9
9
|
//#region src/adapters/generic-sql/migration/prepared-migrations.ts
|
|
@@ -11,8 +11,8 @@ import { executeMigration } from "./executor.js";
|
|
|
11
11
|
* Create a PreparedMigrations instance for a schema and namespace.
|
|
12
12
|
*/
|
|
13
13
|
function createPreparedMigrations(config) {
|
|
14
|
-
const { schema, namespace, database, driver, updateVersionInMigration: defaultUpdateVersion = true } = config;
|
|
15
|
-
const generator = createSQLGenerator(database, createColdKysely(database));
|
|
14
|
+
const { schema, namespace, database, driverConfig, sqliteStorageMode, driver, updateVersionInMigration: defaultUpdateVersion = true } = config;
|
|
15
|
+
const generator = createSQLGenerator(database, createColdKysely(database), driverConfig, sqliteStorageMode);
|
|
16
16
|
/**
|
|
17
17
|
* Internal method to compile a migration for a given version range.
|
|
18
18
|
*/
|
|
@@ -22,7 +22,7 @@ function createPreparedMigrations(config) {
|
|
|
22
22
|
if (toVersion < fromVersion) throw new Error(`Cannot migrate backwards: fromVersion (${fromVersion}) > toVersion (${toVersion})`);
|
|
23
23
|
if (toVersion > schema.version) throw new Error(`toVersion (${toVersion}) exceeds schema version (${schema.version})`);
|
|
24
24
|
const operations = generateMigrationFromSchema(schema, fromVersion, toVersion);
|
|
25
|
-
const statements = generator.compile(operations, config.
|
|
25
|
+
const statements = generator.compile(operations, config.resolver);
|
|
26
26
|
if (updateVersionInMigration && toVersion !== fromVersion) {
|
|
27
27
|
const versionUpdate = generator.generateVersionUpdateSQL(namespace, fromVersion, toVersion);
|
|
28
28
|
statements.push(versionUpdate);
|
|
@@ -55,11 +55,11 @@ function createPreparedMigrations(config) {
|
|
|
55
55
|
/**
|
|
56
56
|
* Create the appropriate SQL generator for a database type.
|
|
57
57
|
*/
|
|
58
|
-
function createSQLGenerator(database, coldKysely) {
|
|
58
|
+
function createSQLGenerator(database, coldKysely, driverConfig, sqliteStorageMode) {
|
|
59
59
|
switch (database) {
|
|
60
|
-
case "sqlite": return new SQLiteSQLGenerator(coldKysely, database);
|
|
61
|
-
case "postgresql": return new PostgresSQLGenerator(coldKysely, database);
|
|
62
|
-
case "mysql": return new MySQLSQLGenerator(coldKysely, database);
|
|
60
|
+
case "sqlite": return new SQLiteSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);
|
|
61
|
+
case "postgresql": return new PostgresSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);
|
|
62
|
+
case "mysql": return new MySQLSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-migrations.js","names":[],"sources":["../../../../src/adapters/generic-sql/migration/prepared-migrations.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"prepared-migrations.js","names":[],"sources":["../../../../src/adapters/generic-sql/migration/prepared-migrations.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport { generateMigrationFromSchema } from \"../../../migration-engine/auto-from-schema\";\nimport type { NamingResolver } from \"../../../naming/sql-naming\";\nimport type { AnySchema } from \"../../../schema/create\";\nimport type { SqlDriverAdapter } from \"../../../sql-driver/sql-driver-adapter\";\nimport type { DriverConfig, SupportedDatabase } from \"../driver-config\";\nimport type { SQLiteStorageMode } from \"../sqlite-storage\";\nimport { createColdKysely } from \"./cold-kysely\";\nimport { MySQLSQLGenerator } from \"./dialect/mysql\";\nimport { PostgresSQLGenerator } from \"./dialect/postgres\";\nimport { SQLiteSQLGenerator } from \"./dialect/sqlite\";\nimport { executeMigration, type CompiledMigration } from \"./executor\";\nimport { type SQLGenerator } from \"./sql-generator\";\n/**\n * Options for executing a migration.\n */\nexport interface ExecuteOptions {\n /**\n * Whether to automatically update the schema version in the database after migration.\n * If not specified, uses the value from PreparedMigrationsConfig.\n */\n updateVersionInMigration?: boolean;\n}\n\n/**\n * Interface for preparing and executing migrations.\n * Provides a clean separation between compilation (SQL generation) and execution.\n */\nexport interface PreparedMigrations {\n /**\n * Execute migration from one version to another.\n * This performs all three phases:\n * - Phase 1: schema → operations\n * - Phase 2: operations → SQL\n * - Phase 3: SQL → database\n *\n * @param fromVersion - Current database version (0 for new database)\n * @param toVersion - Target schema version (defaults to schema.version)\n * @param options - Optional execution options (overrides config defaults)\n */\n execute(fromVersion: number, toVersion?: number, options?: ExecuteOptions): Promise<void>;\n\n /**\n * Execute migration using a specific driver.\n * Useful for testing or when you need to use a different driver than the one provided in config.\n *\n * @param driver - SQL driver to use for execution\n * @param fromVersion - Current database version (0 for new database)\n * @param toVersion - Target schema version (defaults to schema.version)\n * @param options - Optional execution options (overrides config defaults)\n */\n executeWithDriver(\n driver: SqlDriverAdapter,\n fromVersion: number,\n toVersion?: number,\n options?: ExecuteOptions,\n ): Promise<void>;\n\n /**\n * Get the SQL for a migration from one version to another without executing it.\n * Useful for generating migration files or previewing changes.\n *\n * @param fromVersion - Current database version (0 for new database)\n * @param toVersion - Target schema version (defaults to schema.version)\n * @param options - Optional execution options (affects version update SQL)\n * @returns SQL string for the migration\n */\n getSQL(fromVersion: number, toVersion?: number, options?: ExecuteOptions): string;\n\n /**\n * Get the compiled migration for a version range.\n * Returns both the SQL statements and the version information.\n *\n * @param fromVersion - Current database version (0 for new database)\n * @param toVersion - Target schema version (defaults to schema.version)\n * @param options - Optional execution options (affects version update SQL)\n * @returns Compiled migration with statements and version info\n */\n compile(fromVersion: number, toVersion?: number, options?: ExecuteOptions): CompiledMigration;\n}\n\n/**\n * Configuration for creating a PreparedMigrations instance.\n */\nexport interface PreparedMigrationsConfig {\n schema: AnySchema;\n namespace: string;\n database: SupportedDatabase;\n driverConfig?: DriverConfig;\n sqliteStorageMode?: SQLiteStorageMode;\n resolver?: NamingResolver;\n driver?: SqlDriverAdapter;\n /**\n * Whether to automatically update the schema version in the database after migration.\n * Defaults to true. Can be overridden per execution via ExecuteOptions.\n */\n updateVersionInMigration?: boolean;\n}\n\n/**\n * Create a PreparedMigrations instance for a schema and namespace.\n */\nexport function createPreparedMigrations(config: PreparedMigrationsConfig): PreparedMigrations {\n const {\n schema,\n namespace,\n database,\n driverConfig,\n sqliteStorageMode,\n driver,\n updateVersionInMigration: defaultUpdateVersion = true,\n } = config;\n\n // Create the cold Kysely instance for SQL generation\n const coldKysely = createColdKysely(database);\n\n // Create the appropriate SQL generator for the database\n const generator = createSQLGenerator(database, coldKysely, driverConfig, sqliteStorageMode);\n\n /**\n * Internal method to compile a migration for a given version range.\n */\n function compile(\n fromVersion: number,\n toVersion: number,\n updateVersionInMigration: boolean,\n ): CompiledMigration {\n // Validate version numbers\n if (fromVersion < 0) {\n throw new Error(`fromVersion cannot be negative: ${fromVersion}`);\n }\n if (toVersion < 0) {\n throw new Error(`toVersion cannot be negative: ${toVersion}`);\n }\n if (toVersion < fromVersion) {\n throw new Error(\n `Cannot migrate backwards: fromVersion (${fromVersion}) > toVersion (${toVersion})`,\n );\n }\n if (toVersion > schema.version) {\n throw new Error(`toVersion (${toVersion}) exceeds schema version (${schema.version})`);\n }\n\n // Phase 1: Generate migration operations from schema\n const operations = generateMigrationFromSchema(schema, fromVersion, toVersion);\n\n // Phase 2: Compile operations to SQL\n const statements = generator.compile(operations, config.resolver);\n\n // Add version update SQL if requested\n if (updateVersionInMigration && toVersion !== fromVersion) {\n const versionUpdate = generator.generateVersionUpdateSQL(namespace, fromVersion, toVersion);\n statements.push(versionUpdate);\n }\n\n return {\n statements,\n fromVersion,\n toVersion,\n };\n }\n\n return {\n async execute(fromVersion, toVersion, options) {\n if (!driver) {\n throw new Error(\n \"Driver not provided. Cannot execute migration. Use `executeWithDriver` instead.\",\n );\n }\n\n return this.executeWithDriver(driver, fromVersion, toVersion, options);\n },\n\n async executeWithDriver(driverToUse, fromVersion, toVersion, options) {\n // Use option if provided, otherwise use config default\n const updateVersionInMigration = options?.updateVersionInMigration ?? defaultUpdateVersion;\n const targetVersion = toVersion ?? schema.version;\n\n // Compile the migration (this will validate the version numbers)\n const migration = compile(fromVersion, targetVersion, updateVersionInMigration);\n\n // Execute the migration\n await executeMigration(driverToUse, migration);\n },\n\n getSQL(fromVersion, toVersion, options) {\n const updateVersionInMigration = options?.updateVersionInMigration ?? defaultUpdateVersion;\n const targetVersion = toVersion ?? schema.version;\n\n const migration = compile(fromVersion, targetVersion, updateVersionInMigration);\n return migration.statements.map((stmt) => stmt.sql + \";\").join(\"\\n\\n\");\n },\n\n compile(fromVersion, toVersion, options) {\n const updateVersionInMigration = options?.updateVersionInMigration ?? defaultUpdateVersion;\n const targetVersion = toVersion ?? schema.version;\n\n return compile(fromVersion, targetVersion, updateVersionInMigration);\n },\n };\n}\n\n/**\n * Create the appropriate SQL generator for a database type.\n */\nfunction createSQLGenerator(\n database: SupportedDatabase,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n coldKysely: Kysely<any>,\n driverConfig?: DriverConfig,\n sqliteStorageMode?: SQLiteStorageMode,\n): SQLGenerator {\n switch (database) {\n case \"sqlite\":\n return new SQLiteSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);\n case \"postgresql\":\n return new PostgresSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);\n case \"mysql\":\n return new MySQLSQLGenerator(coldKysely, database, driverConfig, sqliteStorageMode);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAuGA,SAAgB,yBAAyB,QAAsD;CAC7F,MAAM,EACJ,QACA,WACA,UACA,cACA,mBACA,QACA,0BAA0B,uBAAuB,SAC/C;CAMJ,MAAM,YAAY,mBAAmB,UAHlB,iBAAiB,SAAS,EAGc,cAAc,kBAAkB;;;;CAK3F,SAAS,QACP,aACA,WACA,0BACmB;AAEnB,MAAI,cAAc,EAChB,OAAM,IAAI,MAAM,mCAAmC,cAAc;AAEnE,MAAI,YAAY,EACd,OAAM,IAAI,MAAM,iCAAiC,YAAY;AAE/D,MAAI,YAAY,YACd,OAAM,IAAI,MACR,0CAA0C,YAAY,iBAAiB,UAAU,GAClF;AAEH,MAAI,YAAY,OAAO,QACrB,OAAM,IAAI,MAAM,cAAc,UAAU,4BAA4B,OAAO,QAAQ,GAAG;EAIxF,MAAM,aAAa,4BAA4B,QAAQ,aAAa,UAAU;EAG9E,MAAM,aAAa,UAAU,QAAQ,YAAY,OAAO,SAAS;AAGjE,MAAI,4BAA4B,cAAc,aAAa;GACzD,MAAM,gBAAgB,UAAU,yBAAyB,WAAW,aAAa,UAAU;AAC3F,cAAW,KAAK,cAAc;;AAGhC,SAAO;GACL;GACA;GACA;GACD;;AAGH,QAAO;EACL,MAAM,QAAQ,aAAa,WAAW,SAAS;AAC7C,OAAI,CAAC,OACH,OAAM,IAAI,MACR,kFACD;AAGH,UAAO,KAAK,kBAAkB,QAAQ,aAAa,WAAW,QAAQ;;EAGxE,MAAM,kBAAkB,aAAa,aAAa,WAAW,SAAS;GAEpE,MAAM,2BAA2B,SAAS,4BAA4B;AAOtE,SAAM,iBAAiB,aAHL,QAAQ,aAHJ,aAAa,OAAO,SAGY,yBAAyB,CAGjC;;EAGhD,OAAO,aAAa,WAAW,SAAS;GACtC,MAAM,2BAA2B,SAAS,4BAA4B;AAItE,UADkB,QAAQ,aAFJ,aAAa,OAAO,SAEY,yBAAyB,CAC9D,WAAW,KAAK,SAAS,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO;;EAGxE,QAAQ,aAAa,WAAW,SAAS;GACvC,MAAM,2BAA2B,SAAS,4BAA4B;AAGtE,UAAO,QAAQ,aAFO,aAAa,OAAO,SAEC,yBAAyB;;EAEvE;;;;;AAMH,SAAS,mBACP,UAEA,YACA,cACA,mBACc;AACd,SAAQ,UAAR;EACE,KAAK,SACH,QAAO,IAAI,mBAAmB,YAAY,UAAU,cAAc,kBAAkB;EACtF,KAAK,aACH,QAAO,IAAI,qBAAqB,YAAY,UAAU,cAAc,kBAAkB;EACxF,KAAK,QACH,QAAO,IAAI,kBAAkB,YAAY,UAAU,cAAc,kBAAkB"}
|