mcp-dbutils 1.0.2__tar.gz → 1.0.4__tar.gz
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.
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/CHANGELOG.md +14 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/PKG-INFO +1 -1
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/installation-platform-specific.md +15 -24
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/installation.md +29 -4
- mcp_dbutils-1.0.4/docs/design/multi_database_architecture.md +420 -0
- mcp_dbutils-1.0.4/docs/design/multi_database_class_diagram.md +440 -0
- mcp_dbutils-1.0.4/docs/design/multi_database_data_flow.md +386 -0
- mcp_dbutils-1.0.4/docs/design/multi_database_implementation_plan.md +350 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/installation-platform-specific.md +19 -38
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/installation.md +29 -4
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/installation-platform-specific.md +15 -24
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/installation.md +29 -4
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/installation-platform-specific.md +15 -24
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/installation.md +29 -4
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/installation-platform-specific.md +15 -24
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/installation.md +29 -4
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/installation-platform-specific.md +19 -38
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/installation.md +29 -4
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/pyproject.toml +1 -1
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/base.py +8 -4
- mcp_dbutils-1.0.4/tests/unit/test_permission_combinations.py +224 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sql_parsing.py +74 -0
- mcp_dbutils-1.0.4/tests/unit/test_table_name_handling.py +151 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.coveragerc +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_ar.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_en.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_es.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_fr.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_ru.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_zh.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_ar.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_en.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_es.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_fr.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_ru.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_zh.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_ar.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_en.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_es.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_fr.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_ru.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_zh.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_ar.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_en.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_es.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_fr.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_ru.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_zh.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_ar.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_en.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_es.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_fr.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_ru.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_zh.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/code-style.yml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/issue-translator.yml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/quality-assurance.yml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/release.yml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.gitignore +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.pre-commit-config.yaml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.releaserc.json +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/Dockerfile +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/LICENSE +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_AR.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_EN.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_ES.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_FR.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_RU.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/config.yaml.example +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/README.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/document-consistency-check.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/document-version-history.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/README.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/README.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/index.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/README.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/write-operations.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/configuration-write-operations.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/configuration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/mysql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/security-best-practices.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/architecture.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/audit-logging.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/development.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/security.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/testing.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/write-operations-design.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/usage-write-operations.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/usage.md +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/examples/config.yaml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/check_docs_consistency.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/check_zh_docs.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_en_nav_links.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_imports.sh +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_remaining_issues.sh +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_zh_nav_links.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/run_sonar_analysis.sh +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/sonar-ai-fix.fish +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/smithery.yaml +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/sonar-project.properties +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/__init__.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/audit.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/log.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/__init__.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/__init__.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/__init__.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/stats.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/conftest.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/__init__.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/conftest.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/fixtures.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_list_connections.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_logging.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_monitoring.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_monitoring_enhanced.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_config_helpers.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_handler_extended.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_postgres.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_postgres_config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_prompts.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite_config.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite_handler_extended.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_tools.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_tools_advanced.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/test_write_operations.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_audit.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_extended.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_handlers.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_helpers.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_write_operations.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_init.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_log.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_mysql_handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_mysql_server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_postgres_handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_postgres_server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sqlite_handler.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sqlite_server.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_stats.py +0 -0
- {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_write_permissions.py +0 -0
@@ -1,3 +1,17 @@
|
|
1
|
+
## [1.0.4](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.3...v1.0.4) (2025-05-12)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* 修改文档中的Docker安装说明,添加获取项目代码步骤 ([#111](https://github.com/donghao1393/mcp-dbutils/issues/111)) ([e56805f](https://github.com/donghao1393/mcp-dbutils/commit/e56805fe01ae32e28c60cdeaf2458d936ee8ca15)), closes [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110)
|
7
|
+
|
8
|
+
## [1.0.3](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.2...v1.0.3) (2025-05-05)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* 修复_extract_table_name方法处理多行SQL语句的问题 ([#98](https://github.com/donghao1393/mcp-dbutils/issues/98)) ([69eb5e1](https://github.com/donghao1393/mcp-dbutils/commit/69eb5e11e5007a5d36b09ff2bedbc1d3997815af)), closes [#97](https://github.com/donghao1393/mcp-dbutils/issues/97)
|
14
|
+
|
1
15
|
## [1.0.2](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.1...v1.0.2) (2025-05-05)
|
2
16
|
|
3
17
|
|
@@ -214,39 +214,30 @@ npx -y @smithery/cli install @donghao1393/mcp-dbutils --client claude
|
|
214
214
|
- Docker مثبت ويعمل
|
215
215
|
- اتصال بالإنترنت (لتنزيل صورة Docker)
|
216
216
|
|
217
|
-
### استخدام صورة Docker
|
217
|
+
### استخدام صورة Docker
|
218
218
|
|
219
|
-
1.
|
219
|
+
1. احصل على كود المشروع:
|
220
220
|
```bash
|
221
|
-
|
221
|
+
git clone https://github.com/donghao1393/mcp-dbutils.git
|
222
222
|
```
|
223
|
+
أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases) واستخراجه
|
223
224
|
|
224
|
-
2.
|
225
|
+
2. انتقل إلى دليل المشروع:
|
225
226
|
```bash
|
226
|
-
|
227
|
+
cd mcp-dbutils
|
227
228
|
```
|
228
229
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
```dockerfile
|
234
|
-
FROM python:3.10-slim
|
235
|
-
|
236
|
-
WORKDIR /app
|
237
|
-
|
238
|
-
RUN pip install --no-cache-dir mcp-dbutils
|
239
|
-
|
240
|
-
ENTRYPOINT ["mcp-dbutils"]
|
241
|
-
CMD ["--help"]
|
242
|
-
```
|
230
|
+
3. قم ببناء صورة MCP Database Utilities:
|
231
|
+
```bash
|
232
|
+
docker build -t mcp/dbutils .
|
233
|
+
```
|
243
234
|
|
244
|
-
قم
|
235
|
+
4. قم بتكوين تطبيق الذكاء الاصطناعي الخاص بك لاستخدام هذه الصورة (انظر [دليل التثبيت](installation.md) الخيار ب)
|
245
236
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
237
|
+
> **ملاحظة**:
|
238
|
+
> - يحتوي دليل المشروع الجذر بالفعل على Dockerfile، لذلك لا تحتاج إلى إنشاء واحد يدويًا
|
239
|
+
> - للتحديث إلى أحدث إصدار، ستحتاج إلى الحصول على أحدث كود وإعادة بناء الصورة
|
240
|
+
> - هذه خدمة MCP، مخصصة بشكل أساسي ليتم استدعاؤها بواسطة LLMs في تطبيقات الذكاء الاصطناعي، وليس لتشغيلها كخدمة مستقلة
|
250
241
|
|
251
242
|
## التثبيت بدون اتصال بالإنترنت
|
252
243
|
|
@@ -132,7 +132,25 @@ connections:
|
|
132
132
|
|
133
133
|
نفس الخطوة 2 في الخيار أ، قم بإنشاء ملف `config.yaml`.
|
134
134
|
|
135
|
-
### الخطوة 3:
|
135
|
+
### الخطوة 3: الحصول على كود المشروع وبناء صورة Docker
|
136
|
+
|
137
|
+
1. أولاً، احصل على كود المشروع (اختر إحدى الطرق التالية):
|
138
|
+
- استنساخ المشروع من GitHub: `git clone https://github.com/donghao1393/mcp-dbutils.git`
|
139
|
+
- أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases) واستخراجه
|
140
|
+
|
141
|
+
2. انتقل إلى دليل المشروع:
|
142
|
+
```bash
|
143
|
+
cd mcp-dbutils
|
144
|
+
```
|
145
|
+
|
146
|
+
3. قم ببناء صورة Docker:
|
147
|
+
```bash
|
148
|
+
docker build -t mcp/dbutils .
|
149
|
+
```
|
150
|
+
|
151
|
+
> **ملاحظة**: يحتوي دليل المشروع الجذر بالفعل على Dockerfile، لذلك لا تحتاج إلى إنشاء واحد يدويًا. للتحديث إلى أحدث إصدار، ستحتاج إلى الحصول على أحدث كود وإعادة بناء الصورة.
|
152
|
+
|
153
|
+
### الخطوة 4: تكوين تطبيق الذكاء الاصطناعي الخاص بك
|
136
154
|
|
137
155
|
#### تكوين Claude Desktop
|
138
156
|
|
@@ -304,9 +322,16 @@ uv pip install -U mcp-dbutils
|
|
304
322
|
|
305
323
|
### تحديث الخيار ب (Docker)
|
306
324
|
|
307
|
-
|
308
|
-
|
309
|
-
|
325
|
+
1. احصل على أحدث كود للمشروع:
|
326
|
+
```bash
|
327
|
+
git pull
|
328
|
+
```
|
329
|
+
أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases)
|
330
|
+
|
331
|
+
2. أعد بناء صورة Docker الخاصة بك:
|
332
|
+
```bash
|
333
|
+
docker build -t mcp/dbutils .
|
334
|
+
```
|
310
335
|
|
311
336
|
### تحديث الخيار ج (Smithery)
|
312
337
|
|
@@ -0,0 +1,420 @@
|
|
1
|
+
# 多数据库支持架构设计
|
2
|
+
|
3
|
+
## 1. 概述
|
4
|
+
|
5
|
+
本文档描述了MCP Database Utilities的多数据库支持架构设计,旨在提供一个统一的接口来支持不同类型的数据库,包括关系型数据库(如MySQL、PostgreSQL)和NoSQL数据库(如MongoDB、Redis)。
|
6
|
+
|
7
|
+
## 2. 设计目标
|
8
|
+
|
9
|
+
- 提供统一的接口,隐藏不同数据库的实现细节
|
10
|
+
- 支持动态切换数据库类型
|
11
|
+
- 保持现有功能的兼容性
|
12
|
+
- 提供灵活的扩展机制,便于添加新的数据库类型
|
13
|
+
- 维持高性能和可靠性
|
14
|
+
- 支持统一的权限控制和审计机制
|
15
|
+
|
16
|
+
## 3. 架构概览
|
17
|
+
|
18
|
+
多数据库支持架构采用分层设计,包括以下几个主要层次:
|
19
|
+
|
20
|
+
```mermaid
|
21
|
+
graph TD
|
22
|
+
Client[客户端] --> API[API层]
|
23
|
+
API --> Permission[权限层]
|
24
|
+
Permission --> Query[查询层]
|
25
|
+
Query --> Adapter[适配器层]
|
26
|
+
Adapter --> Connection[连接层]
|
27
|
+
Connection --> DB[(数据库)]
|
28
|
+
|
29
|
+
subgraph 适配器层
|
30
|
+
SQLAdapter[SQL适配器]
|
31
|
+
MongoAdapter[MongoDB适配器]
|
32
|
+
RedisAdapter[Redis适配器]
|
33
|
+
end
|
34
|
+
|
35
|
+
subgraph 连接层
|
36
|
+
SQLConnection[SQL连接]
|
37
|
+
MongoConnection[MongoDB连接]
|
38
|
+
RedisConnection[Redis连接]
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
### 3.1 连接层
|
43
|
+
|
44
|
+
连接层负责管理与不同数据库的连接,包括连接池管理、认证和基本连接参数处理。
|
45
|
+
|
46
|
+
主要组件:
|
47
|
+
- `ConnectionFactory`:工厂类,负责创建适当类型的连接
|
48
|
+
- `BaseConnection`:所有连接类的基类,定义通用接口
|
49
|
+
- `SQLConnection`:SQL数据库连接类
|
50
|
+
- `MongoConnection`:MongoDB连接类
|
51
|
+
- `RedisConnection`:Redis连接类
|
52
|
+
|
53
|
+
### 3.2 适配器层
|
54
|
+
|
55
|
+
适配器层为每种数据库类型提供一个适配器,实现统一的接口,将通用操作转换为特定数据库的操作。
|
56
|
+
|
57
|
+
主要组件:
|
58
|
+
- `BaseAdapter`:所有适配器的基类,定义通用接口
|
59
|
+
- `SQLAdapter`:SQL数据库适配器
|
60
|
+
- `MongoAdapter`:MongoDB适配器
|
61
|
+
- `RedisAdapter`:Redis适配器
|
62
|
+
|
63
|
+
### 3.3 查询层
|
64
|
+
|
65
|
+
查询层提供统一的查询构建API,将通用查询转换为特定数据库的查询语言。
|
66
|
+
|
67
|
+
主要组件:
|
68
|
+
- `QueryBuilder`:查询构建器基类
|
69
|
+
- `SQLQueryBuilder`:SQL查询构建器
|
70
|
+
- `MongoQueryBuilder`:MongoDB查询构建器
|
71
|
+
- `RedisCommandBuilder`:Redis命令构建器
|
72
|
+
|
73
|
+
### 3.4 权限层
|
74
|
+
|
75
|
+
权限层负责统一的权限检查和控制,确保操作符合权限规则。
|
76
|
+
|
77
|
+
主要组件:
|
78
|
+
- `PermissionChecker`:权限检查器
|
79
|
+
- `OperationValidator`:操作验证器
|
80
|
+
- `AuditLogger`:审计日志记录器
|
81
|
+
|
82
|
+
### 3.5 API层
|
83
|
+
|
84
|
+
API层提供统一的对外接口,是客户端与数据库交互的入口点。
|
85
|
+
|
86
|
+
主要组件:
|
87
|
+
- `DatabaseClient`:统一的客户端接口
|
88
|
+
- `ConnectionManager`:连接管理器
|
89
|
+
- `TransactionManager`:事务管理器
|
90
|
+
|
91
|
+
## 4. 关键接口设计
|
92
|
+
|
93
|
+
### 4.1 BaseConnection接口
|
94
|
+
|
95
|
+
```python
|
96
|
+
class BaseConnection:
|
97
|
+
"""所有数据库连接的基类"""
|
98
|
+
|
99
|
+
def connect(self):
|
100
|
+
"""建立连接"""
|
101
|
+
pass
|
102
|
+
|
103
|
+
def disconnect(self):
|
104
|
+
"""断开连接"""
|
105
|
+
pass
|
106
|
+
|
107
|
+
def is_connected(self):
|
108
|
+
"""检查连接状态"""
|
109
|
+
pass
|
110
|
+
|
111
|
+
def execute(self, query, params=None):
|
112
|
+
"""执行查询"""
|
113
|
+
pass
|
114
|
+
|
115
|
+
def begin_transaction(self):
|
116
|
+
"""开始事务"""
|
117
|
+
pass
|
118
|
+
|
119
|
+
def commit(self):
|
120
|
+
"""提交事务"""
|
121
|
+
pass
|
122
|
+
|
123
|
+
def rollback(self):
|
124
|
+
"""回滚事务"""
|
125
|
+
pass
|
126
|
+
```
|
127
|
+
|
128
|
+
### 4.2 BaseAdapter接口
|
129
|
+
|
130
|
+
```python
|
131
|
+
class BaseAdapter:
|
132
|
+
"""所有数据库适配器的基类"""
|
133
|
+
|
134
|
+
def __init__(self, connection):
|
135
|
+
"""初始化适配器"""
|
136
|
+
self.connection = connection
|
137
|
+
|
138
|
+
def execute_query(self, query, params=None):
|
139
|
+
"""执行查询"""
|
140
|
+
pass
|
141
|
+
|
142
|
+
def execute_write(self, query, params=None):
|
143
|
+
"""执行写操作"""
|
144
|
+
pass
|
145
|
+
|
146
|
+
def list_resources(self):
|
147
|
+
"""列出资源(表/集合/键)"""
|
148
|
+
pass
|
149
|
+
|
150
|
+
def describe_resource(self, resource_name):
|
151
|
+
"""描述资源结构"""
|
152
|
+
pass
|
153
|
+
|
154
|
+
def get_resource_stats(self, resource_name):
|
155
|
+
"""获取资源统计信息"""
|
156
|
+
pass
|
157
|
+
|
158
|
+
def extract_resource_name(self, query):
|
159
|
+
"""从查询中提取资源名称"""
|
160
|
+
pass
|
161
|
+
```
|
162
|
+
|
163
|
+
### 4.3 QueryBuilder接口
|
164
|
+
|
165
|
+
```python
|
166
|
+
class QueryBuilder:
|
167
|
+
"""查询构建器基类"""
|
168
|
+
|
169
|
+
def select(self, resource_name, fields=None):
|
170
|
+
"""构建选择查询"""
|
171
|
+
pass
|
172
|
+
|
173
|
+
def insert(self, resource_name, data):
|
174
|
+
"""构建插入查询"""
|
175
|
+
pass
|
176
|
+
|
177
|
+
def update(self, resource_name, data, condition):
|
178
|
+
"""构建更新查询"""
|
179
|
+
pass
|
180
|
+
|
181
|
+
def delete(self, resource_name, condition):
|
182
|
+
"""构建删除查询"""
|
183
|
+
pass
|
184
|
+
|
185
|
+
def build(self):
|
186
|
+
"""构建最终查询"""
|
187
|
+
pass
|
188
|
+
```
|
189
|
+
|
190
|
+
### 4.4 PermissionChecker接口
|
191
|
+
|
192
|
+
```python
|
193
|
+
class PermissionChecker:
|
194
|
+
"""权限检查器"""
|
195
|
+
|
196
|
+
def check_permission(self, connection_name, resource_name, operation_type):
|
197
|
+
"""检查权限"""
|
198
|
+
pass
|
199
|
+
|
200
|
+
def get_allowed_operations(self, connection_name, resource_name):
|
201
|
+
"""获取允许的操作"""
|
202
|
+
pass
|
203
|
+
```
|
204
|
+
|
205
|
+
## 5. 数据流
|
206
|
+
|
207
|
+
以下是典型操作的数据流:
|
208
|
+
|
209
|
+
### 5.1 读操作
|
210
|
+
|
211
|
+
```mermaid
|
212
|
+
sequenceDiagram
|
213
|
+
participant Client
|
214
|
+
participant API as API层
|
215
|
+
participant Permission as 权限层
|
216
|
+
participant Query as 查询层
|
217
|
+
participant Adapter as 适配器层
|
218
|
+
participant Connection as 连接层
|
219
|
+
participant DB as 数据库
|
220
|
+
|
221
|
+
Client->>API: 执行查询
|
222
|
+
API->>Permission: 检查权限
|
223
|
+
Permission-->>API: 权限验证通过
|
224
|
+
API->>Query: 构建查询
|
225
|
+
Query-->>API: 返回查询对象
|
226
|
+
API->>Adapter: 执行查询
|
227
|
+
Adapter->>Connection: 发送查询
|
228
|
+
Connection->>DB: 执行数据库操作
|
229
|
+
DB-->>Connection: 返回结果
|
230
|
+
Connection-->>Adapter: 返回结果
|
231
|
+
Adapter-->>API: 转换并返回结果
|
232
|
+
API-->>Client: 返回最终结果
|
233
|
+
```
|
234
|
+
|
235
|
+
### 5.2 写操作
|
236
|
+
|
237
|
+
```mermaid
|
238
|
+
sequenceDiagram
|
239
|
+
participant Client
|
240
|
+
participant API as API层
|
241
|
+
participant Permission as 权限层
|
242
|
+
participant Query as 查询层
|
243
|
+
participant Adapter as 适配器层
|
244
|
+
participant Connection as 连接层
|
245
|
+
participant DB as 数据库
|
246
|
+
|
247
|
+
Client->>API: 执行写操作
|
248
|
+
API->>Permission: 检查写权限
|
249
|
+
Permission-->>API: 权限验证通过
|
250
|
+
API->>Query: 构建写操作
|
251
|
+
Query-->>API: 返回写操作对象
|
252
|
+
API->>Adapter: 执行写操作
|
253
|
+
Adapter->>Connection: 发送写操作
|
254
|
+
Connection->>DB: 执行数据库操作
|
255
|
+
DB-->>Connection: 返回结果
|
256
|
+
Connection-->>Adapter: 返回结果
|
257
|
+
Adapter-->>API: 转换并返回结果
|
258
|
+
API-->>Client: 返回最终结果
|
259
|
+
```
|
260
|
+
|
261
|
+
## 6. 资源命名和操作类型统一
|
262
|
+
|
263
|
+
### 6.1 资源命名
|
264
|
+
|
265
|
+
不同数据库使用不同的术语来表示数据存储单元:
|
266
|
+
|
267
|
+
| 数据库类型 | 资源类型 |
|
268
|
+
|----------|---------|
|
269
|
+
| SQL | 表(Table) |
|
270
|
+
| MongoDB | 集合(Collection) |
|
271
|
+
| Redis | 键(Key) |
|
272
|
+
|
273
|
+
为了统一这些概念,我们将使用"资源"(Resource)作为通用术语,并在适配器层进行适当的转换。
|
274
|
+
|
275
|
+
### 6.2 操作类型统一
|
276
|
+
|
277
|
+
不同数据库支持不同的操作类型,我们将定义一组通用的操作类型:
|
278
|
+
|
279
|
+
| 通用操作类型 | SQL等价操作 | MongoDB等价操作 | Redis等价操作 |
|
280
|
+
|------------|-----------|--------------|-------------|
|
281
|
+
| READ | SELECT | find | GET, HGET等 |
|
282
|
+
| INSERT | INSERT | insertOne | SET, HSET等 |
|
283
|
+
| UPDATE | UPDATE | updateOne | SET, HSET等 |
|
284
|
+
| DELETE | DELETE | deleteOne | DEL, HDEL等 |
|
285
|
+
|
286
|
+
## 7. 错误处理和重试机制
|
287
|
+
|
288
|
+
### 7.1 错误类型统一
|
289
|
+
|
290
|
+
不同数据库产生不同类型的错误,我们将定义一组通用的错误类型:
|
291
|
+
|
292
|
+
- `ConnectionError`:连接错误
|
293
|
+
- `AuthenticationError`:认证错误
|
294
|
+
- `ResourceNotFoundError`:资源不存在
|
295
|
+
- `DuplicateKeyError`:重复键错误
|
296
|
+
- `PermissionError`:权限错误
|
297
|
+
- `QueryError`:查询错误
|
298
|
+
- `TransactionError`:事务错误
|
299
|
+
|
300
|
+
### 7.2 重试机制
|
301
|
+
|
302
|
+
对于临时性错误(如连接超时),我们将实现统一的重试机制:
|
303
|
+
|
304
|
+
- 指数退避算法
|
305
|
+
- 可配置的最大重试次数
|
306
|
+
- 可配置的重试间隔
|
307
|
+
- 特定错误类型的重试策略
|
308
|
+
|
309
|
+
## 8. 配置管理
|
310
|
+
|
311
|
+
配置文件将扩展以支持多数据库类型:
|
312
|
+
|
313
|
+
```yaml
|
314
|
+
connections:
|
315
|
+
mysql_conn:
|
316
|
+
type: mysql
|
317
|
+
host: localhost
|
318
|
+
port: 3306
|
319
|
+
database: test_db
|
320
|
+
username: user
|
321
|
+
password: pass
|
322
|
+
writable: true
|
323
|
+
write_permissions:
|
324
|
+
default_policy: read_only
|
325
|
+
tables:
|
326
|
+
users:
|
327
|
+
operations: [INSERT, UPDATE]
|
328
|
+
|
329
|
+
mongo_conn:
|
330
|
+
type: mongodb
|
331
|
+
uri: mongodb://localhost:27017
|
332
|
+
database: test_db
|
333
|
+
writable: true
|
334
|
+
write_permissions:
|
335
|
+
default_policy: read_only
|
336
|
+
collections:
|
337
|
+
users:
|
338
|
+
operations: [INSERT, UPDATE]
|
339
|
+
|
340
|
+
redis_conn:
|
341
|
+
type: redis
|
342
|
+
host: localhost
|
343
|
+
port: 6379
|
344
|
+
database: 0
|
345
|
+
writable: true
|
346
|
+
write_permissions:
|
347
|
+
default_policy: read_only
|
348
|
+
keys:
|
349
|
+
user:*:
|
350
|
+
operations: [SET, DEL]
|
351
|
+
```
|
352
|
+
|
353
|
+
## 9. 实现计划
|
354
|
+
|
355
|
+
多数据库支持架构的实现将分为以下几个阶段:
|
356
|
+
|
357
|
+
### 阶段1:基础架构设计和实现
|
358
|
+
|
359
|
+
- 设计和实现连接层
|
360
|
+
- 设计和实现适配器层
|
361
|
+
- 设计和实现基本的查询层
|
362
|
+
- 更新配置管理
|
363
|
+
|
364
|
+
### 阶段2:SQL数据库支持
|
365
|
+
|
366
|
+
- 实现SQL连接和适配器
|
367
|
+
- 实现SQL查询构建器
|
368
|
+
- 实现SQL权限检查
|
369
|
+
|
370
|
+
### 阶段3:MongoDB支持
|
371
|
+
|
372
|
+
- 实现MongoDB连接和适配器
|
373
|
+
- 实现MongoDB查询构建器
|
374
|
+
- 实现MongoDB权限检查
|
375
|
+
|
376
|
+
### 阶段4:Redis支持
|
377
|
+
|
378
|
+
- 实现Redis连接和适配器
|
379
|
+
- 实现Redis命令构建器
|
380
|
+
- 实现Redis权限检查
|
381
|
+
|
382
|
+
### 阶段5:高级功能和优化
|
383
|
+
|
384
|
+
- 实现事务支持
|
385
|
+
- 优化性能
|
386
|
+
- 完善错误处理和重试机制
|
387
|
+
- 增强测试覆盖率
|
388
|
+
|
389
|
+
## 10. 兼容性考虑
|
390
|
+
|
391
|
+
为了保持与现有代码的兼容性,我们将:
|
392
|
+
|
393
|
+
- 保持现有API的向后兼容性
|
394
|
+
- 提供迁移工具和指南
|
395
|
+
- 在一段时间内同时支持旧API和新API
|
396
|
+
- 逐步弃用旧API
|
397
|
+
|
398
|
+
## 11. 测试策略
|
399
|
+
|
400
|
+
测试策略将包括:
|
401
|
+
|
402
|
+
- 单元测试:测试各个组件的功能
|
403
|
+
- 集成测试:测试组件之间的交互
|
404
|
+
- 端到端测试:测试完整的数据流
|
405
|
+
- 性能测试:测试系统在不同负载下的性能
|
406
|
+
- 兼容性测试:测试与不同数据库版本的兼容性
|
407
|
+
|
408
|
+
## 12. 文档计划
|
409
|
+
|
410
|
+
文档计划将包括:
|
411
|
+
|
412
|
+
- 架构设计文档
|
413
|
+
- API参考文档
|
414
|
+
- 用户指南
|
415
|
+
- 迁移指南
|
416
|
+
- 示例和教程
|
417
|
+
|
418
|
+
## 13. 总结
|
419
|
+
|
420
|
+
多数据库支持架构将为MCP Database Utilities提供一个灵活、可扩展的基础,支持不同类型的数据库,同时保持统一的接口和一致的用户体验。通过分层设计和适当的抽象,我们可以隔离不同数据库的特性差异,提供统一的接口,同时保持足够的灵活性来支持各种数据库特性。
|