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,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Project Schema Migration Tests (v3.7.0)
|
|
3
|
+
*
|
|
4
|
+
* Tests comprehensive cross-database migration following user requirements:
|
|
5
|
+
* 1. Initialize SQLite, MySQL, MariaDB, PostgreSQL with migrations
|
|
6
|
+
* 2. Seed each database with multi-project test data
|
|
7
|
+
* 3. Export each database using sql-dump
|
|
8
|
+
* 4. Drop all schemas
|
|
9
|
+
* 5. Test whether dump SQL can be imported to all databases
|
|
10
|
+
*
|
|
11
|
+
* Uses DRY shared test utilities from test-helpers.ts
|
|
12
|
+
*
|
|
13
|
+
* NOTE: These tests require Docker containers (MySQL, MariaDB, PostgreSQL)
|
|
14
|
+
* Set SKIP_DOCKER_TESTS=true or CI=true to skip in CI environments
|
|
15
|
+
*/
|
|
16
|
+
// Skip Docker-dependent tests in CI environments
|
|
17
|
+
if (process.env.SKIP_DOCKER_TESTS === 'true' || process.env.CI === 'true') {
|
|
18
|
+
console.log('⏭️ Skipping Docker-dependent multi-project migration tests (CI environment)');
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
import { describe, it, before, after } from 'node:test';
|
|
22
|
+
import assert from 'node:assert';
|
|
23
|
+
import { generateSqlDump } from '../utils/sql-dump.js';
|
|
24
|
+
import { getDbConfig, connectDb, disconnectDb, dropAllTables, getTables, assertTableCountsMatch, assertRowCountsMatch, assertFKConstraintsExist, seedTestData, assertSeededDataExists, importSqlToDocker, } from './utils/test-helpers.js';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { existsSync, mkdirSync, unlinkSync } from 'node:fs';
|
|
27
|
+
// Test database path
|
|
28
|
+
const testDbPath = join(process.cwd(), '.sqlew/test-multi-project.db');
|
|
29
|
+
describe('Multi-Project Schema Migration Tests (v3.7.0)', () => {
|
|
30
|
+
let sqliteDb;
|
|
31
|
+
let mysqlDb;
|
|
32
|
+
let mariadbDb;
|
|
33
|
+
let postgresDb;
|
|
34
|
+
before(async () => {
|
|
35
|
+
console.log(' 📦 Setting up test databases...');
|
|
36
|
+
// Ensure test directory exists
|
|
37
|
+
const testDir = join(process.cwd(), '.sqlew');
|
|
38
|
+
if (!existsSync(testDir)) {
|
|
39
|
+
mkdirSync(testDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
// Remove existing test database
|
|
42
|
+
if (existsSync(testDbPath)) {
|
|
43
|
+
unlinkSync(testDbPath);
|
|
44
|
+
}
|
|
45
|
+
// Connect to all databases
|
|
46
|
+
const sqliteConfig = getDbConfig('sqlite', testDbPath);
|
|
47
|
+
const mysqlConfig = getDbConfig('mysql');
|
|
48
|
+
const mariadbConfig = getDbConfig('mariadb');
|
|
49
|
+
const postgresConfig = getDbConfig('postgresql');
|
|
50
|
+
sqliteDb = await connectDb(sqliteConfig);
|
|
51
|
+
mysqlDb = await connectDb(mysqlConfig);
|
|
52
|
+
mariadbDb = await connectDb(mariadbConfig);
|
|
53
|
+
postgresDb = await connectDb(postgresConfig);
|
|
54
|
+
console.log(' ✅ All databases connected');
|
|
55
|
+
});
|
|
56
|
+
after(async () => {
|
|
57
|
+
if (sqliteDb)
|
|
58
|
+
await disconnectDb(sqliteDb);
|
|
59
|
+
if (mysqlDb)
|
|
60
|
+
await disconnectDb(mysqlDb);
|
|
61
|
+
if (mariadbDb)
|
|
62
|
+
await disconnectDb(mariadbDb);
|
|
63
|
+
if (postgresDb)
|
|
64
|
+
await disconnectDb(postgresDb);
|
|
65
|
+
// Clean up test database
|
|
66
|
+
if (existsSync(testDbPath)) {
|
|
67
|
+
unlinkSync(testDbPath);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// ========================================================================
|
|
71
|
+
// REQUIREMENT 1: Initialize databases with migrations
|
|
72
|
+
// ========================================================================
|
|
73
|
+
describe('Requirement 1: Initialize databases with migrations', () => {
|
|
74
|
+
it('should initialize SQLite with migrations', async () => {
|
|
75
|
+
console.log(' 🔄 Running SQLite migrations...');
|
|
76
|
+
const [batchNo, log] = await sqliteDb.migrate.latest();
|
|
77
|
+
console.log(` ✅ Migrations completed (batch ${batchNo}, ${log.length} migrations)`);
|
|
78
|
+
// Verify multi-project tables exist
|
|
79
|
+
const hasMProjects = await sqliteDb.schema.hasTable('m_projects');
|
|
80
|
+
const hasTDecisions = await sqliteDb.schema.hasTable('t_decisions');
|
|
81
|
+
const hasTTasks = await sqliteDb.schema.hasTable('t_tasks');
|
|
82
|
+
assert.ok(hasMProjects, 'Should have m_projects table');
|
|
83
|
+
assert.ok(hasTDecisions, 'Should have t_decisions table');
|
|
84
|
+
assert.ok(hasTTasks, 'Should have t_tasks table');
|
|
85
|
+
// Verify project_id columns exist
|
|
86
|
+
const hasProjectIdInDecisions = await sqliteDb.schema.hasColumn('t_decisions', 'project_id');
|
|
87
|
+
const hasProjectIdInTasks = await sqliteDb.schema.hasColumn('t_tasks', 'project_id');
|
|
88
|
+
assert.ok(hasProjectIdInDecisions, 't_decisions should have project_id');
|
|
89
|
+
assert.ok(hasProjectIdInTasks, 't_tasks should have project_id');
|
|
90
|
+
console.log(' ✅ Multi-project schema verified');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
// ========================================================================
|
|
94
|
+
// REQUIREMENT 2: Seed each database with test data
|
|
95
|
+
// ========================================================================
|
|
96
|
+
describe('Requirement 2: Seed with multi-project test data', () => {
|
|
97
|
+
it('should seed SQLite with multi-project data', async () => {
|
|
98
|
+
console.log(' 🌱 Seeding SQLite with test data...');
|
|
99
|
+
await seedTestData(sqliteDb);
|
|
100
|
+
await assertSeededDataExists(sqliteDb);
|
|
101
|
+
// Verify multi-project isolation
|
|
102
|
+
const projects = await sqliteDb('m_projects').select();
|
|
103
|
+
assert.strictEqual(projects.length, 2, 'Should have 2 projects');
|
|
104
|
+
const decisions = await sqliteDb('t_decisions').select();
|
|
105
|
+
assert.strictEqual(decisions.length, 2, 'Should have 2 decisions');
|
|
106
|
+
// Verify decisions are in different projects
|
|
107
|
+
const project1Decisions = decisions.filter(d => d.project_id === 10);
|
|
108
|
+
const project2Decisions = decisions.filter(d => d.project_id === 20);
|
|
109
|
+
assert.strictEqual(project1Decisions.length, 1, 'Project 10 should have 1 decision');
|
|
110
|
+
assert.strictEqual(project2Decisions.length, 1, 'Project 20 should have 1 decision');
|
|
111
|
+
console.log(' ✅ Multi-project data seeded and verified');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
// ========================================================================
|
|
115
|
+
// REQUIREMENT 3: Export each database using sql-dump
|
|
116
|
+
// ========================================================================
|
|
117
|
+
describe('Requirement 3: Export databases using sql-dump', () => {
|
|
118
|
+
it('should export SQLite to MySQL format', async () => {
|
|
119
|
+
console.log(' 📤 Exporting SQLite → MySQL...');
|
|
120
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
121
|
+
includeHeader: true,
|
|
122
|
+
includeSchema: true,
|
|
123
|
+
chunkSize: 100,
|
|
124
|
+
});
|
|
125
|
+
// Verify dump contains schema and data
|
|
126
|
+
assert.ok(dump.includes('CREATE TABLE'), 'Should contain CREATE TABLE statements');
|
|
127
|
+
assert.ok(dump.includes('INSERT INTO'), 'Should contain INSERT statements');
|
|
128
|
+
assert.ok(dump.includes('m_projects'), 'Should include m_projects table');
|
|
129
|
+
assert.ok(dump.includes('t_decisions'), 'Should include t_decisions table');
|
|
130
|
+
console.log(` ✅ MySQL dump generated (${dump.length} chars)`);
|
|
131
|
+
});
|
|
132
|
+
it('should export SQLite to PostgreSQL format', async () => {
|
|
133
|
+
console.log(' 📤 Exporting SQLite → PostgreSQL...');
|
|
134
|
+
const dump = await generateSqlDump(sqliteDb, 'postgresql', {
|
|
135
|
+
includeHeader: true,
|
|
136
|
+
includeSchema: true,
|
|
137
|
+
chunkSize: 100,
|
|
138
|
+
});
|
|
139
|
+
// Verify PostgreSQL-specific syntax
|
|
140
|
+
assert.ok(dump.includes('CREATE TABLE'), 'Should contain CREATE TABLE statements');
|
|
141
|
+
assert.ok(dump.includes('INSERT INTO'), 'Should contain INSERT statements');
|
|
142
|
+
assert.ok(dump.includes('SERIAL') || dump.includes('PRIMARY KEY'), 'Should use PostgreSQL syntax');
|
|
143
|
+
console.log(` ✅ PostgreSQL dump generated (${dump.length} chars)`);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
// ========================================================================
|
|
147
|
+
// REQUIREMENT 4: Drop all schemas
|
|
148
|
+
// ========================================================================
|
|
149
|
+
describe('Requirement 4: Drop all schemas from databases', () => {
|
|
150
|
+
it('should drop all tables from MySQL', async () => {
|
|
151
|
+
console.log(' 🗑️ Dropping MySQL tables...');
|
|
152
|
+
await dropAllTables(mysqlDb, 'mysql');
|
|
153
|
+
const tables = await getTables(mysqlDb, 'mysql');
|
|
154
|
+
assert.strictEqual(tables.length, 0, 'MySQL should have no tables');
|
|
155
|
+
console.log(' ✅ MySQL tables dropped');
|
|
156
|
+
});
|
|
157
|
+
it('should drop all tables from MariaDB', async () => {
|
|
158
|
+
console.log(' 🗑️ Dropping MariaDB tables...');
|
|
159
|
+
await dropAllTables(mariadbDb, 'mariadb');
|
|
160
|
+
const tables = await getTables(mariadbDb, 'mariadb');
|
|
161
|
+
assert.strictEqual(tables.length, 0, 'MariaDB should have no tables');
|
|
162
|
+
console.log(' ✅ MariaDB tables dropped');
|
|
163
|
+
});
|
|
164
|
+
it('should drop all tables from PostgreSQL', async () => {
|
|
165
|
+
console.log(' 🗑️ Dropping PostgreSQL tables...');
|
|
166
|
+
await dropAllTables(postgresDb, 'postgresql');
|
|
167
|
+
const tables = await getTables(postgresDb, 'postgresql');
|
|
168
|
+
assert.strictEqual(tables.length, 0, 'PostgreSQL should have no tables');
|
|
169
|
+
console.log(' ✅ PostgreSQL tables dropped');
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
// ========================================================================
|
|
173
|
+
// REQUIREMENT 5: Test whether dump SQL can be imported
|
|
174
|
+
// ========================================================================
|
|
175
|
+
describe('Requirement 5: Import dump SQL to all databases', () => {
|
|
176
|
+
it('should import SQLite dump to MySQL', async () => {
|
|
177
|
+
console.log(' 📥 Importing SQLite dump → MySQL...');
|
|
178
|
+
// Generate dump
|
|
179
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
180
|
+
includeSchema: true,
|
|
181
|
+
chunkSize: 100,
|
|
182
|
+
});
|
|
183
|
+
// Import via Docker
|
|
184
|
+
const config = getDbConfig('mysql');
|
|
185
|
+
await importSqlToDocker(dump, config.containerName, 'mysql');
|
|
186
|
+
console.log(' ✅ Import completed');
|
|
187
|
+
// Verify tables exist
|
|
188
|
+
await assertTableCountsMatch(sqliteDb, 'sqlite', mysqlDb, 'mysql');
|
|
189
|
+
// Verify multi-project tables
|
|
190
|
+
const hasProjects = await mysqlDb.schema.hasTable('m_projects');
|
|
191
|
+
const hasDecisions = await mysqlDb.schema.hasTable('t_decisions');
|
|
192
|
+
assert.ok(hasProjects, 'MySQL should have m_projects table');
|
|
193
|
+
assert.ok(hasDecisions, 'MySQL should have t_decisions table');
|
|
194
|
+
// Verify data
|
|
195
|
+
await assertRowCountsMatch(sqliteDb, mysqlDb, 'm_projects');
|
|
196
|
+
await assertRowCountsMatch(sqliteDb, mysqlDb, 't_decisions');
|
|
197
|
+
console.log(' ✅ MySQL data verified');
|
|
198
|
+
});
|
|
199
|
+
it('should import SQLite dump to MariaDB', async () => {
|
|
200
|
+
console.log(' 📥 Importing SQLite dump → MariaDB...');
|
|
201
|
+
// Generate dump
|
|
202
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
203
|
+
includeSchema: true,
|
|
204
|
+
chunkSize: 100,
|
|
205
|
+
});
|
|
206
|
+
// Import via Docker
|
|
207
|
+
const config = getDbConfig('mariadb');
|
|
208
|
+
await importSqlToDocker(dump, config.containerName, 'mariadb');
|
|
209
|
+
console.log(' ✅ Import completed');
|
|
210
|
+
// Verify tables exist
|
|
211
|
+
await assertTableCountsMatch(sqliteDb, 'sqlite', mariadbDb, 'mariadb');
|
|
212
|
+
// Verify data
|
|
213
|
+
await assertRowCountsMatch(sqliteDb, mariadbDb, 'm_projects');
|
|
214
|
+
await assertRowCountsMatch(sqliteDb, mariadbDb, 't_decisions');
|
|
215
|
+
console.log(' ✅ MariaDB data verified');
|
|
216
|
+
});
|
|
217
|
+
it('should import SQLite dump to PostgreSQL', async () => {
|
|
218
|
+
console.log(' 📥 Importing SQLite dump → PostgreSQL...');
|
|
219
|
+
// Generate dump
|
|
220
|
+
const dump = await generateSqlDump(sqliteDb, 'postgresql', {
|
|
221
|
+
includeSchema: true,
|
|
222
|
+
chunkSize: 100,
|
|
223
|
+
});
|
|
224
|
+
// Import via Docker
|
|
225
|
+
const config = getDbConfig('postgresql');
|
|
226
|
+
await importSqlToDocker(dump, config.containerName, 'postgresql');
|
|
227
|
+
console.log(' ✅ Import completed');
|
|
228
|
+
// Verify tables exist
|
|
229
|
+
await assertTableCountsMatch(sqliteDb, 'sqlite', postgresDb, 'postgresql');
|
|
230
|
+
// Verify data
|
|
231
|
+
await assertRowCountsMatch(sqliteDb, postgresDb, 'm_projects');
|
|
232
|
+
await assertRowCountsMatch(sqliteDb, postgresDb, 't_decisions');
|
|
233
|
+
console.log(' ✅ PostgreSQL data verified');
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
// ========================================================================
|
|
237
|
+
// BONUS: Verify multi-project schema integrity
|
|
238
|
+
// ========================================================================
|
|
239
|
+
describe('Bonus: Verify multi-project schema integrity', () => {
|
|
240
|
+
it('should verify composite PRIMARY KEY on MySQL', async () => {
|
|
241
|
+
console.log(' 🔍 Verifying MySQL composite PRIMARY KEY...');
|
|
242
|
+
const pkQuery = await mysqlDb.raw(`
|
|
243
|
+
SELECT COLUMN_NAME
|
|
244
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
245
|
+
WHERE TABLE_SCHEMA = 'mcp_test'
|
|
246
|
+
AND TABLE_NAME = 't_decisions'
|
|
247
|
+
AND COLUMN_KEY = 'PRI'
|
|
248
|
+
ORDER BY ORDINAL_POSITION
|
|
249
|
+
`);
|
|
250
|
+
const pkColumns = pkQuery[0].map((r) => r.COLUMN_NAME);
|
|
251
|
+
assert.deepStrictEqual(pkColumns, ['key_id', 'project_id'], 'Should have composite PK (key_id, project_id)');
|
|
252
|
+
console.log(' ✅ MySQL composite PK verified');
|
|
253
|
+
});
|
|
254
|
+
it('should verify composite PRIMARY KEY on PostgreSQL', async () => {
|
|
255
|
+
console.log(' 🔍 Verifying PostgreSQL composite PRIMARY KEY...');
|
|
256
|
+
const pkQuery = await postgresDb.raw(`
|
|
257
|
+
SELECT a.attname
|
|
258
|
+
FROM pg_index i
|
|
259
|
+
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
260
|
+
WHERE i.indrelid = 't_decisions'::regclass AND i.indisprimary
|
|
261
|
+
ORDER BY array_position(i.indkey, a.attnum)
|
|
262
|
+
`);
|
|
263
|
+
const pkColumns = pkQuery.rows.map((r) => r.attname);
|
|
264
|
+
assert.deepStrictEqual(pkColumns, ['key_id', 'project_id'], 'Should have composite PK (key_id, project_id)');
|
|
265
|
+
console.log(' ✅ PostgreSQL composite PK verified');
|
|
266
|
+
});
|
|
267
|
+
it('should verify FK constraints preserved on MySQL', async () => {
|
|
268
|
+
console.log(' 🔍 Verifying MySQL FK constraints...');
|
|
269
|
+
// t_decisions should have FK to m_projects
|
|
270
|
+
await assertFKConstraintsExist(mysqlDb, 'mysql', 't_decisions', 1);
|
|
271
|
+
// t_tasks should have FK to m_projects
|
|
272
|
+
await assertFKConstraintsExist(mysqlDb, 'mysql', 't_tasks', 1);
|
|
273
|
+
console.log(' ✅ MySQL FK constraints verified');
|
|
274
|
+
});
|
|
275
|
+
it('should verify FK constraints preserved on PostgreSQL', async () => {
|
|
276
|
+
console.log(' 🔍 Verifying PostgreSQL FK constraints...');
|
|
277
|
+
// t_decisions should have FK to m_projects
|
|
278
|
+
await assertFKConstraintsExist(postgresDb, 'postgresql', 't_decisions', 1);
|
|
279
|
+
// t_tasks should have FK to m_projects
|
|
280
|
+
await assertFKConstraintsExist(postgresDb, 'postgresql', 't_tasks', 1);
|
|
281
|
+
console.log(' ✅ PostgreSQL FK constraints verified');
|
|
282
|
+
});
|
|
283
|
+
it('should verify multi-project data isolation', async () => {
|
|
284
|
+
console.log(' 🔍 Verifying multi-project data isolation...');
|
|
285
|
+
// MySQL: Verify data is properly isolated by project_id
|
|
286
|
+
const mysqlDecisions = await mysqlDb('t_decisions').select();
|
|
287
|
+
const mysqlProjects = mysqlDecisions.map(d => d.project_id).sort((a, b) => a - b);
|
|
288
|
+
assert.deepStrictEqual(mysqlProjects, [10, 20], 'MySQL should have decisions in projects 10 and 20');
|
|
289
|
+
// PostgreSQL: Verify same isolation
|
|
290
|
+
const pgDecisions = await postgresDb('t_decisions').select();
|
|
291
|
+
const pgProjects = pgDecisions.map(d => d.project_id).sort((a, b) => a - b);
|
|
292
|
+
assert.deepStrictEqual(pgProjects, [10, 20], 'PostgreSQL should have decisions in projects 10 and 20');
|
|
293
|
+
console.log(' ✅ Multi-project isolation verified');
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
// ========================================================================
|
|
297
|
+
// VALIDATION: Detect TEXT PRIMARY KEY and nullable composite PK errors
|
|
298
|
+
// ========================================================================
|
|
299
|
+
describe('Schema Validation: TEXT PRIMARY KEY and nullable composite PK', () => {
|
|
300
|
+
it('should validate no TEXT columns used as PRIMARY KEY in MySQL dump', async () => {
|
|
301
|
+
console.log(' 🔍 Validating MySQL dump for TEXT PRIMARY KEY errors...');
|
|
302
|
+
// Generate MySQL dump
|
|
303
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
304
|
+
includeSchema: true,
|
|
305
|
+
chunkSize: 100,
|
|
306
|
+
});
|
|
307
|
+
// Check for TEXT PRIMARY KEY pattern (MariaDB 10.5 incompatible)
|
|
308
|
+
const textPrimaryKeyPattern = /\bTEXT\s+PRIMARY\s+KEY/gi;
|
|
309
|
+
const matches = dump.match(textPrimaryKeyPattern);
|
|
310
|
+
if (matches) {
|
|
311
|
+
console.log(` ❌ Found ${matches.length} TEXT PRIMARY KEY instances (MariaDB 10.5 incompatible):`);
|
|
312
|
+
const lines = dump.split('\n');
|
|
313
|
+
lines.forEach((line, idx) => {
|
|
314
|
+
if (textPrimaryKeyPattern.test(line)) {
|
|
315
|
+
console.log(` Line ${idx + 1}: ${line.trim()}`);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
assert.strictEqual(matches, null, 'MySQL dump should not contain TEXT PRIMARY KEY (MariaDB 10.5 incompatible)');
|
|
320
|
+
console.log(' ✅ No TEXT PRIMARY KEY found in MySQL dump');
|
|
321
|
+
});
|
|
322
|
+
it('should validate no nullable columns in composite PRIMARY KEY in MySQL dump', async () => {
|
|
323
|
+
console.log(' 🔍 Validating MySQL dump for nullable composite PRIMARY KEY errors...');
|
|
324
|
+
// Generate MySQL dump
|
|
325
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
326
|
+
includeSchema: true,
|
|
327
|
+
chunkSize: 100,
|
|
328
|
+
});
|
|
329
|
+
// Extract CREATE TABLE statements
|
|
330
|
+
const createTableRegex = /CREATE TABLE[^;]+;/gi;
|
|
331
|
+
const createStatements = dump.match(createTableRegex) || [];
|
|
332
|
+
const errors = [];
|
|
333
|
+
for (const stmt of createStatements) {
|
|
334
|
+
// Check if statement has composite PRIMARY KEY
|
|
335
|
+
const compositePkMatch = stmt.match(/PRIMARY\s+KEY\s*\(([^)]+)\)/i);
|
|
336
|
+
if (!compositePkMatch)
|
|
337
|
+
continue;
|
|
338
|
+
const pkColumns = compositePkMatch[1].split(',').map(c => c.trim().replace(/[`"']/g, ''));
|
|
339
|
+
if (pkColumns.length < 2)
|
|
340
|
+
continue; // Not a composite PK
|
|
341
|
+
// Extract table name
|
|
342
|
+
const tableNameMatch = stmt.match(/CREATE TABLE\s+[`"]?(\w+)[`"]?/i);
|
|
343
|
+
const tableName = tableNameMatch ? tableNameMatch[1] : 'unknown';
|
|
344
|
+
// Check if any PK column is nullable
|
|
345
|
+
for (const col of pkColumns) {
|
|
346
|
+
// Pattern: column_name type NULL or column_name type (without NOT NULL)
|
|
347
|
+
const colDefPattern = new RegExp(`[(\`"]?${col}[)\`"]?\\s+\\w+(?:\\(\\d+\\))?\\s+(?!NOT\\s+NULL)`, 'i');
|
|
348
|
+
if (colDefPattern.test(stmt) && /\s+NULL\s+/i.test(stmt)) {
|
|
349
|
+
errors.push(`Table ${tableName}: Composite PRIMARY KEY column '${col}' appears nullable`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (errors.length > 0) {
|
|
354
|
+
console.log(` ❌ Found ${errors.length} nullable composite PRIMARY KEY errors:`);
|
|
355
|
+
errors.forEach(err => console.log(` - ${err}`));
|
|
356
|
+
assert.fail(`Found nullable columns in composite PRIMARY KEY: ${errors.join('; ')}`);
|
|
357
|
+
}
|
|
358
|
+
console.log(' ✅ No nullable composite PRIMARY KEY found in MySQL dump');
|
|
359
|
+
});
|
|
360
|
+
it('should validate m_config table uses single-column PRIMARY KEY', async () => {
|
|
361
|
+
console.log(' 🔍 Validating m_config PRIMARY KEY structure...');
|
|
362
|
+
// Generate MySQL dump
|
|
363
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
364
|
+
includeSchema: true,
|
|
365
|
+
chunkSize: 100,
|
|
366
|
+
});
|
|
367
|
+
// Find m_config CREATE TABLE statement
|
|
368
|
+
const configTableMatch = dump.match(/CREATE TABLE[^;]*m_config[^;]+;/i);
|
|
369
|
+
assert.ok(configTableMatch, 'Should find m_config table in dump');
|
|
370
|
+
const configStmt = configTableMatch[0];
|
|
371
|
+
// Check for composite PRIMARY KEY (key, project_id) - WRONG
|
|
372
|
+
const compositePkPattern = /PRIMARY\s+KEY\s*\(\s*[`"]?key[`"]?\s*,\s*[`"]?project_id[`"]?\s*\)/i;
|
|
373
|
+
assert.ok(!compositePkPattern.test(configStmt), 'm_config should NOT have composite PRIMARY KEY (key, project_id)');
|
|
374
|
+
// Check for single-column PRIMARY KEY on 'key' - CORRECT
|
|
375
|
+
const singlePkPattern = /[`"]?key[`"]?[^,]*PRIMARY\s+KEY|PRIMARY\s+KEY\s*\(\s*[`"]?key[`"]?\s*\)/i;
|
|
376
|
+
assert.ok(singlePkPattern.test(configStmt), 'm_config should have single-column PRIMARY KEY on key');
|
|
377
|
+
console.log(' ✅ m_config correctly uses single-column PRIMARY KEY');
|
|
378
|
+
});
|
|
379
|
+
it('should validate m_help_tools.tool_name is VARCHAR not TEXT', async () => {
|
|
380
|
+
console.log(' 🔍 Validating m_help_tools.tool_name data type...');
|
|
381
|
+
// Generate MySQL dump
|
|
382
|
+
const dump = await generateSqlDump(sqliteDb, 'mysql', {
|
|
383
|
+
includeSchema: true,
|
|
384
|
+
chunkSize: 100,
|
|
385
|
+
});
|
|
386
|
+
// Find m_help_tools CREATE TABLE statement
|
|
387
|
+
const helpToolsMatch = dump.match(/CREATE TABLE[^;]*m_help_tools[^;]+;/i);
|
|
388
|
+
assert.ok(helpToolsMatch, 'Should find m_help_tools table in dump');
|
|
389
|
+
const helpToolsStmt = helpToolsMatch[0];
|
|
390
|
+
// Check tool_name is VARCHAR, not TEXT
|
|
391
|
+
const toolNamePattern = /tool_name\s+(VARCHAR|TEXT)/i;
|
|
392
|
+
const match = helpToolsStmt.match(toolNamePattern);
|
|
393
|
+
assert.ok(match, 'Should find tool_name column definition');
|
|
394
|
+
assert.strictEqual(match[1].toUpperCase(), 'VARCHAR', 'tool_name should be VARCHAR not TEXT (MariaDB 10.5 compatibility)');
|
|
395
|
+
console.log(' ✅ m_help_tools.tool_name correctly uses VARCHAR');
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
//# sourceMappingURL=multi-project-migration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-project-migration.test.js","sourceRoot":"","sources":["../../src/tests/multi-project-migration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-project.test.d.ts","sourceRoot":"","sources":["../../src/tests/multi-project.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|