sqlew 5.0.8 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/README.md +19 -10
- package/dist/adapters/auth/auth-factory.d.ts +2 -81
- package/dist/adapters/auth/auth-factory.d.ts.map +1 -1
- package/dist/adapters/auth/auth-factory.js +2 -82
- package/dist/adapters/auth/auth-factory.js.map +1 -1
- package/dist/adapters/auth/base-auth-provider.d.ts +18 -303
- package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/base-auth-provider.js +2 -104
- package/dist/adapters/auth/base-auth-provider.js.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.d.ts +4 -348
- package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.js +6 -356
- package/dist/adapters/auth/direct-auth-provider.js.map +1 -1
- package/dist/adapters/base-adapter.d.ts +31 -598
- package/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +10 -458
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -11
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -11
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mysql-adapter.d.ts +15 -541
- package/dist/adapters/mysql-adapter.d.ts.map +1 -1
- package/dist/adapters/mysql-adapter.js +24 -561
- package/dist/adapters/mysql-adapter.js.map +1 -1
- package/dist/adapters/postgresql-adapter.d.ts +15 -203
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +24 -223
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/adapters/sqlite-adapter.d.ts +4 -28
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +4 -32
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -4
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/backend/backend-factory.d.ts +3 -3
- package/dist/backend/backend-factory.js +3 -3
- package/dist/backend/local-backend.d.ts.map +1 -1
- package/dist/backend/local-backend.js +0 -5
- package/dist/backend/local-backend.js.map +1 -1
- package/dist/cli/db-export.d.ts.map +1 -1
- package/dist/cli/db-export.js +54 -32
- package/dist/cli/db-export.js.map +1 -1
- package/dist/cli/db-import.d.ts.map +1 -1
- package/dist/cli/db-import.js +32 -31
- package/dist/cli/db-import.js.map +1 -1
- package/dist/cli/hooks/on-exit-plan.d.ts.map +1 -1
- package/dist/cli/hooks/on-exit-plan.js +42 -1
- package/dist/cli/hooks/on-exit-plan.js.map +1 -1
- package/dist/cli/hooks/on-prompt.d.ts.map +1 -1
- package/dist/cli/hooks/on-prompt.js +5 -0
- package/dist/cli/hooks/on-prompt.js.map +1 -1
- package/dist/cli/hooks/plan-processor.d.ts.map +1 -1
- package/dist/cli/hooks/plan-processor.js +16 -2
- package/dist/cli/hooks/plan-processor.js.map +1 -1
- package/dist/cli/hooks/stdin-parser.d.ts +41 -0
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
- package/dist/cli/hooks/stdin-parser.js +140 -4
- package/dist/cli/hooks/stdin-parser.js.map +1 -1
- package/dist/cli/hooks/track-plan.d.ts +13 -0
- package/dist/cli/hooks/track-plan.d.ts.map +1 -1
- package/dist/cli/hooks/track-plan.js +58 -3
- package/dist/cli/hooks/track-plan.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/cloud-config-loader.d.ts +8 -8
- package/dist/config/cloud-config-loader.d.ts.map +1 -1
- package/dist/config/cloud-config-loader.js +12 -12
- package/dist/config/cloud-config-loader.js.map +1 -1
- package/dist/config/global-config.d.ts +24 -46
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +174 -56
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/loader.d.ts +1 -18
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +1 -89
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +2 -64
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -18
- package/dist/config/types.js.map +1 -1
- package/dist/database/index.d.ts +1 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -3
- package/dist/database/index.js.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +2 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -1
- package/dist/database/operations/queries.d.ts +0 -4
- package/dist/database/operations/queries.d.ts.map +1 -1
- package/dist/database/operations/queries.js +0 -8
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init-rules.d.ts.map +1 -1
- package/dist/init-rules.js +0 -1
- package/dist/init-rules.js.map +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +2 -1
- package/dist/knexfile.js.map +1 -1
- package/dist/migration/local-to-global.d.ts +19 -0
- package/dist/migration/local-to-global.d.ts.map +1 -0
- package/dist/migration/local-to-global.js +133 -0
- package/dist/migration/local-to-global.js.map +1 -0
- package/dist/saas-connector/client/types.d.ts +1 -1
- package/dist/saas-connector/client/types.d.ts.map +1 -1
- package/dist/schema.js +1 -1
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +15 -7
- package/dist/server/setup.js.map +1 -1
- package/dist/tests/backend/backend-factory.test.js +2 -2
- package/dist/tests/backend/backend-factory.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.d.ts +2 -17
- package/dist/tests/docker/native/constraint-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +3 -82
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/db-init.d.ts +3 -34
- package/dist/tests/docker/native/db-init.d.ts.map +1 -1
- package/dist/tests/docker/native/db-init.js +15 -77
- package/dist/tests/docker/native/db-init.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.d.ts +2 -10
- package/dist/tests/docker/native/decision-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +2 -84
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.d.ts +2 -5
- package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
- package/dist/tests/docker/native/help-system.test.js +2 -47
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.d.ts +3 -11
- package/dist/tests/docker/native/suggest-tool.test.d.ts.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.js +3 -60
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +2 -23
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +5 -59
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/feature/decision/analytics.test.js +2 -1
- package/dist/tests/feature/decision/analytics.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +2 -7
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation.test.js +2 -1
- package/dist/tests/feature/decision/batch-validation.test.js.map +1 -1
- package/dist/tests/integration/auto-trigger-suggestions.test.js +4 -37
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js +2 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
- package/dist/tests/integration/json-export-import.test.d.ts.map +1 -0
- package/dist/tests/integration/json-export-import.test.js.map +1 -0
- package/dist/tests/unit/case-insensitive-validator.test.d.ts +0 -7
- package/dist/tests/unit/case-insensitive-validator.test.d.ts.map +1 -1
- package/dist/tests/unit/case-insensitive-validator.test.js +0 -22
- package/dist/tests/unit/case-insensitive-validator.test.js.map +1 -1
- package/dist/tests/unit/config/cloud-config-loader.test.js +4 -2
- package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -1
- package/dist/tests/unit/config/global-db-migration.test.d.ts +12 -0
- package/dist/tests/unit/config/global-db-migration.test.d.ts.map +1 -0
- package/dist/tests/unit/config/global-db-migration.test.js +117 -0
- package/dist/tests/unit/config/global-db-migration.test.js.map +1 -0
- package/dist/tests/unit/constraint-scorer.test.d.ts +2 -7
- package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -1
- package/dist/tests/unit/constraint-scorer.test.js +2 -28
- package/dist/tests/unit/constraint-scorer.test.js.map +1 -1
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts +9 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js +98 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts +7 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js +55 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js.map +1 -0
- package/dist/tests/unit/universal-knex.test.js +9 -0
- package/dist/tests/unit/universal-knex.test.js.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.js +0 -24
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
- package/dist/tests/utils/db-config.d.ts.map +1 -1
- package/dist/tests/utils/db-config.js +0 -9
- package/dist/tests/utils/db-config.js.map +1 -1
- package/dist/tests/utils/db-import.d.ts.map +1 -1
- package/dist/tests/utils/db-import.js +0 -3
- package/dist/tests/utils/db-import.js.map +1 -1
- package/dist/tests/utils/db-schema.d.ts.map +1 -1
- package/dist/tests/utils/db-schema.js +48 -51
- package/dist/tests/utils/db-schema.js.map +1 -1
- package/dist/tests/utils/db-seeding.d.ts.map +1 -1
- package/dist/tests/utils/db-seeding.js +0 -3
- package/dist/tests/utils/db-seeding.js.map +1 -1
- package/dist/tests/utils/index.d.ts +0 -1
- package/dist/tests/utils/index.d.ts.map +1 -1
- package/dist/tests/utils/index.js +0 -2
- package/dist/tests/utils/index.js.map +1 -1
- package/dist/tests/utils/test-helpers.d.ts +6 -76
- package/dist/tests/utils/test-helpers.d.ts.map +1 -1
- package/dist/tests/utils/test-helpers.js +56 -162
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tests/utils/test-lifecycle.d.ts +2 -28
- package/dist/tests/utils/test-lifecycle.d.ts.map +1 -1
- package/dist/tests/utils/test-lifecycle.js +2 -31
- package/dist/tests/utils/test-lifecycle.js.map +1 -1
- package/dist/tools/context/index.d.ts +0 -1
- package/dist/tools/context/index.d.ts.map +1 -1
- package/dist/tools/context/index.js +0 -2
- package/dist/tools/context/index.js.map +1 -1
- package/dist/tools/context/types.d.ts +1 -1
- package/dist/tools/context/types.d.ts.map +1 -1
- package/dist/types/actions.d.ts +6 -29
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/actions.js +1 -2
- package/dist/types/actions.js.map +1 -1
- package/dist/types/constraint/params.d.ts +24 -1
- package/dist/types/constraint/params.d.ts.map +1 -1
- package/dist/types/constraint/params.js +3 -0
- package/dist/types/constraint/params.js.map +1 -1
- package/dist/types/constraint/responses.d.ts +18 -1
- package/dist/types/constraint/responses.d.ts.map +1 -1
- package/dist/types/constraint/responses.js +3 -0
- package/dist/types/constraint/responses.js.map +1 -1
- package/dist/types/decision/batch.d.ts +2 -5
- package/dist/types/decision/batch.d.ts.map +1 -1
- package/dist/types/decision/batch.js +3 -3
- package/dist/types/decision/batch.js.map +1 -1
- package/dist/types/decision/params.d.ts +7 -4
- package/dist/types/decision/params.d.ts.map +1 -1
- package/dist/types/decision/responses.d.ts +49 -35
- package/dist/types/decision/responses.d.ts.map +1 -1
- package/dist/types/decision/templates.d.ts +2 -18
- package/dist/types/decision/templates.d.ts.map +1 -1
- package/dist/types/decision/templates.js +3 -3
- package/dist/types/decision/templates.js.map +1 -1
- package/dist/types/enums.d.ts +11 -13
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +5 -13
- package/dist/types/enums.js.map +1 -1
- package/dist/types/import-export.d.ts +7 -30
- package/dist/types/import-export.d.ts.map +1 -1
- package/dist/types/import-export.js +1 -2
- package/dist/types/import-export.js.map +1 -1
- package/dist/types/index.d.ts +18 -22
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -32
- package/dist/types/index.js.map +1 -1
- package/dist/types/master-entities.d.ts +1 -10
- package/dist/types/master-entities.d.ts.map +1 -1
- package/dist/types/master-entities.js +1 -2
- package/dist/types/master-entities.js.map +1 -1
- package/dist/types/transaction-entities.d.ts +2 -21
- package/dist/types/transaction-entities.d.ts.map +1 -1
- package/dist/types/transaction-entities.js +1 -1
- package/dist/types/validation.d.ts +1 -16
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +1 -2
- package/dist/types/validation.js.map +1 -1
- package/dist/types/view-entities.d.ts +3 -12
- package/dist/types/view-entities.d.ts.map +1 -1
- package/dist/types/view-entities.js +1 -1
- package/dist/types.d.ts +4 -718
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -39
- package/dist/types.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts +2 -2
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js.map +1 -1
- package/dist/utils/path-normalize.d.ts +23 -0
- package/dist/utils/path-normalize.d.ts.map +1 -0
- package/dist/utils/path-normalize.js +38 -0
- package/dist/utils/path-normalize.js.map +1 -0
- package/dist/utils/project-root.d.ts +6 -3
- package/dist/utils/project-root.d.ts.map +1 -1
- package/dist/utils/project-root.js +11 -3
- package/dist/utils/project-root.js.map +1 -1
- package/dist/watcher/base-watcher.d.ts +0 -4
- package/dist/watcher/base-watcher.d.ts.map +1 -1
- package/dist/watcher/base-watcher.js +11 -22
- package/dist/watcher/base-watcher.js.map +1 -1
- package/docs/CLI_USAGE.md +27 -107
- package/docs/CONFIGURATION.md +10 -5
- package/docs/DATABASE_AUTH.md +3 -3
- package/docs/HOOKS_GUIDE.md +40 -6
- package/docs/MIGRATION_TO_SAAS.md +2 -2
- package/docs/SHARED_DATABASE.md +108 -0
- package/package.json +4 -3
- package/dist/adapters/auth/auth-types.d.ts +0 -30
- package/dist/adapters/auth/auth-types.d.ts.map +0 -1
- package/dist/adapters/auth/auth-types.js +0 -30
- package/dist/adapters/auth/auth-types.js.map +0 -1
- package/dist/cli/db-dump.d.ts +0 -36
- package/dist/cli/db-dump.d.ts.map +0 -1
- package/dist/cli/db-dump.js +0 -384
- package/dist/cli/db-dump.js.map +0 -1
- package/dist/database/config/config-ops.d.ts +0 -42
- package/dist/database/config/config-ops.d.ts.map +0 -1
- package/dist/database/config/config-ops.js +0 -102
- package/dist/database/config/config-ops.js.map +0 -1
- package/dist/formatters/adr-formatter.d.ts +0 -22
- package/dist/formatters/adr-formatter.d.ts.map +0 -1
- package/dist/formatters/adr-formatter.js +0 -127
- package/dist/formatters/adr-formatter.js.map +0 -1
- package/dist/formatters/confluence-formatter.d.ts +0 -26
- package/dist/formatters/confluence-formatter.d.ts.map +0 -1
- package/dist/formatters/confluence-formatter.js +0 -129
- package/dist/formatters/confluence-formatter.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -34
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -57
- package/dist/formatters/index.js.map +0 -1
- package/dist/formatters/markdown-formatter.d.ts +0 -16
- package/dist/formatters/markdown-formatter.d.ts.map +0 -1
- package/dist/formatters/markdown-formatter.js +0 -110
- package/dist/formatters/markdown-formatter.js.map +0 -1
- package/dist/formatters/notion-formatter.d.ts +0 -29
- package/dist/formatters/notion-formatter.d.ts.map +0 -1
- package/dist/formatters/notion-formatter.js +0 -177
- package/dist/formatters/notion-formatter.js.map +0 -1
- package/dist/formatters/types.d.ts +0 -31
- package/dist/formatters/types.d.ts.map +0 -1
- package/dist/formatters/types.js +0 -6
- package/dist/formatters/types.js.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.d.ts +0 -7
- package/dist/tests/database/sql-dump/converters.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.js +0 -314
- package/dist/tests/database/sql-dump/converters.test.js.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.js +0 -141
- package/dist/tests/database/sql-dump/default-conversions.test.js.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts +0 -27
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js +0 -284
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.js +0 -361
- package/dist/tests/database/sql-dump/type-conversion.test.js.map +0 -1
- package/dist/tests/docker/cross-database.test.d.ts +0 -21
- package/dist/tests/docker/cross-database.test.d.ts.map +0 -1
- package/dist/tests/docker/cross-database.test.js +0 -308
- package/dist/tests/docker/cross-database.test.js.map +0 -1
- package/dist/tests/docker/dump-import.test.d.ts +0 -15
- package/dist/tests/docker/dump-import.test.d.ts.map +0 -1
- package/dist/tests/docker/dump-import.test.js +0 -424
- package/dist/tests/docker/dump-import.test.js.map +0 -1
- package/dist/tests/docker/fk-constraints.test.d.ts +0 -13
- package/dist/tests/docker/fk-constraints.test.d.ts.map +0 -1
- package/dist/tests/docker/fk-constraints.test.js +0 -381
- package/dist/tests/docker/fk-constraints.test.js.map +0 -1
- package/dist/tests/docker/indexes.test.d.ts +0 -12
- package/dist/tests/docker/indexes.test.d.ts.map +0 -1
- package/dist/tests/docker/indexes.test.js +0 -250
- package/dist/tests/docker/indexes.test.js.map +0 -1
- package/dist/tests/docker/integration.test.d.ts +0 -16
- package/dist/tests/docker/integration.test.d.ts.map +0 -1
- package/dist/tests/docker/integration.test.js +0 -323
- package/dist/tests/docker/integration.test.js.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.d.ts +0 -17
- package/dist/tests/docker/multi-project-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.js +0 -394
- package/dist/tests/docker/multi-project-migration.test.js.map +0 -1
- package/dist/tests/docker/schema-migration.test.d.ts +0 -8
- package/dist/tests/docker/schema-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/schema-migration.test.js +0 -98
- package/dist/tests/docker/schema-migration.test.js.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts +0 -5
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.js +0 -85
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +0 -1
- package/dist/tests/integration/suggest-simple.test.d.ts +0 -5
- package/dist/tests/integration/suggest-simple.test.d.ts.map +0 -1
- package/dist/tests/integration/suggest-simple.test.js +0 -90
- package/dist/tests/integration/suggest-simple.test.js.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.d.ts +0 -8
- package/dist/tests/migrations/test-all-versions-real.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.js +0 -236
- package/dist/tests/migrations/test-all-versions-real.js.map +0 -1
- package/dist/tests/migrations/test-all-versions.d.ts +0 -14
- package/dist/tests/migrations/test-all-versions.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions.js +0 -519
- package/dist/tests/migrations/test-all-versions.js.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +0 -7
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.js +0 -168
- package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +0 -13
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.js +0 -264
- package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts +0 -2
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.js +0 -97
- package/dist/tests/unit/utils/case-insensitive-validator.test.js.map +0 -1
- package/dist/tests/utils/json-export-import.test.d.ts.map +0 -1
- package/dist/tests/utils/json-export-import.test.js.map +0 -1
- package/dist/tests/utils/task-helpers.d.ts +0 -67
- package/dist/tests/utils/task-helpers.d.ts.map +0 -1
- package/dist/tests/utils/task-helpers.js +0 -134
- package/dist/tests/utils/task-helpers.js.map +0 -1
- package/dist/tools/context/actions/export.d.ts +0 -35
- package/dist/tools/context/actions/export.d.ts.map +0 -1
- package/dist/tools/context/actions/export.js +0 -93
- package/dist/tools/context/actions/export.js.map +0 -1
- package/dist/types/file/params.d.ts +0 -40
- package/dist/types/file/params.d.ts.map +0 -1
- package/dist/types/file/params.js +0 -6
- package/dist/types/file/params.js.map +0 -1
- package/dist/types/file/responses.d.ts +0 -2
- package/dist/types/file/responses.d.ts.map +0 -1
- package/dist/types/file/responses.js +0 -2
- package/dist/types/file/responses.js.map +0 -1
- package/dist/types/task/params.d.ts +0 -173
- package/dist/types/task/params.d.ts.map +0 -1
- package/dist/types/task/params.js +0 -8
- package/dist/types/task/params.js.map +0 -1
- package/dist/types/task/responses.d.ts +0 -334
- package/dist/types/task/responses.d.ts.map +0 -1
- package/dist/types/task/responses.js +0 -8
- package/dist/types/task/responses.js.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.d.ts +0 -16
- package/dist/utils/sql-dump/core/dependency-sort.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.js +0 -105
- package/dist/utils/sql-dump/core/dependency-sort.js.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.d.ts +0 -13
- package/dist/utils/sql-dump/core/generate-dump.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.js +0 -201
- package/dist/utils/sql-dump/core/generate-dump.js.map +0 -1
- package/dist/utils/sql-dump/core/index-export.d.ts +0 -10
- package/dist/utils/sql-dump/core/index-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/index-export.js +0 -173
- package/dist/utils/sql-dump/core/index-export.js.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.d.ts +0 -6
- package/dist/utils/sql-dump/core/sequence-reset.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.js +0 -28
- package/dist/utils/sql-dump/core/sequence-reset.js.map +0 -1
- package/dist/utils/sql-dump/core/table-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/table-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/table-export.js +0 -4
- package/dist/utils/sql-dump/core/table-export.js.map +0 -1
- package/dist/utils/sql-dump/core/view-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/view-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/view-export.js +0 -4
- package/dist/utils/sql-dump/core/view-export.js.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.js +0 -177
- package/dist/utils/sql-dump/formatters/bulk-insert.js.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.d.ts +0 -6
- package/dist/utils/sql-dump/formatters/identifiers.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.js +0 -16
- package/dist/utils/sql-dump/formatters/identifiers.js.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.js +0 -281
- package/dist/utils/sql-dump/formatters/value-formatter.js.map +0 -1
- package/dist/utils/sql-dump/generators/controls.d.ts +0 -10
- package/dist/utils/sql-dump/generators/controls.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/controls.js +0 -36
- package/dist/utils/sql-dump/generators/controls.js.map +0 -1
- package/dist/utils/sql-dump/generators/headers.d.ts +0 -6
- package/dist/utils/sql-dump/generators/headers.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/headers.js +0 -19
- package/dist/utils/sql-dump/generators/headers.js.map +0 -1
- package/dist/utils/sql-dump/index.d.ts +0 -14
- package/dist/utils/sql-dump/index.d.ts.map +0 -1
- package/dist/utils/sql-dump/index.js +0 -16
- package/dist/utils/sql-dump/index.js.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.d.ts +0 -20
- package/dist/utils/sql-dump/schema/indexes.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.js +0 -108
- package/dist/utils/sql-dump/schema/indexes.js.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.d.ts +0 -6
- package/dist/utils/sql-dump/schema/primary-keys.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.js +0 -41
- package/dist/utils/sql-dump/schema/primary-keys.js.map +0 -1
- package/dist/utils/sql-dump/schema/tables.d.ts +0 -15
- package/dist/utils/sql-dump/schema/tables.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/tables.js +0 -518
- package/dist/utils/sql-dump/schema/tables.js.map +0 -1
- package/dist/utils/sql-dump/schema/views.d.ts +0 -11
- package/dist/utils/sql-dump/schema/views.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/views.js +0 -116
- package/dist/utils/sql-dump/schema/views.js.map +0 -1
- package/dist/utils/sql-dump/types.d.ts +0 -10
- package/dist/utils/sql-dump/types.d.ts.map +0 -1
- package/dist/utils/sql-dump/types.js +0 -3
- package/dist/utils/sql-dump/types.js.map +0 -1
- package/dist/utils/sql-dump-converters.d.ts +0 -188
- package/dist/utils/sql-dump-converters.d.ts.map +0 -1
- package/dist/utils/sql-dump-converters.js +0 -315
- package/dist/utils/sql-dump-converters.js.map +0 -1
- package/dist/watcher/gitignore-parser.d.ts +0 -70
- package/dist/watcher/gitignore-parser.d.ts.map +0 -1
- package/dist/watcher/gitignore-parser.js +0 -195
- package/dist/watcher/gitignore-parser.js.map +0 -1
- package/dist/watcher/index.d.ts +0 -9
- package/dist/watcher/index.d.ts.map +0 -1
- package/dist/watcher/index.js +0 -8
- package/dist/watcher/index.js.map +0 -1
- /package/dist/tests/{utils → integration}/json-export-import.test.d.ts +0 -0
- /package/dist/tests/{utils → integration}/json-export-import.test.js +0 -0
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// schema/views.ts - View detection and CREATE VIEW statement generation
|
|
2
|
-
import { convertIdentifierQuotes, convertTimestampFunctions, } from '../../sql-dump-converters.js';
|
|
3
|
-
/**
|
|
4
|
-
* Get all view names from the database
|
|
5
|
-
*/
|
|
6
|
-
export async function getAllViews(knex) {
|
|
7
|
-
const client = knex.client.config.client;
|
|
8
|
-
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
9
|
-
const result = await knex.raw(`
|
|
10
|
-
SELECT name FROM sqlite_master
|
|
11
|
-
WHERE type='view'
|
|
12
|
-
ORDER BY name
|
|
13
|
-
`);
|
|
14
|
-
return result.map((row) => row.name);
|
|
15
|
-
}
|
|
16
|
-
else if (client === 'mysql' || client === 'mysql2') {
|
|
17
|
-
const result = await knex.raw(`
|
|
18
|
-
SELECT TABLE_NAME as name
|
|
19
|
-
FROM information_schema.VIEWS
|
|
20
|
-
WHERE TABLE_SCHEMA = DATABASE()
|
|
21
|
-
ORDER BY TABLE_NAME
|
|
22
|
-
`);
|
|
23
|
-
return result[0].map((row) => row.name);
|
|
24
|
-
}
|
|
25
|
-
else if (client === 'pg') {
|
|
26
|
-
const result = await knex.raw(`
|
|
27
|
-
SELECT viewname as name
|
|
28
|
-
FROM pg_views
|
|
29
|
-
WHERE schemaname = 'public'
|
|
30
|
-
ORDER BY viewname
|
|
31
|
-
`);
|
|
32
|
-
return result.rows.map((row) => row.name);
|
|
33
|
-
}
|
|
34
|
-
throw new Error(`Unsupported database client: ${client}`);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get CREATE VIEW statement for a view
|
|
38
|
-
*/
|
|
39
|
-
export async function getCreateViewStatement(knex, viewName, targetFormat) {
|
|
40
|
-
const client = knex.client.config.client;
|
|
41
|
-
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
42
|
-
// SQLite: Get from sqlite_master
|
|
43
|
-
const result = await knex.raw(`
|
|
44
|
-
SELECT sql FROM sqlite_master
|
|
45
|
-
WHERE type='view' AND name=?
|
|
46
|
-
`, [viewName]);
|
|
47
|
-
if (result.length === 0 || !result[0].sql) {
|
|
48
|
-
throw new Error(`View ${viewName} not found`);
|
|
49
|
-
}
|
|
50
|
-
let createSql = result[0].sql;
|
|
51
|
-
// Convert SQLite syntax to target format if needed
|
|
52
|
-
if (targetFormat === 'mysql') {
|
|
53
|
-
// Convert to MySQL syntax using shared converters
|
|
54
|
-
createSql = convertIdentifierQuotes(createSql, 'mysql');
|
|
55
|
-
createSql = convertTimestampFunctions(createSql, 'mysql');
|
|
56
|
-
// Fix type mismatch in COALESCE with numeric values: dn.value → CAST(dn.value AS CHAR)
|
|
57
|
-
// MySQL doesn't allow mixing TEXT and DOUBLE PRECISION in COALESCE
|
|
58
|
-
createSql = createSql.replace(/COALESCE\s*\(\s*NULLIF\s*\(\s*d\.value\s*,\s*''\s*\)\s*,\s*dn\.value\s*\)/gi, "COALESCE(NULLIF(d.value, ''), CAST(dn.value AS CHAR))");
|
|
59
|
-
}
|
|
60
|
-
else if (targetFormat === 'postgresql') {
|
|
61
|
-
// Convert to PostgreSQL syntax using shared converters
|
|
62
|
-
createSql = convertIdentifierQuotes(createSql, 'postgresql');
|
|
63
|
-
createSql = convertTimestampFunctions(createSql, 'postgresql');
|
|
64
|
-
// Convert GROUP_CONCAT(col, sep) → string_agg(col, sep)
|
|
65
|
-
createSql = createSql.replace(/GROUP_CONCAT\s*\(/gi, 'string_agg(');
|
|
66
|
-
// Cast integer comparisons to be type-safe: column = 1 → column::integer = 1
|
|
67
|
-
// This works for both boolean columns (TRUE::integer = 1) and integer enum columns
|
|
68
|
-
createSql = createSql.replace(/(\w+)\s*=\s*([01])\b/g, '$1::integer = $2');
|
|
69
|
-
// Fix type mismatch in COALESCE with numeric values: dn.value → CAST(dn.value AS TEXT)
|
|
70
|
-
// PostgreSQL strictly enforces type compatibility in COALESCE
|
|
71
|
-
createSql = createSql.replace(/COALESCE\s*\(\s*NULLIF\s*\(\s*d\.value\s*,\s*''\s*\)\s*,\s*dn\.value\s*\)/gi, "COALESCE(NULLIF(d.value, ''), CAST(dn.value AS TEXT))");
|
|
72
|
-
}
|
|
73
|
-
return createSql + ';';
|
|
74
|
-
}
|
|
75
|
-
else if (client === 'mysql' || client === 'mysql2') {
|
|
76
|
-
// MySQL: Use SHOW CREATE VIEW
|
|
77
|
-
const result = await knex.raw(`SHOW CREATE VIEW ??`, [viewName]);
|
|
78
|
-
let createSql = result[0][0]['Create View'];
|
|
79
|
-
if (targetFormat === 'sqlite') {
|
|
80
|
-
// Convert MySQL to SQLite using shared converters
|
|
81
|
-
createSql = convertIdentifierQuotes(createSql, 'sqlite');
|
|
82
|
-
createSql = convertTimestampFunctions(createSql, 'sqlite');
|
|
83
|
-
return createSql + ';';
|
|
84
|
-
}
|
|
85
|
-
else if (targetFormat === 'postgresql') {
|
|
86
|
-
// Convert MySQL to PostgreSQL using shared converters
|
|
87
|
-
createSql = convertIdentifierQuotes(createSql, 'postgresql');
|
|
88
|
-
createSql = convertTimestampFunctions(createSql, 'postgresql');
|
|
89
|
-
return createSql + ';';
|
|
90
|
-
}
|
|
91
|
-
return createSql + ';';
|
|
92
|
-
}
|
|
93
|
-
else if (client === 'pg') {
|
|
94
|
-
// PostgreSQL: Get from pg_views
|
|
95
|
-
const result = await knex.raw(`
|
|
96
|
-
SELECT definition
|
|
97
|
-
FROM pg_views
|
|
98
|
-
WHERE schemaname = 'public' AND viewname = ?
|
|
99
|
-
`, [viewName]);
|
|
100
|
-
if (result.rows.length === 0) {
|
|
101
|
-
throw new Error(`View ${viewName} not found`);
|
|
102
|
-
}
|
|
103
|
-
let createSql = `CREATE VIEW "${viewName}" AS ${result.rows[0].definition}`;
|
|
104
|
-
if (targetFormat === 'mysql') {
|
|
105
|
-
createSql = convertIdentifierQuotes(createSql, 'mysql');
|
|
106
|
-
return createSql + ';';
|
|
107
|
-
}
|
|
108
|
-
else if (targetFormat === 'sqlite') {
|
|
109
|
-
createSql = convertTimestampFunctions(createSql, 'sqlite');
|
|
110
|
-
return createSql + ';';
|
|
111
|
-
}
|
|
112
|
-
return createSql + ';';
|
|
113
|
-
}
|
|
114
|
-
throw new Error(`Unsupported database client: ${client}`);
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=views.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/views.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { DatabaseFormat } from '../sql-dump-converters.js';
|
|
2
|
-
export type { DatabaseFormat };
|
|
3
|
-
/**
|
|
4
|
-
* Conflict resolution mode for INSERT statements
|
|
5
|
-
* - 'error': Standard INSERT, fails on duplicate
|
|
6
|
-
* - 'ignore': INSERT IGNORE / INSERT OR IGNORE / ON CONFLICT DO NOTHING
|
|
7
|
-
* - 'replace': ON DUPLICATE KEY UPDATE / ON CONFLICT DO UPDATE
|
|
8
|
-
*/
|
|
9
|
-
export type ConflictMode = 'error' | 'ignore' | 'replace';
|
|
10
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/sql-dump/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/sql-dump/types.ts"],"names":[],"mappings":"AAAA,qDAAqD"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
export type DatabaseFormat = 'mysql' | 'postgresql' | 'sqlite';
|
|
2
|
-
/**
|
|
3
|
-
* Convert identifier quotes between database formats
|
|
4
|
-
*
|
|
5
|
-
* Database-specific identifier quoting:
|
|
6
|
-
* - MySQL: backticks `identifier`
|
|
7
|
-
* - PostgreSQL: double quotes "identifier"
|
|
8
|
-
* - SQLite: double quotes "identifier" (also supports backticks)
|
|
9
|
-
*
|
|
10
|
-
* @param sql - SQL statement
|
|
11
|
-
* @param targetFormat - Target database format
|
|
12
|
-
* @returns SQL with converted identifier quotes
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // SQLite → MySQL
|
|
16
|
-
* convertIdentifierQuotes('CREATE TABLE "users" ("id" INTEGER)', 'mysql')
|
|
17
|
-
* // Returns: 'CREATE TABLE `users` (`id` INTEGER)'
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* // MySQL → PostgreSQL
|
|
21
|
-
* convertIdentifierQuotes('CREATE TABLE `users` (`id` INT)', 'postgresql')
|
|
22
|
-
* // Returns: 'CREATE TABLE "users" ("id" INT)'
|
|
23
|
-
*/
|
|
24
|
-
export declare function convertIdentifierQuotes(sql: string, targetFormat: DatabaseFormat): string;
|
|
25
|
-
/**
|
|
26
|
-
* Convert autoincrement syntax between databases
|
|
27
|
-
*
|
|
28
|
-
* Autoincrement variations:
|
|
29
|
-
* - SQLite: AUTOINCREMENT (with INTEGER PRIMARY KEY)
|
|
30
|
-
* - MySQL: AUTO_INCREMENT
|
|
31
|
-
* - PostgreSQL: SERIAL / GENERATED BY DEFAULT AS IDENTITY / GENERATED ALWAYS AS IDENTITY
|
|
32
|
-
*
|
|
33
|
-
* @param sql - SQL statement
|
|
34
|
-
* @param sourceFormat - Source database format
|
|
35
|
-
* @param targetFormat - Target database format
|
|
36
|
-
* @returns SQL with converted autoincrement syntax
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* // SQLite → MySQL
|
|
40
|
-
* convertAutoIncrement('id INTEGER PRIMARY KEY AUTOINCREMENT', 'sqlite', 'mysql')
|
|
41
|
-
* // Returns: 'id INTEGER PRIMARY KEY AUTO_INCREMENT'
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* // SQLite → PostgreSQL (allow explicit ID values during import)
|
|
45
|
-
* convertAutoIncrement('id INTEGER AUTOINCREMENT', 'sqlite', 'postgresql')
|
|
46
|
-
* // Returns: 'id INTEGER GENERATED BY DEFAULT AS IDENTITY'
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* // MySQL → SQLite
|
|
50
|
-
* convertAutoIncrement('id INT AUTO_INCREMENT', 'mysql', 'sqlite')
|
|
51
|
-
* // Returns: 'id INT AUTOINCREMENT'
|
|
52
|
-
*/
|
|
53
|
-
export declare function convertAutoIncrement(sql: string, sourceFormat: DatabaseFormat, targetFormat: DatabaseFormat): string;
|
|
54
|
-
/**
|
|
55
|
-
* Convert timestamp/datetime functions between databases
|
|
56
|
-
*
|
|
57
|
-
* Timestamp function variations:
|
|
58
|
-
* - SQLite: unixepoch(), datetime(ts, 'unixepoch')
|
|
59
|
-
* - MySQL: UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)
|
|
60
|
-
* - PostgreSQL: extract(epoch from now()), to_timestamp(ts)
|
|
61
|
-
*
|
|
62
|
-
* @param sql - SQL statement
|
|
63
|
-
* @param targetFormat - Target database format
|
|
64
|
-
* @returns SQL with converted timestamp functions
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* // SQLite → MySQL
|
|
68
|
-
* convertTimestampFunctions("SELECT unixepoch(), datetime(ts, 'unixepoch')", 'mysql')
|
|
69
|
-
* // Returns: "SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)"
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* // SQLite → PostgreSQL
|
|
73
|
-
* convertTimestampFunctions("SELECT unixepoch()", 'postgresql')
|
|
74
|
-
* // Returns: "SELECT extract(epoch from now())::integer"
|
|
75
|
-
*/
|
|
76
|
-
export declare function convertTimestampFunctions(sql: string, targetFormat: DatabaseFormat): string;
|
|
77
|
-
/**
|
|
78
|
-
* Convert boolean default values between databases
|
|
79
|
-
*
|
|
80
|
-
* Boolean default variations:
|
|
81
|
-
* - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
|
|
82
|
-
* - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
|
|
83
|
-
* - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
|
|
84
|
-
*
|
|
85
|
-
* @param sql - SQL statement
|
|
86
|
-
* @param targetFormat - Target database format
|
|
87
|
-
* @returns SQL with converted boolean defaults
|
|
88
|
-
*
|
|
89
|
-
* @example
|
|
90
|
-
* // SQLite → PostgreSQL
|
|
91
|
-
* convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
|
|
92
|
-
* // Returns: "is_active BOOLEAN default false"
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* // SQLite → PostgreSQL (numeric)
|
|
96
|
-
* convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
|
|
97
|
-
* // Returns: "is_active BOOLEAN default true"
|
|
98
|
-
*/
|
|
99
|
-
export declare function convertBooleanDefaults(sql: string, targetFormat: DatabaseFormat): string;
|
|
100
|
-
/**
|
|
101
|
-
* Convert data type keywords between databases
|
|
102
|
-
*
|
|
103
|
-
* Type conversions:
|
|
104
|
-
* - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
|
|
105
|
-
* - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
|
|
106
|
-
* - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
|
|
107
|
-
* - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
|
|
108
|
-
* - SQLite datetime → PostgreSQL TIMESTAMP
|
|
109
|
-
* - MySQL TEXT → VARCHAR for compatibility
|
|
110
|
-
*
|
|
111
|
-
* MySQL/MariaDB limitations:
|
|
112
|
-
* - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
|
|
113
|
-
* - TEXT columns cannot have DEFAULT values
|
|
114
|
-
* - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
|
|
115
|
-
*
|
|
116
|
-
* @param sql - SQL statement
|
|
117
|
-
* @param targetFormat - Target database format
|
|
118
|
-
* @returns SQL with converted data types
|
|
119
|
-
*
|
|
120
|
-
* @example
|
|
121
|
-
* // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
|
|
122
|
-
* convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
|
|
123
|
-
* // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
|
|
124
|
-
*
|
|
125
|
-
* @example
|
|
126
|
-
* // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
|
|
127
|
-
* convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
|
|
128
|
-
* // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
|
|
129
|
-
*
|
|
130
|
-
* @example
|
|
131
|
-
* // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
|
|
132
|
-
* convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
|
|
133
|
-
* // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
|
|
134
|
-
*
|
|
135
|
-
* @example
|
|
136
|
-
* // SQLite → MySQL (TEXT NOT NULL for FK columns)
|
|
137
|
-
* convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
|
|
138
|
-
* // Returns: "tool_name VARCHAR(255) NOT NULL"
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* // SQLite → PostgreSQL
|
|
142
|
-
* convertDataTypes("created_at datetime", 'postgresql')
|
|
143
|
-
* // Returns: "created_at TIMESTAMP"
|
|
144
|
-
*/
|
|
145
|
-
export declare function convertDataTypes(sql: string, targetFormat: DatabaseFormat): string;
|
|
146
|
-
/**
|
|
147
|
-
* Remove CHECK constraints (not well-supported in some databases)
|
|
148
|
-
*
|
|
149
|
-
* CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
|
|
150
|
-
* are not consistently supported across all databases, especially MariaDB 10.5.
|
|
151
|
-
*
|
|
152
|
-
* Pattern matches: CHECK (...) including nested parentheses
|
|
153
|
-
* Example: check (`status` in ('active', 'inactive'))
|
|
154
|
-
*
|
|
155
|
-
* @param sql - SQL statement
|
|
156
|
-
* @returns SQL with CHECK constraints removed
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
|
|
160
|
-
* // Returns: "CREATE TABLE t (status TEXT )"
|
|
161
|
-
*
|
|
162
|
-
* @example
|
|
163
|
-
* // Complex nested parentheses
|
|
164
|
-
* removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
|
|
165
|
-
* // Returns: "id INT , name TEXT "
|
|
166
|
-
*/
|
|
167
|
-
export declare function removeCheckConstraints(sql: string): string;
|
|
168
|
-
/**
|
|
169
|
-
* Remove SQLite-specific DEFAULT functions (strftime, etc.)
|
|
170
|
-
*
|
|
171
|
-
* SQLite supports complex DEFAULT expressions using functions like strftime(),
|
|
172
|
-
* which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
|
|
173
|
-
*
|
|
174
|
-
* @param sql - SQL statement
|
|
175
|
-
* @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
|
|
176
|
-
*
|
|
177
|
-
* @example
|
|
178
|
-
* // Parenthesized strftime
|
|
179
|
-
* removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
|
|
180
|
-
* // Returns: "created_at INTEGER default 0"
|
|
181
|
-
*
|
|
182
|
-
* @example
|
|
183
|
-
* // Bare strftime
|
|
184
|
-
* removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
|
|
185
|
-
* // Returns: "created_at INTEGER default 0"
|
|
186
|
-
*/
|
|
187
|
-
export declare function removeSqliteDefaultFunctions(sql: string): string;
|
|
188
|
-
//# sourceMappingURL=sql-dump-converters.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sql-dump-converters.d.ts","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CAYzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,cAAc,EAC5B,YAAY,EAAE,cAAc,GAC3B,MAAM,CA6BR;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CA+B3F;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CAWxF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CA4BlF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhE"}
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
// sql-dump-converters.ts - Shared SQL syntax conversion functions
|
|
2
|
-
/**
|
|
3
|
-
* Convert identifier quotes between database formats
|
|
4
|
-
*
|
|
5
|
-
* Database-specific identifier quoting:
|
|
6
|
-
* - MySQL: backticks `identifier`
|
|
7
|
-
* - PostgreSQL: double quotes "identifier"
|
|
8
|
-
* - SQLite: double quotes "identifier" (also supports backticks)
|
|
9
|
-
*
|
|
10
|
-
* @param sql - SQL statement
|
|
11
|
-
* @param targetFormat - Target database format
|
|
12
|
-
* @returns SQL with converted identifier quotes
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // SQLite → MySQL
|
|
16
|
-
* convertIdentifierQuotes('CREATE TABLE "users" ("id" INTEGER)', 'mysql')
|
|
17
|
-
* // Returns: 'CREATE TABLE `users` (`id` INTEGER)'
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* // MySQL → PostgreSQL
|
|
21
|
-
* convertIdentifierQuotes('CREATE TABLE `users` (`id` INT)', 'postgresql')
|
|
22
|
-
* // Returns: 'CREATE TABLE "users" ("id" INT)'
|
|
23
|
-
*/
|
|
24
|
-
export function convertIdentifierQuotes(sql, targetFormat) {
|
|
25
|
-
if (targetFormat === 'mysql') {
|
|
26
|
-
// Double quotes → backticks
|
|
27
|
-
// Pattern: "word_characters" → `word_characters`
|
|
28
|
-
return sql.replace(/"(\w+)"/g, '`$1`');
|
|
29
|
-
}
|
|
30
|
-
else if (targetFormat === 'postgresql' || targetFormat === 'sqlite') {
|
|
31
|
-
// Backticks → double quotes
|
|
32
|
-
// Pattern: `alphanumeric_.-` → "alphanumeric_.-"
|
|
33
|
-
// Smart replacement: only identifier chars (not string literals)
|
|
34
|
-
return sql.replace(/`([a-zA-Z0-9_\.\-]+)`/g, '"$1"');
|
|
35
|
-
}
|
|
36
|
-
return sql;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Convert autoincrement syntax between databases
|
|
40
|
-
*
|
|
41
|
-
* Autoincrement variations:
|
|
42
|
-
* - SQLite: AUTOINCREMENT (with INTEGER PRIMARY KEY)
|
|
43
|
-
* - MySQL: AUTO_INCREMENT
|
|
44
|
-
* - PostgreSQL: SERIAL / GENERATED BY DEFAULT AS IDENTITY / GENERATED ALWAYS AS IDENTITY
|
|
45
|
-
*
|
|
46
|
-
* @param sql - SQL statement
|
|
47
|
-
* @param sourceFormat - Source database format
|
|
48
|
-
* @param targetFormat - Target database format
|
|
49
|
-
* @returns SQL with converted autoincrement syntax
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* // SQLite → MySQL
|
|
53
|
-
* convertAutoIncrement('id INTEGER PRIMARY KEY AUTOINCREMENT', 'sqlite', 'mysql')
|
|
54
|
-
* // Returns: 'id INTEGER PRIMARY KEY AUTO_INCREMENT'
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* // SQLite → PostgreSQL (allow explicit ID values during import)
|
|
58
|
-
* convertAutoIncrement('id INTEGER AUTOINCREMENT', 'sqlite', 'postgresql')
|
|
59
|
-
* // Returns: 'id INTEGER GENERATED BY DEFAULT AS IDENTITY'
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* // MySQL → SQLite
|
|
63
|
-
* convertAutoIncrement('id INT AUTO_INCREMENT', 'mysql', 'sqlite')
|
|
64
|
-
* // Returns: 'id INT AUTOINCREMENT'
|
|
65
|
-
*/
|
|
66
|
-
export function convertAutoIncrement(sql, sourceFormat, targetFormat) {
|
|
67
|
-
if (sourceFormat === 'sqlite' && targetFormat === 'mysql') {
|
|
68
|
-
// SQLite → MySQL: AUTOINCREMENT → AUTO_INCREMENT
|
|
69
|
-
return sql.replace(/AUTOINCREMENT/gi, 'AUTO_INCREMENT');
|
|
70
|
-
}
|
|
71
|
-
else if (sourceFormat === 'sqlite' && targetFormat === 'postgresql') {
|
|
72
|
-
// SQLite → PostgreSQL: Two patterns
|
|
73
|
-
// 1. INTEGER PRIMARY KEY AUTOINCREMENT → SERIAL PRIMARY KEY
|
|
74
|
-
sql = sql.replace(/INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/gi, 'SERIAL PRIMARY KEY');
|
|
75
|
-
// 2. AUTOINCREMENT → GENERATED BY DEFAULT AS IDENTITY (allows explicit values)
|
|
76
|
-
sql = sql.replace(/AUTOINCREMENT/gi, 'GENERATED BY DEFAULT AS IDENTITY');
|
|
77
|
-
return sql;
|
|
78
|
-
}
|
|
79
|
-
else if (sourceFormat === 'mysql' && targetFormat === 'sqlite') {
|
|
80
|
-
// MySQL → SQLite: AUTO_INCREMENT → AUTOINCREMENT
|
|
81
|
-
return sql.replace(/AUTO_INCREMENT/gi, 'AUTOINCREMENT');
|
|
82
|
-
}
|
|
83
|
-
else if (sourceFormat === 'mysql' && targetFormat === 'postgresql') {
|
|
84
|
-
// MySQL → PostgreSQL: AUTO_INCREMENT → GENERATED ALWAYS AS IDENTITY
|
|
85
|
-
return sql.replace(/AUTO_INCREMENT/gi, 'GENERATED ALWAYS AS IDENTITY');
|
|
86
|
-
}
|
|
87
|
-
else if (sourceFormat === 'postgresql' && targetFormat === 'sqlite') {
|
|
88
|
-
// PostgreSQL → SQLite: SERIAL / GENERATED → AUTOINCREMENT
|
|
89
|
-
sql = sql.replace(/SERIAL/gi, 'INTEGER');
|
|
90
|
-
sql = sql.replace(/GENERATED\s+(?:ALWAYS|BY\s+DEFAULT)\s+AS\s+IDENTITY/gi, 'AUTOINCREMENT');
|
|
91
|
-
return sql;
|
|
92
|
-
}
|
|
93
|
-
else if (sourceFormat === 'postgresql' && targetFormat === 'mysql') {
|
|
94
|
-
// PostgreSQL → MySQL: SERIAL / GENERATED → AUTO_INCREMENT
|
|
95
|
-
sql = sql.replace(/SERIAL/gi, 'INT');
|
|
96
|
-
sql = sql.replace(/GENERATED\s+(?:ALWAYS|BY\s+DEFAULT)\s+AS\s+IDENTITY/gi, 'AUTO_INCREMENT');
|
|
97
|
-
return sql;
|
|
98
|
-
}
|
|
99
|
-
return sql;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Convert timestamp/datetime functions between databases
|
|
103
|
-
*
|
|
104
|
-
* Timestamp function variations:
|
|
105
|
-
* - SQLite: unixepoch(), datetime(ts, 'unixepoch')
|
|
106
|
-
* - MySQL: UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)
|
|
107
|
-
* - PostgreSQL: extract(epoch from now()), to_timestamp(ts)
|
|
108
|
-
*
|
|
109
|
-
* @param sql - SQL statement
|
|
110
|
-
* @param targetFormat - Target database format
|
|
111
|
-
* @returns SQL with converted timestamp functions
|
|
112
|
-
*
|
|
113
|
-
* @example
|
|
114
|
-
* // SQLite → MySQL
|
|
115
|
-
* convertTimestampFunctions("SELECT unixepoch(), datetime(ts, 'unixepoch')", 'mysql')
|
|
116
|
-
* // Returns: "SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)"
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* // SQLite → PostgreSQL
|
|
120
|
-
* convertTimestampFunctions("SELECT unixepoch()", 'postgresql')
|
|
121
|
-
* // Returns: "SELECT extract(epoch from now())::integer"
|
|
122
|
-
*/
|
|
123
|
-
export function convertTimestampFunctions(sql, targetFormat) {
|
|
124
|
-
if (targetFormat === 'mysql') {
|
|
125
|
-
// SQLite → MySQL timestamp functions
|
|
126
|
-
// Special handling for DEFAULT clauses - need CAST wrapper for type safety
|
|
127
|
-
sql = sql.replace(/DEFAULT\s*\(\s*unixepoch\(\)\s*\)/gi, 'DEFAULT (CAST(UNIX_TIMESTAMP() AS SIGNED))');
|
|
128
|
-
sql = sql.replace(/DEFAULT\s*\(\s*strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)\s*\)/gi, 'DEFAULT (CAST(UNIX_TIMESTAMP() AS SIGNED))');
|
|
129
|
-
// Regular conversions (non-DEFAULT contexts)
|
|
130
|
-
sql = sql.replace(/unixepoch\(\)/g, 'UNIX_TIMESTAMP()');
|
|
131
|
-
sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'FROM_UNIXTIME($1)');
|
|
132
|
-
// strftime('%s', 'now') → UNIX_TIMESTAMP()
|
|
133
|
-
sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'UNIX_TIMESTAMP()');
|
|
134
|
-
return sql;
|
|
135
|
-
}
|
|
136
|
-
else if (targetFormat === 'postgresql') {
|
|
137
|
-
// SQLite/MySQL → PostgreSQL timestamp functions
|
|
138
|
-
sql = sql.replace(/unixepoch\(\)/g, 'extract(epoch from now())::integer');
|
|
139
|
-
sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'to_timestamp($1)');
|
|
140
|
-
sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'extract(epoch from now())::integer');
|
|
141
|
-
sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, 'to_timestamp($1)');
|
|
142
|
-
// strftime('%s', 'now') → extract(epoch from now())::integer
|
|
143
|
-
sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'extract(epoch from now())::integer');
|
|
144
|
-
return sql;
|
|
145
|
-
}
|
|
146
|
-
else if (targetFormat === 'sqlite') {
|
|
147
|
-
// MySQL/PostgreSQL → SQLite timestamp functions
|
|
148
|
-
sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'unixepoch()');
|
|
149
|
-
sql = sql.replace(/extract\(epoch from now\(\)\)::integer/g, 'unixepoch()');
|
|
150
|
-
sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
|
|
151
|
-
sql = sql.replace(/to_timestamp\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
|
|
152
|
-
return sql;
|
|
153
|
-
}
|
|
154
|
-
return sql;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Convert boolean default values between databases
|
|
158
|
-
*
|
|
159
|
-
* Boolean default variations:
|
|
160
|
-
* - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
|
|
161
|
-
* - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
|
|
162
|
-
* - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
|
|
163
|
-
*
|
|
164
|
-
* @param sql - SQL statement
|
|
165
|
-
* @param targetFormat - Target database format
|
|
166
|
-
* @returns SQL with converted boolean defaults
|
|
167
|
-
*
|
|
168
|
-
* @example
|
|
169
|
-
* // SQLite → PostgreSQL
|
|
170
|
-
* convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
|
|
171
|
-
* // Returns: "is_active BOOLEAN default false"
|
|
172
|
-
*
|
|
173
|
-
* @example
|
|
174
|
-
* // SQLite → PostgreSQL (numeric)
|
|
175
|
-
* convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
|
|
176
|
-
* // Returns: "is_active BOOLEAN default true"
|
|
177
|
-
*/
|
|
178
|
-
export function convertBooleanDefaults(sql, targetFormat) {
|
|
179
|
-
if (targetFormat === 'postgresql') {
|
|
180
|
-
// Convert string boolean defaults: '0' → false, '1' → true
|
|
181
|
-
sql = sql.replace(/boolean\s+default\s+'0'/gi, 'boolean default false');
|
|
182
|
-
sql = sql.replace(/boolean\s+default\s+'1'/gi, 'boolean default true');
|
|
183
|
-
// Convert numeric boolean defaults: 0 → false, 1 → true
|
|
184
|
-
sql = sql.replace(/boolean\s+default\s+0\b/gi, 'boolean default false');
|
|
185
|
-
sql = sql.replace(/boolean\s+default\s+1\b/gi, 'boolean default true');
|
|
186
|
-
return sql;
|
|
187
|
-
}
|
|
188
|
-
return sql;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Convert data type keywords between databases
|
|
192
|
-
*
|
|
193
|
-
* Type conversions:
|
|
194
|
-
* - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
|
|
195
|
-
* - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
|
|
196
|
-
* - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
|
|
197
|
-
* - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
|
|
198
|
-
* - SQLite datetime → PostgreSQL TIMESTAMP
|
|
199
|
-
* - MySQL TEXT → VARCHAR for compatibility
|
|
200
|
-
*
|
|
201
|
-
* MySQL/MariaDB limitations:
|
|
202
|
-
* - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
|
|
203
|
-
* - TEXT columns cannot have DEFAULT values
|
|
204
|
-
* - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
|
|
205
|
-
*
|
|
206
|
-
* @param sql - SQL statement
|
|
207
|
-
* @param targetFormat - Target database format
|
|
208
|
-
* @returns SQL with converted data types
|
|
209
|
-
*
|
|
210
|
-
* @example
|
|
211
|
-
* // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
|
|
212
|
-
* convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
|
|
213
|
-
* // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
|
|
214
|
-
*
|
|
215
|
-
* @example
|
|
216
|
-
* // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
|
|
217
|
-
* convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
|
|
218
|
-
* // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
|
|
219
|
-
*
|
|
220
|
-
* @example
|
|
221
|
-
* // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
|
|
222
|
-
* convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
|
|
223
|
-
* // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
|
|
224
|
-
*
|
|
225
|
-
* @example
|
|
226
|
-
* // SQLite → MySQL (TEXT NOT NULL for FK columns)
|
|
227
|
-
* convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
|
|
228
|
-
* // Returns: "tool_name VARCHAR(255) NOT NULL"
|
|
229
|
-
*
|
|
230
|
-
* @example
|
|
231
|
-
* // SQLite → PostgreSQL
|
|
232
|
-
* convertDataTypes("created_at datetime", 'postgresql')
|
|
233
|
-
* // Returns: "created_at TIMESTAMP"
|
|
234
|
-
*/
|
|
235
|
-
export function convertDataTypes(sql, targetFormat) {
|
|
236
|
-
if (targetFormat === 'mysql') {
|
|
237
|
-
// MariaDB 10.5 and MySQL don't allow TEXT columns as PRIMARY KEY
|
|
238
|
-
// Convert TEXT PRIMARY KEY to VARCHAR(191) PRIMARY KEY
|
|
239
|
-
// 191 is the safe max for utf8mb4 with InnoDB index prefix limit (767 bytes / 4 bytes per char)
|
|
240
|
-
sql = sql.replace(/\bTEXT(\s+PRIMARY\s+KEY)/gi, 'VARCHAR(191)$1');
|
|
241
|
-
// MySQL doesn't allow TEXT columns in UNIQUE constraints
|
|
242
|
-
// Convert TEXT UNIQUE to VARCHAR(191) UNIQUE
|
|
243
|
-
sql = sql.replace(/\bTEXT(\s+UNIQUE)/gi, 'VARCHAR(191)$1');
|
|
244
|
-
// MySQL doesn't allow TEXT columns in indexes (including FOREIGN KEY references)
|
|
245
|
-
// Convert TEXT NOT NULL (commonly used in FK columns) to VARCHAR(255) NOT NULL
|
|
246
|
-
// This must come BEFORE the default pattern to avoid conflicts
|
|
247
|
-
sql = sql.replace(/\bTEXT(\s+NOT\s+NULL)(?!\s+default)/gi, 'VARCHAR(255)$1');
|
|
248
|
-
// MySQL doesn't allow DEFAULT values on TEXT columns
|
|
249
|
-
// Convert TEXT with defaults to VARCHAR(255)
|
|
250
|
-
// Pattern: TEXT followed by optional NOT NULL, then default
|
|
251
|
-
sql = sql.replace(/\bTEXT(\s+(?:NOT\s+NULL\s+)?default\s+[^,\)]+)/gi, 'VARCHAR(255)$1');
|
|
252
|
-
return sql;
|
|
253
|
-
}
|
|
254
|
-
else if (targetFormat === 'postgresql') {
|
|
255
|
-
// Convert datetime → TIMESTAMP
|
|
256
|
-
sql = sql.replace(/\bdatetime\b/gi, 'TIMESTAMP');
|
|
257
|
-
return sql;
|
|
258
|
-
}
|
|
259
|
-
return sql;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Remove CHECK constraints (not well-supported in some databases)
|
|
263
|
-
*
|
|
264
|
-
* CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
|
|
265
|
-
* are not consistently supported across all databases, especially MariaDB 10.5.
|
|
266
|
-
*
|
|
267
|
-
* Pattern matches: CHECK (...) including nested parentheses
|
|
268
|
-
* Example: check (`status` in ('active', 'inactive'))
|
|
269
|
-
*
|
|
270
|
-
* @param sql - SQL statement
|
|
271
|
-
* @returns SQL with CHECK constraints removed
|
|
272
|
-
*
|
|
273
|
-
* @example
|
|
274
|
-
* removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
|
|
275
|
-
* // Returns: "CREATE TABLE t (status TEXT )"
|
|
276
|
-
*
|
|
277
|
-
* @example
|
|
278
|
-
* // Complex nested parentheses
|
|
279
|
-
* removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
|
|
280
|
-
* // Returns: "id INT , name TEXT "
|
|
281
|
-
*/
|
|
282
|
-
export function removeCheckConstraints(sql) {
|
|
283
|
-
// Pattern: \s+check\s*\( matches " check ("
|
|
284
|
-
// [^()]* matches non-parenthesis characters
|
|
285
|
-
// (?:\([^()]*\)[^()]*)* handles one level of nested parentheses
|
|
286
|
-
// Example: check (col in ('a', 'b')) where ('a', 'b') are nested parens
|
|
287
|
-
return sql.replace(/\s+check\s*\([^()]*(?:\([^()]*\)[^()]*)*\)/gi, '');
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Remove SQLite-specific DEFAULT functions (strftime, etc.)
|
|
291
|
-
*
|
|
292
|
-
* SQLite supports complex DEFAULT expressions using functions like strftime(),
|
|
293
|
-
* which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
|
|
294
|
-
*
|
|
295
|
-
* @param sql - SQL statement
|
|
296
|
-
* @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
|
|
297
|
-
*
|
|
298
|
-
* @example
|
|
299
|
-
* // Parenthesized strftime
|
|
300
|
-
* removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
|
|
301
|
-
* // Returns: "created_at INTEGER default 0"
|
|
302
|
-
*
|
|
303
|
-
* @example
|
|
304
|
-
* // Bare strftime
|
|
305
|
-
* removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
|
|
306
|
-
* // Returns: "created_at INTEGER default 0"
|
|
307
|
-
*/
|
|
308
|
-
export function removeSqliteDefaultFunctions(sql) {
|
|
309
|
-
// Pattern 1: default (strftime(...))
|
|
310
|
-
sql = sql.replace(/default\s*\(strftime\([^)]+\)\)/gi, 'default 0');
|
|
311
|
-
// Pattern 2: default strftime(...)
|
|
312
|
-
sql = sql.replace(/default\s+strftime\([^)]+\)/gi, 'default 0');
|
|
313
|
-
return sql;
|
|
314
|
-
}
|
|
315
|
-
//# sourceMappingURL=sql-dump-converters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sql-dump-converters.js","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"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"}
|