sqlew 3.6.10 → 3.7.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 +318 -0
- package/README.md +54 -39
- package/assets/config.example.toml +93 -0
- package/assets/kanban-visualizer.png +0 -0
- package/assets/sample-agents/sqlew-architect.md +32 -13
- package/assets/sample-agents/sqlew-researcher.md +70 -17
- package/assets/sample-agents/sqlew-scrum-master.md +60 -25
- package/assets/schema.sql +2 -2
- package/dist/adapters/auth/auth-factory.d.ts +86 -0
- package/dist/adapters/auth/auth-factory.d.ts.map +1 -0
- package/dist/adapters/auth/auth-factory.js +103 -0
- package/dist/adapters/auth/auth-factory.js.map +1 -0
- package/dist/adapters/auth/auth-types.d.ts +30 -0
- package/dist/adapters/auth/auth-types.d.ts.map +1 -0
- package/dist/adapters/auth/auth-types.js +30 -0
- package/dist/adapters/auth/auth-types.js.map +1 -0
- package/dist/adapters/auth/base-auth-provider.d.ts +327 -0
- package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -0
- package/dist/adapters/auth/base-auth-provider.js +111 -0
- package/dist/adapters/auth/base-auth-provider.js.map +1 -0
- package/dist/adapters/auth/direct-auth-provider.d.ts +356 -0
- package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -0
- package/dist/adapters/auth/direct-auth-provider.js +406 -0
- package/dist/adapters/auth/direct-auth-provider.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +638 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +557 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +13 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +27 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mysql-adapter.d.ts +547 -6
- package/dist/adapters/mysql-adapter.d.ts.map +1 -1
- package/dist/adapters/mysql-adapter.js +651 -32
- package/dist/adapters/mysql-adapter.js.map +1 -1
- package/dist/adapters/postgresql-adapter.d.ts +15 -4
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +19 -2
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/adapters/sqlite-adapter.d.ts +35 -5
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +57 -18
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/cli/db-dump.d.ts +32 -0
- package/dist/cli/db-dump.d.ts.map +1 -0
- package/dist/cli/db-dump.js +409 -0
- package/dist/cli/db-dump.js.map +1 -0
- package/dist/cli.js +24 -14
- package/dist/cli.js.map +1 -1
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.js +7 -2
- package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.js +49 -50
- package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.js +11 -6
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
- package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.js +66 -14
- package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +22 -0
- package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.js +6 -0
- package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +6 -0
- package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.js +6 -0
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +7 -0
- package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +62 -0
- package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.js +6 -0
- package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
- package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.js +6 -0
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +13 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +48 -0
- package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +1 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +24 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +189 -0
- package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +16 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +65 -0
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +23 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +118 -0
- package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +49 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +864 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
- package/dist/config/loader.d.ts +19 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +149 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +261 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/writer.d.ts +65 -0
- package/dist/config/writer.d.ts.map +1 -0
- package/dist/config/writer.js +139 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/database.d.ts +11 -2
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +62 -6
- package/dist/database.js.map +1 -1
- package/dist/index.js +165 -35
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +88 -12
- package/dist/knexfile.js.map +1 -1
- package/dist/tests/all-features.test.js +15 -3
- package/dist/tests/all-features.test.js.map +1 -1
- package/dist/tests/config-loader.test.d.ts +6 -0
- package/dist/tests/config-loader.test.d.ts.map +1 -0
- package/dist/tests/config-loader.test.js +201 -0
- package/dist/tests/config-loader.test.js.map +1 -0
- package/dist/tests/connection-manager-integration.test.d.ts +2 -0
- package/dist/tests/connection-manager-integration.test.d.ts.map +1 -0
- package/dist/tests/connection-manager-integration.test.js +431 -0
- package/dist/tests/connection-manager-integration.test.js.map +1 -0
- package/dist/tests/connection-manager.test.d.ts +2 -0
- package/dist/tests/connection-manager.test.d.ts.map +1 -0
- package/dist/tests/connection-manager.test.js +361 -0
- package/dist/tests/connection-manager.test.js.map +1 -0
- package/dist/tests/dump-import.test.d.ts +15 -0
- package/dist/tests/dump-import.test.d.ts.map +1 -0
- package/dist/tests/dump-import.test.js +430 -0
- package/dist/tests/dump-import.test.js.map +1 -0
- package/dist/tests/migration-idempotency.test.d.ts +2 -0
- package/dist/tests/migration-idempotency.test.d.ts.map +1 -0
- package/dist/tests/migration-idempotency.test.js +330 -0
- package/dist/tests/migration-idempotency.test.js.map +1 -0
- package/dist/tests/migration-upgrade-paths.test.d.ts +2 -0
- package/dist/tests/migration-upgrade-paths.test.d.ts.map +1 -0
- package/dist/tests/migration-upgrade-paths.test.js +248 -0
- package/dist/tests/migration-upgrade-paths.test.js.map +1 -0
- package/dist/tests/multi-project-migration.test.d.ts +17 -0
- package/dist/tests/multi-project-migration.test.d.ts.map +1 -0
- package/dist/tests/multi-project-migration.test.js +399 -0
- package/dist/tests/multi-project-migration.test.js.map +1 -0
- package/dist/tests/multi-project.test.d.ts +5 -0
- package/dist/tests/multi-project.test.d.ts.map +1 -0
- package/dist/tests/multi-project.test.js +238 -0
- package/dist/tests/multi-project.test.js.map +1 -0
- package/dist/tests/schema-migration.test.d.ts +8 -0
- package/dist/tests/schema-migration.test.d.ts.map +1 -0
- package/dist/tests/schema-migration.test.js +108 -0
- package/dist/tests/schema-migration.test.js.map +1 -0
- package/dist/tests/sql-dump-converters.test.d.ts +7 -0
- package/dist/tests/sql-dump-converters.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-converters.test.js +314 -0
- package/dist/tests/sql-dump-converters.test.js.map +1 -0
- package/dist/tests/sql-dump-cross-database.test.d.ts +21 -0
- package/dist/tests/sql-dump-cross-database.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-cross-database.test.js +314 -0
- package/dist/tests/sql-dump-cross-database.test.js.map +1 -0
- package/dist/tests/sql-dump-default-conversions.test.d.ts +8 -0
- package/dist/tests/sql-dump-default-conversions.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-default-conversions.test.js +141 -0
- package/dist/tests/sql-dump-default-conversions.test.js.map +1 -0
- package/dist/tests/sql-dump-fk-constraints.test.d.ts +13 -0
- package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-fk-constraints.test.js +381 -0
- package/dist/tests/sql-dump-fk-constraints.test.js.map +1 -0
- package/dist/tests/sql-dump-indexes.test.d.ts +12 -0
- package/dist/tests/sql-dump-indexes.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-indexes.test.js +269 -0
- package/dist/tests/sql-dump-indexes.test.js.map +1 -0
- package/dist/tests/sql-dump-integration.test.d.ts +16 -0
- package/dist/tests/sql-dump-integration.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-integration.test.js +342 -0
- package/dist/tests/sql-dump-integration.test.js.map +1 -0
- package/dist/tests/sql-dump-table-ordering.test.d.ts +8 -0
- package/dist/tests/sql-dump-table-ordering.test.d.ts.map +1 -0
- package/dist/tests/sql-dump-table-ordering.test.js +253 -0
- package/dist/tests/sql-dump-table-ordering.test.js.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js +11 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +11 -1
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/type-conversion.test.d.ts +8 -0
- package/dist/tests/type-conversion.test.d.ts.map +1 -0
- package/dist/tests/type-conversion.test.js +312 -0
- package/dist/tests/type-conversion.test.js.map +1 -0
- package/dist/tests/utils/test-helpers.d.ts +93 -0
- package/dist/tests/utils/test-helpers.d.ts.map +1 -0
- package/dist/tests/utils/test-helpers.js +407 -0
- package/dist/tests/utils/test-helpers.js.map +1 -0
- package/dist/tools/config.d.ts +58 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +281 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +138 -122
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +216 -109
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +123 -102
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +581 -518
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +5 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +176 -122
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +9 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cleanup.d.ts +3 -0
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +14 -2
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/connection-manager.d.ts +59 -0
- package/dist/utils/connection-manager.d.ts.map +1 -0
- package/dist/utils/connection-manager.js +178 -0
- package/dist/utils/connection-manager.js.map +1 -0
- package/dist/utils/debug-logger.d.ts +8 -4
- package/dist/utils/debug-logger.d.ts.map +1 -1
- package/dist/utils/debug-logger.js +27 -7
- package/dist/utils/debug-logger.js.map +1 -1
- package/dist/utils/error-handler.d.ts +2 -2
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +10 -7
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js +36 -15
- package/dist/utils/parameter-validator.js.map +1 -1
- package/dist/utils/project-context.d.ts +111 -0
- package/dist/utils/project-context.d.ts.map +1 -0
- package/dist/utils/project-context.js +187 -0
- package/dist/utils/project-context.js.map +1 -0
- package/dist/utils/sql-dump-converters.d.ts +188 -0
- package/dist/utils/sql-dump-converters.d.ts.map +1 -0
- package/dist/utils/sql-dump-converters.js +311 -0
- package/dist/utils/sql-dump-converters.js.map +1 -0
- package/dist/utils/sql-dump.d.ts +102 -0
- package/dist/utils/sql-dump.d.ts.map +1 -0
- package/dist/utils/sql-dump.js +1550 -0
- package/dist/utils/sql-dump.js.map +1 -0
- package/dist/utils/vcs-adapter.d.ts +42 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -1
- package/dist/utils/vcs-adapter.js +154 -0
- package/dist/utils/vcs-adapter.js.map +1 -1
- package/docs/BASEADAPTER_IMPLEMENTATION.md +399 -0
- package/docs/DATABASE_AUTH.md +445 -0
- package/docs/DATABASE_MIGRATION.md +247 -0
- package/docs/MULTI_PROJECT_ARCHITECTURE.md +497 -0
- package/package.json +12 -4
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
- package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -15
- package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -34
- package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
- package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
- package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
- package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
- /package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.js +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -0
- /package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -0
- /package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -0
- /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -0
|
@@ -0,0 +1,311 @@
|
|
|
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
|
+
sql = sql.replace(/unixepoch\(\)/g, 'UNIX_TIMESTAMP()');
|
|
127
|
+
sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'FROM_UNIXTIME($1)');
|
|
128
|
+
// strftime('%s', 'now') → UNIX_TIMESTAMP()
|
|
129
|
+
sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'UNIX_TIMESTAMP()');
|
|
130
|
+
return sql;
|
|
131
|
+
}
|
|
132
|
+
else if (targetFormat === 'postgresql') {
|
|
133
|
+
// SQLite/MySQL → PostgreSQL timestamp functions
|
|
134
|
+
sql = sql.replace(/unixepoch\(\)/g, 'extract(epoch from now())::integer');
|
|
135
|
+
sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'to_timestamp($1)');
|
|
136
|
+
sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'extract(epoch from now())::integer');
|
|
137
|
+
sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, 'to_timestamp($1)');
|
|
138
|
+
// strftime('%s', 'now') → extract(epoch from now())::integer
|
|
139
|
+
sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'extract(epoch from now())::integer');
|
|
140
|
+
return sql;
|
|
141
|
+
}
|
|
142
|
+
else if (targetFormat === 'sqlite') {
|
|
143
|
+
// MySQL/PostgreSQL → SQLite timestamp functions
|
|
144
|
+
sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'unixepoch()');
|
|
145
|
+
sql = sql.replace(/extract\(epoch from now\(\)\)::integer/g, 'unixepoch()');
|
|
146
|
+
sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
|
|
147
|
+
sql = sql.replace(/to_timestamp\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
|
|
148
|
+
return sql;
|
|
149
|
+
}
|
|
150
|
+
return sql;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Convert boolean default values between databases
|
|
154
|
+
*
|
|
155
|
+
* Boolean default variations:
|
|
156
|
+
* - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
|
|
157
|
+
* - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
|
|
158
|
+
* - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
|
|
159
|
+
*
|
|
160
|
+
* @param sql - SQL statement
|
|
161
|
+
* @param targetFormat - Target database format
|
|
162
|
+
* @returns SQL with converted boolean defaults
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* // SQLite → PostgreSQL
|
|
166
|
+
* convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
|
|
167
|
+
* // Returns: "is_active BOOLEAN default false"
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* // SQLite → PostgreSQL (numeric)
|
|
171
|
+
* convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
|
|
172
|
+
* // Returns: "is_active BOOLEAN default true"
|
|
173
|
+
*/
|
|
174
|
+
export function convertBooleanDefaults(sql, targetFormat) {
|
|
175
|
+
if (targetFormat === 'postgresql') {
|
|
176
|
+
// Convert string boolean defaults: '0' → false, '1' → true
|
|
177
|
+
sql = sql.replace(/boolean\s+default\s+'0'/gi, 'boolean default false');
|
|
178
|
+
sql = sql.replace(/boolean\s+default\s+'1'/gi, 'boolean default true');
|
|
179
|
+
// Convert numeric boolean defaults: 0 → false, 1 → true
|
|
180
|
+
sql = sql.replace(/boolean\s+default\s+0\b/gi, 'boolean default false');
|
|
181
|
+
sql = sql.replace(/boolean\s+default\s+1\b/gi, 'boolean default true');
|
|
182
|
+
return sql;
|
|
183
|
+
}
|
|
184
|
+
return sql;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Convert data type keywords between databases
|
|
188
|
+
*
|
|
189
|
+
* Type conversions:
|
|
190
|
+
* - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
|
|
191
|
+
* - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
|
|
192
|
+
* - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
|
|
193
|
+
* - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
|
|
194
|
+
* - SQLite datetime → PostgreSQL TIMESTAMP
|
|
195
|
+
* - MySQL TEXT → VARCHAR for compatibility
|
|
196
|
+
*
|
|
197
|
+
* MySQL/MariaDB limitations:
|
|
198
|
+
* - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
|
|
199
|
+
* - TEXT columns cannot have DEFAULT values
|
|
200
|
+
* - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
|
|
201
|
+
*
|
|
202
|
+
* @param sql - SQL statement
|
|
203
|
+
* @param targetFormat - Target database format
|
|
204
|
+
* @returns SQL with converted data types
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
|
|
208
|
+
* convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
|
|
209
|
+
* // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
|
|
213
|
+
* convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
|
|
214
|
+
* // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
|
|
218
|
+
* convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
|
|
219
|
+
* // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* // SQLite → MySQL (TEXT NOT NULL for FK columns)
|
|
223
|
+
* convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
|
|
224
|
+
* // Returns: "tool_name VARCHAR(255) NOT NULL"
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* // SQLite → PostgreSQL
|
|
228
|
+
* convertDataTypes("created_at datetime", 'postgresql')
|
|
229
|
+
* // Returns: "created_at TIMESTAMP"
|
|
230
|
+
*/
|
|
231
|
+
export function convertDataTypes(sql, targetFormat) {
|
|
232
|
+
if (targetFormat === 'mysql') {
|
|
233
|
+
// MariaDB 10.5 and MySQL don't allow TEXT columns as PRIMARY KEY
|
|
234
|
+
// Convert TEXT PRIMARY KEY to VARCHAR(191) PRIMARY KEY
|
|
235
|
+
// 191 is the safe max for utf8mb4 with InnoDB index prefix limit (767 bytes / 4 bytes per char)
|
|
236
|
+
sql = sql.replace(/\bTEXT(\s+PRIMARY\s+KEY)/gi, 'VARCHAR(191)$1');
|
|
237
|
+
// MySQL doesn't allow TEXT columns in UNIQUE constraints
|
|
238
|
+
// Convert TEXT UNIQUE to VARCHAR(191) UNIQUE
|
|
239
|
+
sql = sql.replace(/\bTEXT(\s+UNIQUE)/gi, 'VARCHAR(191)$1');
|
|
240
|
+
// MySQL doesn't allow TEXT columns in indexes (including FOREIGN KEY references)
|
|
241
|
+
// Convert TEXT NOT NULL (commonly used in FK columns) to VARCHAR(255) NOT NULL
|
|
242
|
+
// This must come BEFORE the default pattern to avoid conflicts
|
|
243
|
+
sql = sql.replace(/\bTEXT(\s+NOT\s+NULL)(?!\s+default)/gi, 'VARCHAR(255)$1');
|
|
244
|
+
// MySQL doesn't allow DEFAULT values on TEXT columns
|
|
245
|
+
// Convert TEXT with defaults to VARCHAR(255)
|
|
246
|
+
// Pattern: TEXT followed by optional NOT NULL, then default
|
|
247
|
+
sql = sql.replace(/\bTEXT(\s+(?:NOT\s+NULL\s+)?default\s+[^,\)]+)/gi, 'VARCHAR(255)$1');
|
|
248
|
+
return sql;
|
|
249
|
+
}
|
|
250
|
+
else if (targetFormat === 'postgresql') {
|
|
251
|
+
// Convert datetime → TIMESTAMP
|
|
252
|
+
sql = sql.replace(/\bdatetime\b/gi, 'TIMESTAMP');
|
|
253
|
+
return sql;
|
|
254
|
+
}
|
|
255
|
+
return sql;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Remove CHECK constraints (not well-supported in some databases)
|
|
259
|
+
*
|
|
260
|
+
* CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
|
|
261
|
+
* are not consistently supported across all databases, especially MariaDB 10.5.
|
|
262
|
+
*
|
|
263
|
+
* Pattern matches: CHECK (...) including nested parentheses
|
|
264
|
+
* Example: check (`status` in ('active', 'inactive'))
|
|
265
|
+
*
|
|
266
|
+
* @param sql - SQL statement
|
|
267
|
+
* @returns SQL with CHECK constraints removed
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
|
|
271
|
+
* // Returns: "CREATE TABLE t (status TEXT )"
|
|
272
|
+
*
|
|
273
|
+
* @example
|
|
274
|
+
* // Complex nested parentheses
|
|
275
|
+
* removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
|
|
276
|
+
* // Returns: "id INT , name TEXT "
|
|
277
|
+
*/
|
|
278
|
+
export function removeCheckConstraints(sql) {
|
|
279
|
+
// Pattern: \s+check\s*\( matches " check ("
|
|
280
|
+
// [^()]* matches non-parenthesis characters
|
|
281
|
+
// (?:\([^()]*\)[^()]*)* handles one level of nested parentheses
|
|
282
|
+
// Example: check (col in ('a', 'b')) where ('a', 'b') are nested parens
|
|
283
|
+
return sql.replace(/\s+check\s*\([^()]*(?:\([^()]*\)[^()]*)*\)/gi, '');
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Remove SQLite-specific DEFAULT functions (strftime, etc.)
|
|
287
|
+
*
|
|
288
|
+
* SQLite supports complex DEFAULT expressions using functions like strftime(),
|
|
289
|
+
* which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
|
|
290
|
+
*
|
|
291
|
+
* @param sql - SQL statement
|
|
292
|
+
* @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* // Parenthesized strftime
|
|
296
|
+
* removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
|
|
297
|
+
* // Returns: "created_at INTEGER default 0"
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* // Bare strftime
|
|
301
|
+
* removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
|
|
302
|
+
* // Returns: "created_at INTEGER default 0"
|
|
303
|
+
*/
|
|
304
|
+
export function removeSqliteDefaultFunctions(sql) {
|
|
305
|
+
// Pattern 1: default (strftime(...))
|
|
306
|
+
sql = sql.replace(/default\s*\(strftime\([^)]+\)\)/gi, 'default 0');
|
|
307
|
+
// Pattern 2: default strftime(...)
|
|
308
|
+
sql = sql.replace(/default\s+strftime\([^)]+\)/gi, 'default 0');
|
|
309
|
+
return sql;
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=sql-dump-converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-dump-converters.js","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import { type DatabaseFormat } from './sql-dump-converters.js';
|
|
3
|
+
export type { DatabaseFormat };
|
|
4
|
+
export type ConflictMode = 'error' | 'ignore' | 'replace';
|
|
5
|
+
/**
|
|
6
|
+
* Quote identifier (table or column name) for target database
|
|
7
|
+
*/
|
|
8
|
+
export declare function quoteIdentifier(name: string, format: DatabaseFormat): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get primary key columns for a table
|
|
11
|
+
*/
|
|
12
|
+
export declare function getPrimaryKeyColumns(knex: Knex, table: string): Promise<string[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Get CREATE TABLE statement for a table using knex-schema-inspector
|
|
15
|
+
* Replaces regex-based SQL conversion with metadata-driven approach
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCreateTableStatement(knex: Knex, table: string, targetFormat: DatabaseFormat): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Get all table names from the database (excluding system tables)
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAllTables(knex: Knex, includeKnexTables?: boolean): Promise<string[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Get all view names from the database
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAllViews(knex: Knex): Promise<string[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Get all indexes for a table
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAllIndexes(knex: Knex, table: string): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Get CREATE INDEX statement for an index
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCreateIndexStatement(knex: Knex, indexName: string, targetFormat: DatabaseFormat): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Get CREATE VIEW statement for a view
|
|
36
|
+
*/
|
|
37
|
+
export declare function getCreateViewStatement(knex: Knex, viewName: string, targetFormat: DatabaseFormat): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Format a value for SQL insertion
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatValue(value: any, format: DatabaseFormat, table?: string, column?: string, columnType?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Convert value with type-aware conversion for cross-database migration
|
|
44
|
+
* Uses Knex columnInfo() metadata for accurate type detection
|
|
45
|
+
*
|
|
46
|
+
* @internal - Exported for testing only
|
|
47
|
+
*/
|
|
48
|
+
export declare function convertValueWithType(value: any, columnName: string, columnInfo: Map<string, any>, // From knex(table).columnInfo()
|
|
49
|
+
sourceFormat: DatabaseFormat, targetFormat: DatabaseFormat): string;
|
|
50
|
+
/**
|
|
51
|
+
* Generate a bulk INSERT statement for a table with conflict resolution
|
|
52
|
+
*
|
|
53
|
+
* REFACTORED: Uses Knex query builder instead of manual string construction
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateBulkInsert(table: string, rows: any[], format: DatabaseFormat, options?: {
|
|
56
|
+
chunkSize?: number;
|
|
57
|
+
conflictMode?: ConflictMode;
|
|
58
|
+
primaryKeys?: string[];
|
|
59
|
+
columnTypes?: Map<string, string>;
|
|
60
|
+
columnInfo?: Map<string, any>;
|
|
61
|
+
}): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Generate header comments for SQL dump
|
|
64
|
+
*/
|
|
65
|
+
export declare function generateHeader(format: DatabaseFormat): string;
|
|
66
|
+
/**
|
|
67
|
+
* Generate foreign key disable/enable statements
|
|
68
|
+
*/
|
|
69
|
+
export declare function generateForeignKeyControls(format: DatabaseFormat, enable: boolean): string;
|
|
70
|
+
/**
|
|
71
|
+
* Generate transaction control statements
|
|
72
|
+
*/
|
|
73
|
+
export declare function generateTransactionControl(format: DatabaseFormat, isStart: boolean): string;
|
|
74
|
+
/**
|
|
75
|
+
* Generate sequence reset statements for PostgreSQL
|
|
76
|
+
*/
|
|
77
|
+
export declare function generateSequenceResets(knex: Knex, tables: string[]): Promise<string[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Get foreign key dependencies for tables
|
|
80
|
+
* Returns a map of table -> array of tables it depends on
|
|
81
|
+
*
|
|
82
|
+
* @internal Exported for testing purposes
|
|
83
|
+
*/
|
|
84
|
+
export declare function getTableDependencies(knex: Knex, tables: string[]): Promise<Map<string, string[]>>;
|
|
85
|
+
/**
|
|
86
|
+
* Topologically sort tables by foreign key dependencies
|
|
87
|
+
* Returns tables in order where parent tables come before child tables
|
|
88
|
+
*
|
|
89
|
+
* @internal Exported for testing purposes
|
|
90
|
+
*/
|
|
91
|
+
export declare function topologicalSort(tables: string[], dependencies: Map<string, string[]>): string[];
|
|
92
|
+
/**
|
|
93
|
+
* Main function to generate complete SQL dump
|
|
94
|
+
*/
|
|
95
|
+
export declare function generateSqlDump(knex: Knex, format: DatabaseFormat, options?: {
|
|
96
|
+
tables?: string[];
|
|
97
|
+
includeHeader?: boolean;
|
|
98
|
+
includeSchema?: boolean;
|
|
99
|
+
chunkSize?: number;
|
|
100
|
+
conflictMode?: ConflictMode;
|
|
101
|
+
}): Promise<string>;
|
|
102
|
+
//# sourceMappingURL=sql-dump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-dump.d.ts","sourceRoot":"","sources":["../../src/utils/sql-dump.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAwI1D;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAU5E;AA6ID;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCvF;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAsHtH;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8B3F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6B/D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqChF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA8L1H;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+ExH;AAYD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAqE5H;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,gCAAgC;AAC9D,YAAY,EAAE,cAAc,EAC5B,YAAY,EAAE,cAAc,GAC3B,MAAM,CAuMR;AA8FD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1B,GACL,MAAM,EAAE,CAmGV;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAa7D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAe1F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ3F;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0B5F;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAkEvG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CA4B/F;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CACxB,GACL,OAAO,CAAC,MAAM,CAAC,CA2LjB"}
|