sqlew 5.0.8 → 5.1.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 +27 -0
- package/README.md +2 -2
- package/dist/adapters/auth/auth-factory.d.ts +2 -81
- package/dist/adapters/auth/auth-factory.d.ts.map +1 -1
- package/dist/adapters/auth/auth-factory.js +2 -82
- package/dist/adapters/auth/auth-factory.js.map +1 -1
- package/dist/adapters/auth/base-auth-provider.d.ts +18 -303
- package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/base-auth-provider.js +2 -104
- package/dist/adapters/auth/base-auth-provider.js.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.d.ts +4 -348
- package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.js +6 -356
- package/dist/adapters/auth/direct-auth-provider.js.map +1 -1
- package/dist/adapters/base-adapter.d.ts +31 -598
- package/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +10 -458
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -11
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -11
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mysql-adapter.d.ts +15 -541
- package/dist/adapters/mysql-adapter.d.ts.map +1 -1
- package/dist/adapters/mysql-adapter.js +24 -561
- package/dist/adapters/mysql-adapter.js.map +1 -1
- package/dist/adapters/postgresql-adapter.d.ts +15 -203
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +24 -223
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/adapters/sqlite-adapter.d.ts +4 -28
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +4 -32
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -4
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/backend/backend-factory.d.ts +3 -3
- package/dist/backend/backend-factory.js +3 -3
- package/dist/backend/local-backend.d.ts.map +1 -1
- package/dist/backend/local-backend.js +0 -5
- package/dist/backend/local-backend.js.map +1 -1
- package/dist/cli/db-export.d.ts.map +1 -1
- package/dist/cli/db-export.js +54 -32
- package/dist/cli/db-export.js.map +1 -1
- package/dist/cli/db-import.d.ts.map +1 -1
- package/dist/cli/db-import.js +32 -31
- package/dist/cli/db-import.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/cloud-config-loader.d.ts +8 -8
- package/dist/config/cloud-config-loader.d.ts.map +1 -1
- package/dist/config/cloud-config-loader.js +12 -12
- package/dist/config/cloud-config-loader.js.map +1 -1
- package/dist/config/global-config.d.ts +17 -45
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +169 -30
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/loader.d.ts +1 -18
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +1 -89
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +2 -64
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -18
- package/dist/config/types.js.map +1 -1
- package/dist/database/index.d.ts +1 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -3
- package/dist/database/index.js.map +1 -1
- package/dist/database/operations/queries.d.ts +0 -4
- package/dist/database/operations/queries.d.ts.map +1 -1
- package/dist/database/operations/queries.js +0 -8
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init-rules.d.ts.map +1 -1
- package/dist/init-rules.js +0 -1
- package/dist/init-rules.js.map +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +2 -1
- package/dist/knexfile.js.map +1 -1
- package/dist/migration/local-to-global.d.ts +19 -0
- package/dist/migration/local-to-global.d.ts.map +1 -0
- package/dist/migration/local-to-global.js +133 -0
- package/dist/migration/local-to-global.js.map +1 -0
- package/dist/saas-connector/client/types.d.ts +1 -1
- package/dist/saas-connector/client/types.d.ts.map +1 -1
- package/dist/schema.js +1 -1
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +15 -7
- package/dist/server/setup.js.map +1 -1
- package/dist/tests/backend/backend-factory.test.js +2 -2
- package/dist/tests/backend/backend-factory.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.d.ts +2 -17
- package/dist/tests/docker/native/constraint-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +3 -82
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/db-init.d.ts +3 -34
- package/dist/tests/docker/native/db-init.d.ts.map +1 -1
- package/dist/tests/docker/native/db-init.js +15 -77
- package/dist/tests/docker/native/db-init.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.d.ts +2 -10
- package/dist/tests/docker/native/decision-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +2 -84
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.d.ts +2 -5
- package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
- package/dist/tests/docker/native/help-system.test.js +2 -47
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.d.ts +3 -11
- package/dist/tests/docker/native/suggest-tool.test.d.ts.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.js +3 -60
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +2 -23
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +5 -59
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/feature/decision/analytics.test.js +2 -1
- package/dist/tests/feature/decision/analytics.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +2 -7
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation.test.js +2 -1
- package/dist/tests/feature/decision/batch-validation.test.js.map +1 -1
- package/dist/tests/integration/auto-trigger-suggestions.test.js +4 -37
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js +2 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
- package/dist/tests/integration/json-export-import.test.d.ts.map +1 -0
- package/dist/tests/integration/json-export-import.test.js.map +1 -0
- package/dist/tests/unit/case-insensitive-validator.test.d.ts +0 -7
- package/dist/tests/unit/case-insensitive-validator.test.d.ts.map +1 -1
- package/dist/tests/unit/case-insensitive-validator.test.js +0 -22
- package/dist/tests/unit/case-insensitive-validator.test.js.map +1 -1
- package/dist/tests/unit/config/cloud-config-loader.test.js +4 -2
- package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -1
- package/dist/tests/unit/config/global-db-migration.test.d.ts +12 -0
- package/dist/tests/unit/config/global-db-migration.test.d.ts.map +1 -0
- package/dist/tests/unit/config/global-db-migration.test.js +117 -0
- package/dist/tests/unit/config/global-db-migration.test.js.map +1 -0
- package/dist/tests/unit/constraint-scorer.test.d.ts +2 -7
- package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -1
- package/dist/tests/unit/constraint-scorer.test.js +2 -28
- package/dist/tests/unit/constraint-scorer.test.js.map +1 -1
- package/dist/tests/unit/universal-knex.test.js +9 -0
- package/dist/tests/unit/universal-knex.test.js.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.js +0 -24
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
- package/dist/tests/utils/db-config.d.ts.map +1 -1
- package/dist/tests/utils/db-config.js +0 -9
- package/dist/tests/utils/db-config.js.map +1 -1
- package/dist/tests/utils/db-import.d.ts.map +1 -1
- package/dist/tests/utils/db-import.js +0 -3
- package/dist/tests/utils/db-import.js.map +1 -1
- package/dist/tests/utils/db-schema.d.ts.map +1 -1
- package/dist/tests/utils/db-schema.js +48 -51
- package/dist/tests/utils/db-schema.js.map +1 -1
- package/dist/tests/utils/db-seeding.d.ts.map +1 -1
- package/dist/tests/utils/db-seeding.js +0 -3
- package/dist/tests/utils/db-seeding.js.map +1 -1
- package/dist/tests/utils/index.d.ts +0 -1
- package/dist/tests/utils/index.d.ts.map +1 -1
- package/dist/tests/utils/index.js +0 -2
- package/dist/tests/utils/index.js.map +1 -1
- package/dist/tests/utils/test-helpers.d.ts +6 -76
- package/dist/tests/utils/test-helpers.d.ts.map +1 -1
- package/dist/tests/utils/test-helpers.js +56 -162
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tests/utils/test-lifecycle.d.ts +2 -28
- package/dist/tests/utils/test-lifecycle.d.ts.map +1 -1
- package/dist/tests/utils/test-lifecycle.js +2 -31
- package/dist/tests/utils/test-lifecycle.js.map +1 -1
- package/dist/tools/context/index.d.ts +0 -1
- package/dist/tools/context/index.d.ts.map +1 -1
- package/dist/tools/context/index.js +0 -2
- package/dist/tools/context/index.js.map +1 -1
- package/dist/tools/context/types.d.ts +1 -1
- package/dist/tools/context/types.d.ts.map +1 -1
- package/dist/types/actions.d.ts +6 -29
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/actions.js +1 -2
- package/dist/types/actions.js.map +1 -1
- package/dist/types/constraint/params.d.ts +24 -1
- package/dist/types/constraint/params.d.ts.map +1 -1
- package/dist/types/constraint/params.js +3 -0
- package/dist/types/constraint/params.js.map +1 -1
- package/dist/types/constraint/responses.d.ts +18 -1
- package/dist/types/constraint/responses.d.ts.map +1 -1
- package/dist/types/constraint/responses.js +3 -0
- package/dist/types/constraint/responses.js.map +1 -1
- package/dist/types/decision/batch.d.ts +2 -5
- package/dist/types/decision/batch.d.ts.map +1 -1
- package/dist/types/decision/batch.js +3 -3
- package/dist/types/decision/batch.js.map +1 -1
- package/dist/types/decision/params.d.ts +7 -4
- package/dist/types/decision/params.d.ts.map +1 -1
- package/dist/types/decision/responses.d.ts +49 -35
- package/dist/types/decision/responses.d.ts.map +1 -1
- package/dist/types/decision/templates.d.ts +2 -18
- package/dist/types/decision/templates.d.ts.map +1 -1
- package/dist/types/decision/templates.js +3 -3
- package/dist/types/decision/templates.js.map +1 -1
- package/dist/types/enums.d.ts +11 -13
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +5 -13
- package/dist/types/enums.js.map +1 -1
- package/dist/types/import-export.d.ts +7 -30
- package/dist/types/import-export.d.ts.map +1 -1
- package/dist/types/import-export.js +1 -2
- package/dist/types/import-export.js.map +1 -1
- package/dist/types/index.d.ts +18 -22
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -32
- package/dist/types/index.js.map +1 -1
- package/dist/types/master-entities.d.ts +1 -10
- package/dist/types/master-entities.d.ts.map +1 -1
- package/dist/types/master-entities.js +1 -2
- package/dist/types/master-entities.js.map +1 -1
- package/dist/types/transaction-entities.d.ts +2 -21
- package/dist/types/transaction-entities.d.ts.map +1 -1
- package/dist/types/transaction-entities.js +1 -1
- package/dist/types/validation.d.ts +1 -16
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +1 -2
- package/dist/types/validation.js.map +1 -1
- package/dist/types/view-entities.d.ts +3 -12
- package/dist/types/view-entities.d.ts.map +1 -1
- package/dist/types/view-entities.js +1 -1
- package/dist/types.d.ts +4 -718
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -39
- package/dist/types.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts +2 -2
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js.map +1 -1
- package/docs/CLI_USAGE.md +27 -107
- package/docs/CONFIGURATION.md +10 -5
- package/docs/DATABASE_AUTH.md +3 -3
- package/docs/MIGRATION_TO_SAAS.md +2 -2
- package/docs/SHARED_DATABASE.md +108 -0
- package/package.json +4 -3
- package/dist/adapters/auth/auth-types.d.ts +0 -30
- package/dist/adapters/auth/auth-types.d.ts.map +0 -1
- package/dist/adapters/auth/auth-types.js +0 -30
- package/dist/adapters/auth/auth-types.js.map +0 -1
- package/dist/cli/db-dump.d.ts +0 -36
- package/dist/cli/db-dump.d.ts.map +0 -1
- package/dist/cli/db-dump.js +0 -384
- package/dist/cli/db-dump.js.map +0 -1
- package/dist/database/config/config-ops.d.ts +0 -42
- package/dist/database/config/config-ops.d.ts.map +0 -1
- package/dist/database/config/config-ops.js +0 -102
- package/dist/database/config/config-ops.js.map +0 -1
- package/dist/formatters/adr-formatter.d.ts +0 -22
- package/dist/formatters/adr-formatter.d.ts.map +0 -1
- package/dist/formatters/adr-formatter.js +0 -127
- package/dist/formatters/adr-formatter.js.map +0 -1
- package/dist/formatters/confluence-formatter.d.ts +0 -26
- package/dist/formatters/confluence-formatter.d.ts.map +0 -1
- package/dist/formatters/confluence-formatter.js +0 -129
- package/dist/formatters/confluence-formatter.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -34
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -57
- package/dist/formatters/index.js.map +0 -1
- package/dist/formatters/markdown-formatter.d.ts +0 -16
- package/dist/formatters/markdown-formatter.d.ts.map +0 -1
- package/dist/formatters/markdown-formatter.js +0 -110
- package/dist/formatters/markdown-formatter.js.map +0 -1
- package/dist/formatters/notion-formatter.d.ts +0 -29
- package/dist/formatters/notion-formatter.d.ts.map +0 -1
- package/dist/formatters/notion-formatter.js +0 -177
- package/dist/formatters/notion-formatter.js.map +0 -1
- package/dist/formatters/types.d.ts +0 -31
- package/dist/formatters/types.d.ts.map +0 -1
- package/dist/formatters/types.js +0 -6
- package/dist/formatters/types.js.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.d.ts +0 -7
- package/dist/tests/database/sql-dump/converters.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.js +0 -314
- package/dist/tests/database/sql-dump/converters.test.js.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.js +0 -141
- package/dist/tests/database/sql-dump/default-conversions.test.js.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts +0 -27
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js +0 -284
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.js +0 -361
- package/dist/tests/database/sql-dump/type-conversion.test.js.map +0 -1
- package/dist/tests/docker/cross-database.test.d.ts +0 -21
- package/dist/tests/docker/cross-database.test.d.ts.map +0 -1
- package/dist/tests/docker/cross-database.test.js +0 -308
- package/dist/tests/docker/cross-database.test.js.map +0 -1
- package/dist/tests/docker/dump-import.test.d.ts +0 -15
- package/dist/tests/docker/dump-import.test.d.ts.map +0 -1
- package/dist/tests/docker/dump-import.test.js +0 -424
- package/dist/tests/docker/dump-import.test.js.map +0 -1
- package/dist/tests/docker/fk-constraints.test.d.ts +0 -13
- package/dist/tests/docker/fk-constraints.test.d.ts.map +0 -1
- package/dist/tests/docker/fk-constraints.test.js +0 -381
- package/dist/tests/docker/fk-constraints.test.js.map +0 -1
- package/dist/tests/docker/indexes.test.d.ts +0 -12
- package/dist/tests/docker/indexes.test.d.ts.map +0 -1
- package/dist/tests/docker/indexes.test.js +0 -250
- package/dist/tests/docker/indexes.test.js.map +0 -1
- package/dist/tests/docker/integration.test.d.ts +0 -16
- package/dist/tests/docker/integration.test.d.ts.map +0 -1
- package/dist/tests/docker/integration.test.js +0 -323
- package/dist/tests/docker/integration.test.js.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.d.ts +0 -17
- package/dist/tests/docker/multi-project-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.js +0 -394
- package/dist/tests/docker/multi-project-migration.test.js.map +0 -1
- package/dist/tests/docker/schema-migration.test.d.ts +0 -8
- package/dist/tests/docker/schema-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/schema-migration.test.js +0 -98
- package/dist/tests/docker/schema-migration.test.js.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts +0 -5
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.js +0 -85
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +0 -1
- package/dist/tests/integration/suggest-simple.test.d.ts +0 -5
- package/dist/tests/integration/suggest-simple.test.d.ts.map +0 -1
- package/dist/tests/integration/suggest-simple.test.js +0 -90
- package/dist/tests/integration/suggest-simple.test.js.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.d.ts +0 -8
- package/dist/tests/migrations/test-all-versions-real.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.js +0 -236
- package/dist/tests/migrations/test-all-versions-real.js.map +0 -1
- package/dist/tests/migrations/test-all-versions.d.ts +0 -14
- package/dist/tests/migrations/test-all-versions.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions.js +0 -519
- package/dist/tests/migrations/test-all-versions.js.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +0 -7
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.js +0 -168
- package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +0 -13
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.js +0 -264
- package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts +0 -2
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.js +0 -97
- package/dist/tests/unit/utils/case-insensitive-validator.test.js.map +0 -1
- package/dist/tests/utils/json-export-import.test.d.ts.map +0 -1
- package/dist/tests/utils/json-export-import.test.js.map +0 -1
- package/dist/tests/utils/task-helpers.d.ts +0 -67
- package/dist/tests/utils/task-helpers.d.ts.map +0 -1
- package/dist/tests/utils/task-helpers.js +0 -134
- package/dist/tests/utils/task-helpers.js.map +0 -1
- package/dist/tools/context/actions/export.d.ts +0 -35
- package/dist/tools/context/actions/export.d.ts.map +0 -1
- package/dist/tools/context/actions/export.js +0 -93
- package/dist/tools/context/actions/export.js.map +0 -1
- package/dist/types/file/params.d.ts +0 -40
- package/dist/types/file/params.d.ts.map +0 -1
- package/dist/types/file/params.js +0 -6
- package/dist/types/file/params.js.map +0 -1
- package/dist/types/file/responses.d.ts +0 -2
- package/dist/types/file/responses.d.ts.map +0 -1
- package/dist/types/file/responses.js +0 -2
- package/dist/types/file/responses.js.map +0 -1
- package/dist/types/task/params.d.ts +0 -173
- package/dist/types/task/params.d.ts.map +0 -1
- package/dist/types/task/params.js +0 -8
- package/dist/types/task/params.js.map +0 -1
- package/dist/types/task/responses.d.ts +0 -334
- package/dist/types/task/responses.d.ts.map +0 -1
- package/dist/types/task/responses.js +0 -8
- package/dist/types/task/responses.js.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.d.ts +0 -16
- package/dist/utils/sql-dump/core/dependency-sort.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.js +0 -105
- package/dist/utils/sql-dump/core/dependency-sort.js.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.d.ts +0 -13
- package/dist/utils/sql-dump/core/generate-dump.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.js +0 -201
- package/dist/utils/sql-dump/core/generate-dump.js.map +0 -1
- package/dist/utils/sql-dump/core/index-export.d.ts +0 -10
- package/dist/utils/sql-dump/core/index-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/index-export.js +0 -173
- package/dist/utils/sql-dump/core/index-export.js.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.d.ts +0 -6
- package/dist/utils/sql-dump/core/sequence-reset.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.js +0 -28
- package/dist/utils/sql-dump/core/sequence-reset.js.map +0 -1
- package/dist/utils/sql-dump/core/table-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/table-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/table-export.js +0 -4
- package/dist/utils/sql-dump/core/table-export.js.map +0 -1
- package/dist/utils/sql-dump/core/view-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/view-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/view-export.js +0 -4
- package/dist/utils/sql-dump/core/view-export.js.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.js +0 -177
- package/dist/utils/sql-dump/formatters/bulk-insert.js.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.d.ts +0 -6
- package/dist/utils/sql-dump/formatters/identifiers.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.js +0 -16
- package/dist/utils/sql-dump/formatters/identifiers.js.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.js +0 -281
- package/dist/utils/sql-dump/formatters/value-formatter.js.map +0 -1
- package/dist/utils/sql-dump/generators/controls.d.ts +0 -10
- package/dist/utils/sql-dump/generators/controls.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/controls.js +0 -36
- package/dist/utils/sql-dump/generators/controls.js.map +0 -1
- package/dist/utils/sql-dump/generators/headers.d.ts +0 -6
- package/dist/utils/sql-dump/generators/headers.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/headers.js +0 -19
- package/dist/utils/sql-dump/generators/headers.js.map +0 -1
- package/dist/utils/sql-dump/index.d.ts +0 -14
- package/dist/utils/sql-dump/index.d.ts.map +0 -1
- package/dist/utils/sql-dump/index.js +0 -16
- package/dist/utils/sql-dump/index.js.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.d.ts +0 -20
- package/dist/utils/sql-dump/schema/indexes.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.js +0 -108
- package/dist/utils/sql-dump/schema/indexes.js.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.d.ts +0 -6
- package/dist/utils/sql-dump/schema/primary-keys.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.js +0 -41
- package/dist/utils/sql-dump/schema/primary-keys.js.map +0 -1
- package/dist/utils/sql-dump/schema/tables.d.ts +0 -15
- package/dist/utils/sql-dump/schema/tables.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/tables.js +0 -518
- package/dist/utils/sql-dump/schema/tables.js.map +0 -1
- package/dist/utils/sql-dump/schema/views.d.ts +0 -11
- package/dist/utils/sql-dump/schema/views.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/views.js +0 -116
- package/dist/utils/sql-dump/schema/views.js.map +0 -1
- package/dist/utils/sql-dump/types.d.ts +0 -10
- package/dist/utils/sql-dump/types.d.ts.map +0 -1
- package/dist/utils/sql-dump/types.js +0 -3
- package/dist/utils/sql-dump/types.js.map +0 -1
- package/dist/utils/sql-dump-converters.d.ts +0 -188
- package/dist/utils/sql-dump-converters.d.ts.map +0 -1
- package/dist/utils/sql-dump-converters.js +0 -315
- package/dist/utils/sql-dump-converters.js.map +0 -1
- package/dist/watcher/gitignore-parser.d.ts +0 -70
- package/dist/watcher/gitignore-parser.d.ts.map +0 -1
- package/dist/watcher/gitignore-parser.js +0 -195
- package/dist/watcher/gitignore-parser.js.map +0 -1
- package/dist/watcher/index.d.ts +0 -9
- package/dist/watcher/index.d.ts.map +0 -1
- package/dist/watcher/index.js +0 -8
- package/dist/watcher/index.js.map +0 -1
- /package/dist/tests/{utils → integration}/json-export-import.test.d.ts +0 -0
- /package/dist/tests/{utils → integration}/json-export-import.test.js +0 -0
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Native RDBMS Database Initialization
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* MySQL, MariaDB, and PostgreSQL integration tests.
|
|
6
|
-
*
|
|
7
|
-
* Key Features:
|
|
8
|
-
* - Initialize fresh database with all migrations
|
|
9
|
-
* - Verify migration success
|
|
10
|
-
* - Clean teardown with proper disconnect
|
|
4
|
+
* Fresh database setup and teardown via Knex migrations
|
|
5
|
+
* for MySQL, MariaDB, and PostgreSQL integration tests.
|
|
11
6
|
*/
|
|
12
7
|
import knex from 'knex';
|
|
13
8
|
import assert from 'node:assert';
|
|
@@ -17,9 +12,6 @@ import { dirname } from 'path';
|
|
|
17
12
|
import { getTestConfig } from '../../database/testing-config.js';
|
|
18
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
14
|
const __dirname = dirname(__filename);
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// Migration Directory Configuration
|
|
22
|
-
// ============================================================================
|
|
23
15
|
/**
|
|
24
16
|
* Get migration directory paths
|
|
25
17
|
*
|
|
@@ -35,22 +27,9 @@ function getMigrationDirs() {
|
|
|
35
27
|
join(projectRoot, 'dist/database/migrations/v4'),
|
|
36
28
|
];
|
|
37
29
|
}
|
|
38
|
-
// ============================================================================
|
|
39
|
-
// Database Initialization
|
|
40
|
-
// ============================================================================
|
|
41
30
|
/**
|
|
42
31
|
* Initialize fresh database with all Knex migrations
|
|
43
32
|
*
|
|
44
|
-
* This creates a clean database state by:
|
|
45
|
-
* 1. Connecting to the database
|
|
46
|
-
* 2. Running all migrations (bootstrap + upgrades + enhancements)
|
|
47
|
-
* 3. Verifying migration success
|
|
48
|
-
*
|
|
49
|
-
* @param dbType - Database type (mysql, mariadb, postgresql)
|
|
50
|
-
* @returns Knex instance connected to fresh database
|
|
51
|
-
*
|
|
52
|
-
* @throws Error if connection fails or migrations fail
|
|
53
|
-
*
|
|
54
33
|
* @example
|
|
55
34
|
* ```typescript
|
|
56
35
|
* const db = await initDatabase('postgresql');
|
|
@@ -59,9 +38,7 @@ function getMigrationDirs() {
|
|
|
59
38
|
* ```
|
|
60
39
|
*/
|
|
61
40
|
export async function initDatabase(dbType) {
|
|
62
|
-
// Get base configuration from centralized testing config
|
|
63
41
|
const config = getTestConfig(dbType);
|
|
64
|
-
// Add migration configuration
|
|
65
42
|
const migrationDirs = getMigrationDirs();
|
|
66
43
|
const fullConfig = {
|
|
67
44
|
...config,
|
|
@@ -72,12 +49,9 @@ export async function initDatabase(dbType) {
|
|
|
72
49
|
loadExtensions: ['.js'],
|
|
73
50
|
},
|
|
74
51
|
};
|
|
75
|
-
// Create connection
|
|
76
52
|
const db = knex(fullConfig);
|
|
77
53
|
try {
|
|
78
|
-
// Verify connection
|
|
79
54
|
await db.raw('SELECT 1');
|
|
80
|
-
// Run all migrations
|
|
81
55
|
const [batchNo, migrations] = await db.migrate.latest();
|
|
82
56
|
if (migrations.length === 0) {
|
|
83
57
|
console.log(` ℹ️ Database already migrated (batch ${batchNo})`);
|
|
@@ -85,65 +59,39 @@ export async function initDatabase(dbType) {
|
|
|
85
59
|
else {
|
|
86
60
|
console.log(` ✅ Ran ${migrations.length} migrations (batch ${batchNo})`);
|
|
87
61
|
}
|
|
88
|
-
// Verify migrations completed
|
|
89
62
|
await verifyMigrations(db);
|
|
90
63
|
return db;
|
|
91
64
|
}
|
|
92
65
|
catch (error) {
|
|
93
|
-
// Cleanup on failure
|
|
94
66
|
await db.destroy().catch(() => { });
|
|
95
67
|
throw new Error(`Failed to initialize ${dbType} database: ${error.message}`);
|
|
96
68
|
}
|
|
97
69
|
}
|
|
98
70
|
/**
|
|
99
71
|
* Verify that migrations completed successfully
|
|
100
|
-
*
|
|
101
|
-
* Checks:
|
|
102
|
-
* - knex_migrations table exists
|
|
103
|
-
* - At least one migration ran
|
|
104
|
-
* - Key tables exist (t_decisions, t_constraints)
|
|
105
|
-
*
|
|
106
|
-
* Note: v4_tasks removed in v5.0 (deprecated)
|
|
107
|
-
*
|
|
108
|
-
* @param db - Knex database connection
|
|
109
|
-
* @throws Error if verification fails
|
|
110
72
|
*/
|
|
111
73
|
export async function verifyMigrations(db) {
|
|
112
|
-
// Check migration table exists
|
|
113
74
|
const hasMigrationTable = await db.schema.hasTable('knex_migrations');
|
|
114
75
|
assert.ok(hasMigrationTable, 'knex_migrations table should exist');
|
|
115
|
-
// Check migrations ran
|
|
116
76
|
const migrations = await db('knex_migrations').select('name');
|
|
117
77
|
assert.ok(migrations.length > 0, 'At least one migration should have run');
|
|
118
|
-
//
|
|
78
|
+
// Note: v4_tasks removed in v5.0 (deprecated)
|
|
119
79
|
const keyTables = ['m_context_keys', 't_decisions', 't_constraints'];
|
|
120
80
|
for (const table of keyTables) {
|
|
121
81
|
const exists = await db.schema.hasTable(table);
|
|
122
82
|
assert.ok(exists, `Table ${table} should exist after migrations`);
|
|
123
83
|
}
|
|
124
84
|
}
|
|
125
|
-
// ============================================================================
|
|
126
|
-
// Database Teardown
|
|
127
|
-
// ============================================================================
|
|
128
85
|
/**
|
|
129
86
|
* Clean up database and disconnect
|
|
130
87
|
*
|
|
131
|
-
*
|
|
132
|
-
* 1. Drop all tables (including knex_migrations)
|
|
133
|
-
* 2. Disconnect from database
|
|
134
|
-
*
|
|
135
|
-
* Note: This is safe because tests use Docker containers with isolated databases.
|
|
136
|
-
*
|
|
137
|
-
* @param db - Knex database connection
|
|
88
|
+
* Safe because tests use Docker containers with isolated databases.
|
|
138
89
|
*/
|
|
139
90
|
export async function teardownDatabase(db) {
|
|
140
91
|
try {
|
|
141
|
-
// Get database type from client config
|
|
142
92
|
const client = db.client.config.client;
|
|
143
93
|
const dbType = getDbTypeFromClient(client);
|
|
144
|
-
// Drop all tables (including knex_migrations)
|
|
145
94
|
await dropAllTables(db, dbType);
|
|
146
|
-
// Disconnect
|
|
147
95
|
await db.destroy();
|
|
148
96
|
}
|
|
149
97
|
catch (error) {
|
|
@@ -151,23 +99,15 @@ export async function teardownDatabase(db) {
|
|
|
151
99
|
await db.destroy().catch(() => { });
|
|
152
100
|
}
|
|
153
101
|
}
|
|
154
|
-
/**
|
|
155
|
-
* Drop all tables from database
|
|
156
|
-
*
|
|
157
|
-
* Database-specific DROP TABLE implementations to handle different SQL dialects.
|
|
158
|
-
*
|
|
159
|
-
* @param db - Knex database connection
|
|
160
|
-
* @param dbType - Database type
|
|
161
|
-
*/
|
|
102
|
+
/** Drop all tables using database-specific SQL dialects */
|
|
162
103
|
async function dropAllTables(db, dbType) {
|
|
163
104
|
if (dbType === 'mysql' || dbType === 'mariadb') {
|
|
164
|
-
// MySQL/MariaDB: Disable FK checks, drop all tables
|
|
165
105
|
await db.raw('SET FOREIGN_KEY_CHECKS=0');
|
|
166
|
-
const tables = await db.raw(`
|
|
167
|
-
SELECT TABLE_NAME
|
|
168
|
-
FROM INFORMATION_SCHEMA.TABLES
|
|
169
|
-
WHERE TABLE_SCHEMA = DATABASE()
|
|
170
|
-
AND TABLE_TYPE = 'BASE TABLE'
|
|
106
|
+
const tables = await db.raw(`
|
|
107
|
+
SELECT TABLE_NAME
|
|
108
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
109
|
+
WHERE TABLE_SCHEMA = DATABASE()
|
|
110
|
+
AND TABLE_TYPE = 'BASE TABLE'
|
|
171
111
|
`);
|
|
172
112
|
for (const row of tables[0]) {
|
|
173
113
|
await db.raw(`DROP TABLE IF EXISTS \`${row.TABLE_NAME}\``);
|
|
@@ -175,11 +115,10 @@ async function dropAllTables(db, dbType) {
|
|
|
175
115
|
await db.raw('SET FOREIGN_KEY_CHECKS=1');
|
|
176
116
|
}
|
|
177
117
|
else if (dbType === 'postgresql') {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
WHERE schemaname = 'public'
|
|
118
|
+
const tables = await db.raw(`
|
|
119
|
+
SELECT tablename
|
|
120
|
+
FROM pg_tables
|
|
121
|
+
WHERE schemaname = 'public'
|
|
183
122
|
`);
|
|
184
123
|
for (const row of tables.rows) {
|
|
185
124
|
await db.raw(`DROP TABLE IF EXISTS "${row.tablename}" CASCADE`);
|
|
@@ -195,8 +134,7 @@ async function dropAllTables(db, dbType) {
|
|
|
195
134
|
function getDbTypeFromClient(client) {
|
|
196
135
|
switch (client) {
|
|
197
136
|
case 'mysql2':
|
|
198
|
-
// Cannot distinguish MySQL from MariaDB via client
|
|
199
|
-
return 'mysql';
|
|
137
|
+
return 'mysql'; // Cannot distinguish MySQL from MariaDB via client string
|
|
200
138
|
case 'pg':
|
|
201
139
|
return 'postgresql';
|
|
202
140
|
case 'better-sqlite3':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../../../src/tests/docker/native/db-init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../../../src/tests/docker/native/db-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Decision Operations - Native RDBMS Integration Tests
|
|
3
3
|
*
|
|
4
|
-
* Tests decision
|
|
5
|
-
*
|
|
6
|
-
* - UNIQUE constraint validation
|
|
7
|
-
* - CASCADE delete behavior
|
|
8
|
-
* - View functionality (v_tagged_decisions)
|
|
9
|
-
* - Tag index population (m_tag_index)
|
|
10
|
-
* - Cross-database compatibility
|
|
11
|
-
*
|
|
12
|
-
* Architecture: Direct Knex operations, no MCP tool dependencies
|
|
13
|
-
* Task #530: Refactored from MCP tool calls to database layer testing
|
|
4
|
+
* Tests decision schema correctness (FK, UNIQUE, CASCADE, tags, cross-DB)
|
|
5
|
+
* via direct Knex operations on MySQL, MariaDB, and PostgreSQL.
|
|
14
6
|
*/
|
|
15
7
|
export {};
|
|
16
8
|
//# sourceMappingURL=decision-operations.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-operations.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/docker/native/decision-operations.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"decision-operations.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/docker/native/decision-operations.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,36 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Decision Operations - Native RDBMS Integration Tests
|
|
3
3
|
*
|
|
4
|
-
* Tests decision
|
|
5
|
-
*
|
|
6
|
-
* - UNIQUE constraint validation
|
|
7
|
-
* - CASCADE delete behavior
|
|
8
|
-
* - View functionality (v_tagged_decisions)
|
|
9
|
-
* - Tag index population (m_tag_index)
|
|
10
|
-
* - Cross-database compatibility
|
|
11
|
-
*
|
|
12
|
-
* Architecture: Direct Knex operations, no MCP tool dependencies
|
|
13
|
-
* Task #530: Refactored from MCP tool calls to database layer testing
|
|
4
|
+
* Tests decision schema correctness (FK, UNIQUE, CASCADE, tags, cross-DB)
|
|
5
|
+
* via direct Knex operations on MySQL, MariaDB, and PostgreSQL.
|
|
14
6
|
*/
|
|
15
7
|
import { describe, it } from 'node:test';
|
|
16
8
|
import assert from 'node:assert';
|
|
17
9
|
import { runTestsOnAllDatabases, assertDecisionExists, assertDecisionHasTags, cleanupTestData, getLayerId, getTagId, getScopeId, } from './test-harness.js';
|
|
18
10
|
runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
19
11
|
let projectId;
|
|
20
|
-
// Get project ID before running tests
|
|
21
12
|
it('should get project ID', async () => {
|
|
22
13
|
const db = getDb();
|
|
23
14
|
const project = await db('m_projects').first();
|
|
24
15
|
assert.ok(project, 'Project should exist');
|
|
25
16
|
projectId = project.id;
|
|
26
17
|
});
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Foreign Key Constraint Tests
|
|
29
|
-
// ============================================================================
|
|
30
18
|
describe('Foreign key constraints', () => {
|
|
31
19
|
it('should enforce FK constraint on key_id', async () => {
|
|
32
20
|
const db = getDb();
|
|
33
|
-
// Try to insert decision with non-existent key_id
|
|
34
21
|
const insertPromise = db('t_decisions').insert({
|
|
35
22
|
key_id: 999999, // Non-existent
|
|
36
23
|
project_id: projectId,
|
|
@@ -47,12 +34,10 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
47
34
|
});
|
|
48
35
|
it('should enforce FK constraint on layer_id', async () => {
|
|
49
36
|
const db = getDb();
|
|
50
|
-
// Setup: Create valid key
|
|
51
37
|
await db('m_context_keys').insert({ key_name: 'fk-test-layer' });
|
|
52
38
|
const keyRecord = await db('m_context_keys')
|
|
53
39
|
.where({ key_name: 'fk-test-layer' })
|
|
54
40
|
.first();
|
|
55
|
-
// Try to insert with invalid layer_id
|
|
56
41
|
const insertPromise = db('t_decisions').insert({
|
|
57
42
|
key_id: keyRecord.id,
|
|
58
43
|
project_id: projectId,
|
|
@@ -62,17 +47,12 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
62
47
|
layer_id: 999999, // Non-existent
|
|
63
48
|
});
|
|
64
49
|
await assert.rejects(insertPromise, /foreign key|FOREIGN KEY|Cannot add or update a child row/i);
|
|
65
|
-
// Cleanup
|
|
66
50
|
await db('m_context_keys').where({ id: keyRecord.id }).del();
|
|
67
51
|
});
|
|
68
52
|
});
|
|
69
|
-
// ============================================================================
|
|
70
|
-
// UNIQUE Constraint Tests
|
|
71
|
-
// ============================================================================
|
|
72
53
|
describe('UNIQUE constraints', () => {
|
|
73
54
|
it('should enforce PRIMARY KEY uniqueness on key_id', async () => {
|
|
74
55
|
const db = getDb();
|
|
75
|
-
// Setup: Create key and decision
|
|
76
56
|
await db('m_context_keys').insert({ key_name: 'unique-test-pk' });
|
|
77
57
|
const keyRecord = await db('m_context_keys')
|
|
78
58
|
.where({ key_name: 'unique-test-pk' })
|
|
@@ -86,7 +66,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
86
66
|
ts: Math.floor(Date.now() / 1000),
|
|
87
67
|
layer_id: layerId,
|
|
88
68
|
});
|
|
89
|
-
// Try to insert duplicate (same key_id + project_id)
|
|
90
69
|
const duplicatePromise = db('t_decisions').insert({
|
|
91
70
|
key_id: keyRecord.id,
|
|
92
71
|
project_id: projectId,
|
|
@@ -96,7 +75,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
96
75
|
layer_id: layerId,
|
|
97
76
|
});
|
|
98
77
|
await assert.rejects(duplicatePromise, /UNIQUE constraint|Duplicate entry|duplicate key value/i);
|
|
99
|
-
// Cleanup
|
|
100
78
|
await cleanupTestData(db);
|
|
101
79
|
});
|
|
102
80
|
// NOTE: v4 schema intentionally does NOT have UNIQUE constraint on decision_key_id in t_decision_context
|
|
@@ -104,7 +82,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
104
82
|
// evolving rationale over time). Application layer handles context management.
|
|
105
83
|
it('should allow multiple context entries per decision in v4 schema (no UNIQUE on decision_key_id)', async () => {
|
|
106
84
|
const db = getDb();
|
|
107
|
-
// Setup: Create decision
|
|
108
85
|
await db('m_context_keys').insert({ key_name: 'context-multi-test' });
|
|
109
86
|
const keyRecord = await db('m_context_keys')
|
|
110
87
|
.where({ key_name: 'context-multi-test' })
|
|
@@ -118,32 +95,25 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
118
95
|
ts: Math.floor(Date.now() / 1000),
|
|
119
96
|
layer_id: layerId,
|
|
120
97
|
});
|
|
121
|
-
// Insert first context
|
|
122
98
|
await db('t_decision_context').insert({
|
|
123
99
|
decision_key_id: keyRecord.id,
|
|
124
100
|
project_id: projectId,
|
|
125
101
|
rationale: 'First rationale',
|
|
126
102
|
ts: Math.floor(Date.now() / 1000),
|
|
127
103
|
});
|
|
128
|
-
// Insert second context - should succeed in v4 (no UNIQUE constraint)
|
|
129
104
|
await db('t_decision_context').insert({
|
|
130
105
|
decision_key_id: keyRecord.id,
|
|
131
106
|
project_id: projectId,
|
|
132
107
|
rationale: 'Second rationale',
|
|
133
108
|
ts: Math.floor(Date.now() / 1000),
|
|
134
109
|
});
|
|
135
|
-
// Verify both context entries exist
|
|
136
110
|
const contexts = await db('t_decision_context')
|
|
137
111
|
.where({ decision_key_id: keyRecord.id, project_id: projectId })
|
|
138
112
|
.select('id', 'rationale');
|
|
139
113
|
assert.strictEqual(contexts.length, 2, 'Should allow multiple context entries per decision in v4');
|
|
140
|
-
// Cleanup
|
|
141
114
|
await cleanupTestData(db);
|
|
142
115
|
});
|
|
143
116
|
});
|
|
144
|
-
// ============================================================================
|
|
145
|
-
// Foreign Key Behavior Tests (v4 Schema Design)
|
|
146
|
-
// ============================================================================
|
|
147
117
|
// NOTE: v4 schema uses m_context_keys as the central reference point.
|
|
148
118
|
// - t_decisions, t_decision_tags, t_decision_context all reference m_context_keys
|
|
149
119
|
// - ON DELETE CASCADE is only applied to project_id (not key_id/decision_key_id)
|
|
@@ -151,7 +121,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
151
121
|
describe('Foreign key behavior (v4 schema)', () => {
|
|
152
122
|
it('should block context_keys deletion when decisions exist (no CASCADE on key_id)', async () => {
|
|
153
123
|
const db = getDb();
|
|
154
|
-
// Setup: Create key and decision
|
|
155
124
|
await db('m_context_keys').insert({ key_name: 'fk-block-test-key' });
|
|
156
125
|
const keyRecord = await db('m_context_keys')
|
|
157
126
|
.where({ key_name: 'fk-block-test-key' })
|
|
@@ -165,7 +134,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
165
134
|
ts: Math.floor(Date.now() / 1000),
|
|
166
135
|
layer_id: layerId,
|
|
167
136
|
});
|
|
168
|
-
// Try to delete context key - should be blocked by FK constraint
|
|
169
137
|
const deletePromise = db('m_context_keys').where({ id: keyRecord.id }).del();
|
|
170
138
|
await assert.rejects(deletePromise, /foreign key|FOREIGN KEY|Cannot delete or update a parent row|violates foreign key constraint/i, 'Should block deletion when child records exist');
|
|
171
139
|
// Cleanup: Delete in correct order (child first)
|
|
@@ -174,7 +142,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
174
142
|
});
|
|
175
143
|
it('should allow decision deletion without affecting decision_tags (different FK reference)', async () => {
|
|
176
144
|
const db = getDb();
|
|
177
|
-
// Setup: Create decision with tags
|
|
178
145
|
await db('m_context_keys').insert({ key_name: 'fk-tags-test' });
|
|
179
146
|
const keyRecord = await db('m_context_keys')
|
|
180
147
|
.where({ key_name: 'fk-tags-test' })
|
|
@@ -194,7 +161,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
194
161
|
project_id: projectId,
|
|
195
162
|
tag_id: tagId,
|
|
196
163
|
});
|
|
197
|
-
// Verify tags exist
|
|
198
164
|
let tags = await db('t_decision_tags').where({ decision_key_id: keyRecord.id });
|
|
199
165
|
assert.ok(tags.length > 0, 'Tags should exist before deletion');
|
|
200
166
|
// Delete decision - t_decision_tags references m_context_keys, not t_decisions
|
|
@@ -209,7 +175,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
209
175
|
});
|
|
210
176
|
it('should allow decision deletion without affecting decision_context (different FK reference)', async () => {
|
|
211
177
|
const db = getDb();
|
|
212
|
-
// Setup: Create decision with context
|
|
213
178
|
await db('m_context_keys').insert({ key_name: 'fk-context-test' });
|
|
214
179
|
const keyRecord = await db('m_context_keys')
|
|
215
180
|
.where({ key_name: 'fk-context-test' })
|
|
@@ -229,7 +194,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
229
194
|
rationale: 'Test rationale',
|
|
230
195
|
ts: Math.floor(Date.now() / 1000),
|
|
231
196
|
});
|
|
232
|
-
// Verify context exists
|
|
233
197
|
let context = await db('t_decision_context').where({ decision_key_id: keyRecord.id }).first();
|
|
234
198
|
assert.ok(context, 'Context should exist before deletion');
|
|
235
199
|
// Delete decision - t_decision_context references m_context_keys, not t_decisions
|
|
@@ -242,19 +206,14 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
242
206
|
await db('m_context_keys').where({ id: keyRecord.id }).del();
|
|
243
207
|
});
|
|
244
208
|
});
|
|
245
|
-
// ============================================================================
|
|
246
|
-
// Decision CRUD Operations (Database Layer)
|
|
247
|
-
// ============================================================================
|
|
248
209
|
describe('Decision table operations', () => {
|
|
249
210
|
it('should insert decision with all required fields', async () => {
|
|
250
211
|
const db = getDb();
|
|
251
|
-
// Setup: Insert master data
|
|
252
212
|
await db('m_context_keys').insert({ key_name: 'crud-test-key' });
|
|
253
213
|
const keyRecord = await db('m_context_keys')
|
|
254
214
|
.where({ key_name: 'crud-test-key' })
|
|
255
215
|
.first();
|
|
256
216
|
const layerId = await getLayerId(db, 'infrastructure');
|
|
257
|
-
// Insert decision
|
|
258
217
|
await db('t_decisions').insert({
|
|
259
218
|
key_id: keyRecord.id,
|
|
260
219
|
project_id: projectId,
|
|
@@ -263,14 +222,11 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
263
222
|
ts: Math.floor(Date.now() / 1000),
|
|
264
223
|
layer_id: layerId,
|
|
265
224
|
});
|
|
266
|
-
// Verify
|
|
267
225
|
await assertDecisionExists(db, 'crud-test-key', 'fastify');
|
|
268
|
-
// Cleanup
|
|
269
226
|
await cleanupTestData(db);
|
|
270
227
|
});
|
|
271
228
|
it('should update existing decision value', async () => {
|
|
272
229
|
const db = getDb();
|
|
273
|
-
// Setup: Create initial decision
|
|
274
230
|
await db('m_context_keys').insert({ key_name: 'update-test-key' });
|
|
275
231
|
const keyRecord = await db('m_context_keys')
|
|
276
232
|
.where({ key_name: 'update-test-key' })
|
|
@@ -284,7 +240,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
284
240
|
ts: Math.floor(Date.now() / 1000),
|
|
285
241
|
layer_id: layerId,
|
|
286
242
|
});
|
|
287
|
-
// Update decision
|
|
288
243
|
await db('t_decisions')
|
|
289
244
|
.where({ key_id: keyRecord.id })
|
|
290
245
|
.update({
|
|
@@ -292,20 +247,16 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
292
247
|
version: '1.1.0',
|
|
293
248
|
ts: Math.floor(Date.now() / 1000),
|
|
294
249
|
});
|
|
295
|
-
// Verify
|
|
296
250
|
await assertDecisionExists(db, 'update-test-key', 'postgresql-v16');
|
|
297
|
-
// Cleanup
|
|
298
251
|
await cleanupTestData(db);
|
|
299
252
|
});
|
|
300
253
|
it('should store numeric decisions in t_decisions_numeric', async () => {
|
|
301
254
|
const db = getDb();
|
|
302
|
-
// Setup: Create key
|
|
303
255
|
await db('m_context_keys').insert({ key_name: 'numeric-test-key' });
|
|
304
256
|
const keyRecord = await db('m_context_keys')
|
|
305
257
|
.where({ key_name: 'numeric-test-key' })
|
|
306
258
|
.first();
|
|
307
259
|
const layerId = await getLayerId(db, 'infrastructure');
|
|
308
|
-
// Insert numeric decision
|
|
309
260
|
await db('t_decisions_numeric').insert({
|
|
310
261
|
key_id: keyRecord.id,
|
|
311
262
|
project_id: projectId,
|
|
@@ -314,23 +265,17 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
314
265
|
ts: Math.floor(Date.now() / 1000),
|
|
315
266
|
layer_id: layerId,
|
|
316
267
|
});
|
|
317
|
-
// Verify
|
|
318
268
|
const numericDecision = await db('t_decisions_numeric')
|
|
319
269
|
.where({ key_id: keyRecord.id })
|
|
320
270
|
.first();
|
|
321
271
|
assert.ok(numericDecision, 'Numeric decision should exist');
|
|
322
272
|
assert.strictEqual(numericDecision.value, 100, 'Numeric value should match');
|
|
323
|
-
// Cleanup
|
|
324
273
|
await cleanupTestData(db);
|
|
325
274
|
});
|
|
326
275
|
});
|
|
327
|
-
// ============================================================================
|
|
328
|
-
// Decision Context Operations
|
|
329
|
-
// ============================================================================
|
|
330
276
|
describe('Decision context operations', () => {
|
|
331
277
|
it('should insert decision context with rationale, alternatives, tradeoffs', async () => {
|
|
332
278
|
const db = getDb();
|
|
333
|
-
// Setup: Create decision
|
|
334
279
|
await db('m_context_keys').insert({ key_name: 'context-test-key' });
|
|
335
280
|
const keyRecord = await db('m_context_keys')
|
|
336
281
|
.where({ key_name: 'context-test-key' })
|
|
@@ -344,7 +289,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
344
289
|
ts: Math.floor(Date.now() / 1000),
|
|
345
290
|
layer_id: layerId,
|
|
346
291
|
});
|
|
347
|
-
// Insert context
|
|
348
292
|
await db('t_decision_context').insert({
|
|
349
293
|
decision_key_id: keyRecord.id,
|
|
350
294
|
project_id: projectId,
|
|
@@ -353,7 +297,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
353
297
|
tradeoffs: 'More complex implementation than basic auth',
|
|
354
298
|
ts: Math.floor(Date.now() / 1000),
|
|
355
299
|
});
|
|
356
|
-
// Verify
|
|
357
300
|
const context = await db('t_decision_context')
|
|
358
301
|
.where({ decision_key_id: keyRecord.id })
|
|
359
302
|
.first();
|
|
@@ -361,12 +304,10 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
361
304
|
assert.strictEqual(context.rationale, 'OAuth2 provides better security and user experience');
|
|
362
305
|
assert.strictEqual(context.alternatives_considered, 'JWT, Session-based auth, Basic auth');
|
|
363
306
|
assert.strictEqual(context.tradeoffs, 'More complex implementation than basic auth');
|
|
364
|
-
// Cleanup
|
|
365
307
|
await cleanupTestData(db);
|
|
366
308
|
});
|
|
367
309
|
it('should update existing decision context', async () => {
|
|
368
310
|
const db = getDb();
|
|
369
|
-
// Setup: Create decision with context
|
|
370
311
|
await db('m_context_keys').insert({ key_name: 'context-update-key' });
|
|
371
312
|
const keyRecord = await db('m_context_keys')
|
|
372
313
|
.where({ key_name: 'context-update-key' })
|
|
@@ -386,30 +327,23 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
386
327
|
rationale: 'Original rationale',
|
|
387
328
|
ts: Math.floor(Date.now() / 1000),
|
|
388
329
|
});
|
|
389
|
-
// Update context
|
|
390
330
|
await db('t_decision_context')
|
|
391
331
|
.where({ decision_key_id: keyRecord.id })
|
|
392
332
|
.update({
|
|
393
333
|
rationale: 'Updated rationale',
|
|
394
334
|
alternatives_considered: 'New alternatives',
|
|
395
335
|
});
|
|
396
|
-
// Verify
|
|
397
336
|
const context = await db('t_decision_context')
|
|
398
337
|
.where({ decision_key_id: keyRecord.id })
|
|
399
338
|
.first();
|
|
400
339
|
assert.strictEqual(context.rationale, 'Updated rationale');
|
|
401
340
|
assert.strictEqual(context.alternatives_considered, 'New alternatives');
|
|
402
|
-
// Cleanup
|
|
403
341
|
await cleanupTestData(db);
|
|
404
342
|
});
|
|
405
343
|
});
|
|
406
|
-
// ============================================================================
|
|
407
|
-
// Tag Operations
|
|
408
|
-
// ============================================================================
|
|
409
344
|
describe('Decision tagging', () => {
|
|
410
345
|
it('should insert decision tags', async () => {
|
|
411
346
|
const db = getDb();
|
|
412
|
-
// Setup: Create decision
|
|
413
347
|
await db('m_context_keys').insert({ key_name: 'tag-test-key' });
|
|
414
348
|
const keyRecord = await db('m_context_keys')
|
|
415
349
|
.where({ key_name: 'tag-test-key' })
|
|
@@ -423,29 +357,22 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
423
357
|
ts: Math.floor(Date.now() / 1000),
|
|
424
358
|
layer_id: layerId,
|
|
425
359
|
});
|
|
426
|
-
// Insert tags
|
|
427
360
|
const apiTagId = await getTagId(db, 'api');
|
|
428
361
|
const perfTagId = await getTagId(db, 'performance');
|
|
429
362
|
await db('t_decision_tags').insert([
|
|
430
363
|
{ decision_key_id: keyRecord.id, project_id: projectId, tag_id: apiTagId },
|
|
431
364
|
{ decision_key_id: keyRecord.id, project_id: projectId, tag_id: perfTagId },
|
|
432
365
|
]);
|
|
433
|
-
// Verify
|
|
434
366
|
await assertDecisionHasTags(db, 'tag-test-key', ['api', 'performance']);
|
|
435
|
-
// Cleanup
|
|
436
367
|
await cleanupTestData(db);
|
|
437
368
|
});
|
|
438
369
|
// Note: m_tag_index test removed - the table has a different schema
|
|
439
370
|
// (tag_name, decision_count, constraint_count, task_count, total_count)
|
|
440
371
|
// It's an aggregate count table populated by application logic, not individual mappings
|
|
441
372
|
});
|
|
442
|
-
// ============================================================================
|
|
443
|
-
// Scope Operations
|
|
444
|
-
// ============================================================================
|
|
445
373
|
describe('Decision scoping', () => {
|
|
446
374
|
it('should insert decision scopes', async () => {
|
|
447
375
|
const db = getDb();
|
|
448
|
-
// Setup: Create decision
|
|
449
376
|
await db('m_context_keys').insert({ key_name: 'scope-test-key' });
|
|
450
377
|
const keyRecord = await db('m_context_keys')
|
|
451
378
|
.where({ key_name: 'scope-test-key' })
|
|
@@ -459,14 +386,12 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
459
386
|
ts: Math.floor(Date.now() / 1000),
|
|
460
387
|
layer_id: layerId,
|
|
461
388
|
});
|
|
462
|
-
// Insert scopes
|
|
463
389
|
const globalScopeId = await getScopeId(db, 'global');
|
|
464
390
|
const moduleScopeId = await getScopeId(db, 'module');
|
|
465
391
|
await db('t_decision_scopes').insert([
|
|
466
392
|
{ decision_key_id: keyRecord.id, project_id: projectId, scope_id: globalScopeId },
|
|
467
393
|
{ decision_key_id: keyRecord.id, project_id: projectId, scope_id: moduleScopeId },
|
|
468
394
|
]);
|
|
469
|
-
// Verify
|
|
470
395
|
const scopes = await db('t_decision_scopes')
|
|
471
396
|
.join('m_scopes', 't_decision_scopes.scope_id', 'm_scopes.id')
|
|
472
397
|
.where({ 't_decision_scopes.decision_key_id': keyRecord.id, 't_decision_scopes.project_id': projectId })
|
|
@@ -474,13 +399,9 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
474
399
|
assert.strictEqual(scopes.length, 2, 'Should have 2 scopes');
|
|
475
400
|
assert.ok(scopes.includes('global'), 'Should have global scope');
|
|
476
401
|
assert.ok(scopes.includes('module'), 'Should have module scope');
|
|
477
|
-
// Cleanup
|
|
478
402
|
await cleanupTestData(db);
|
|
479
403
|
});
|
|
480
404
|
});
|
|
481
|
-
// ============================================================================
|
|
482
|
-
// Cross-Database Compatibility Tests
|
|
483
|
-
// ============================================================================
|
|
484
405
|
describe(`Cross-database compatibility - ${dbType}`, () => {
|
|
485
406
|
it('should handle long VARCHAR keys', async () => {
|
|
486
407
|
const db = getDb();
|
|
@@ -499,7 +420,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
499
420
|
layer_id: layerId,
|
|
500
421
|
});
|
|
501
422
|
await assertDecisionExists(db, longKey, 'test');
|
|
502
|
-
// Cleanup
|
|
503
423
|
await cleanupTestData(db);
|
|
504
424
|
});
|
|
505
425
|
it('should handle special characters in values', async () => {
|
|
@@ -519,7 +439,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
519
439
|
layer_id: layerId,
|
|
520
440
|
});
|
|
521
441
|
await assertDecisionExists(db, 'special-chars-key', specialValue);
|
|
522
|
-
// Cleanup
|
|
523
442
|
await cleanupTestData(db);
|
|
524
443
|
});
|
|
525
444
|
it('should handle unicode characters', async () => {
|
|
@@ -539,7 +458,6 @@ runTestsOnAllDatabases('Decision Operations', (getDb, dbType) => {
|
|
|
539
458
|
layer_id: layerId,
|
|
540
459
|
});
|
|
541
460
|
await assertDecisionExists(db, 'unicode-key', unicodeValue);
|
|
542
|
-
// Cleanup
|
|
543
461
|
await cleanupTestData(db);
|
|
544
462
|
});
|
|
545
463
|
});
|