@neverinfamous/mysql-mcp 2.1.0 → 2.3.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/.env.example +14 -4
- package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
- package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
- package/.github/dependabot.yml +15 -0
- package/.github/pull_request_template.md +5 -0
- package/.github/workflows/codeql.yml +41 -42
- package/.github/workflows/docker-publish.yml +247 -210
- package/.github/workflows/publish-npm.yml +16 -6
- package/CHANGELOG.md +357 -22
- package/CODE_MODE.md +245 -0
- package/CODE_OF_CONDUCT.md +2 -0
- package/DOCKER_README.md +250 -161
- package/Dockerfile +2 -2
- package/README.md +239 -182
- package/SECURITY.md +0 -8
- package/VERSION +1 -1
- package/dist/__tests__/mocks/adapter.d.ts +3 -3
- package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
- package/dist/__tests__/mocks/adapter.js +51 -35
- package/dist/__tests__/mocks/adapter.js.map +1 -1
- package/dist/__tests__/mocks/index.d.ts +4 -4
- package/dist/__tests__/mocks/index.d.ts.map +1 -1
- package/dist/__tests__/mocks/index.js +2 -2
- package/dist/__tests__/mocks/index.js.map +1 -1
- package/dist/__tests__/mocks/mysql.d.ts +2 -2
- package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
- package/dist/__tests__/mocks/mysql.js +14 -14
- package/dist/__tests__/mocks/mysql.js.map +1 -1
- package/dist/__tests__/setup.d.ts.map +1 -1
- package/dist/__tests__/setup.js +7 -7
- package/dist/__tests__/setup.js.map +1 -1
- package/dist/adapters/DatabaseAdapter.d.ts +2 -2
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
- package/dist/adapters/DatabaseAdapter.js +69 -40
- package/dist/adapters/DatabaseAdapter.js.map +1 -1
- package/dist/adapters/mysql/MySQLAdapter.d.ts +14 -4
- package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
- package/dist/adapters/mysql/MySQLAdapter.js +152 -116
- package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
- package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
- package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
- package/dist/adapters/mysql/SchemaManager.js +76 -56
- package/dist/adapters/mysql/SchemaManager.js.map +1 -1
- package/dist/adapters/mysql/index.d.ts +2 -2
- package/dist/adapters/mysql/index.js +2 -2
- package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
- package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
- package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
- package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
- package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
- package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
- package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
- package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
- package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
- package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
- package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
- package/dist/adapters/mysql/prompts/index.d.ts +10 -3
- package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/index.js +106 -63
- package/dist/adapters/mysql/prompts/index.js.map +1 -1
- package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
- package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
- package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
- package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
- package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
- package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
- package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/routerSetup.js +8 -3
- package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
- package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
- package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
- package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
- package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
- package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
- package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
- package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
- package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/capabilities.js +19 -16
- package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
- package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
- package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/cluster.js +17 -15
- package/dist/adapters/mysql/resources/cluster.js.map +1 -1
- package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
- package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/docstore.js +12 -12
- package/dist/adapters/mysql/resources/docstore.js.map +1 -1
- package/dist/adapters/mysql/resources/events.d.ts +2 -2
- package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/events.js +12 -12
- package/dist/adapters/mysql/resources/events.js.map +1 -1
- package/dist/adapters/mysql/resources/health.d.ts +2 -2
- package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/health.js +36 -32
- package/dist/adapters/mysql/resources/health.js.map +1 -1
- package/dist/adapters/mysql/resources/index.d.ts +11 -3
- package/dist/adapters/mysql/resources/index.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/index.js +28 -20
- package/dist/adapters/mysql/resources/index.js.map +1 -1
- package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
- package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/indexes.js +12 -12
- package/dist/adapters/mysql/resources/indexes.js.map +1 -1
- package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
- package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/innodb.js +37 -36
- package/dist/adapters/mysql/resources/innodb.js.map +1 -1
- package/dist/adapters/mysql/resources/locks.d.ts +2 -2
- package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/locks.js +14 -14
- package/dist/adapters/mysql/resources/locks.js.map +1 -1
- package/dist/adapters/mysql/resources/performance.d.ts +2 -2
- package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/performance.js +30 -29
- package/dist/adapters/mysql/resources/performance.js.map +1 -1
- package/dist/adapters/mysql/resources/pool.d.ts +2 -2
- package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/pool.js +9 -9
- package/dist/adapters/mysql/resources/pool.js.map +1 -1
- package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
- package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/processlist.js +9 -9
- package/dist/adapters/mysql/resources/processlist.js.map +1 -1
- package/dist/adapters/mysql/resources/replication.d.ts +2 -2
- package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/replication.js +42 -35
- package/dist/adapters/mysql/resources/replication.js.map +1 -1
- package/dist/adapters/mysql/resources/schema.d.ts +2 -2
- package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/schema.js +8 -8
- package/dist/adapters/mysql/resources/schema.js.map +1 -1
- package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
- package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/spatial.js +9 -9
- package/dist/adapters/mysql/resources/spatial.js.map +1 -1
- package/dist/adapters/mysql/resources/status.d.ts +2 -2
- package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/status.js +10 -10
- package/dist/adapters/mysql/resources/status.js.map +1 -1
- package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
- package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/sysschema.js +10 -10
- package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
- package/dist/adapters/mysql/resources/tables.d.ts +2 -2
- package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/tables.js +8 -8
- package/dist/adapters/mysql/resources/tables.js.map +1 -1
- package/dist/adapters/mysql/resources/variables.d.ts +2 -2
- package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
- package/dist/adapters/mysql/resources/variables.js +10 -10
- package/dist/adapters/mysql/resources/variables.js.map +1 -1
- package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
- package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/admin/backup.js +193 -101
- package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
- package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/admin/index.js +6 -6
- package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
- package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
- package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/admin/maintenance.js +97 -66
- package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
- package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
- package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
- package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
- package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
- package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
- package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
- package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/cluster/index.js +3 -3
- package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +225 -97
- package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
- package/dist/adapters/mysql/tools/codemode/index.d.ts +38 -0
- package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -0
- package/dist/adapters/mysql/tools/codemode/index.js +203 -0
- package/dist/adapters/mysql/tools/codemode/index.js.map +1 -0
- package/dist/adapters/mysql/tools/core.d.ts +2 -2
- package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/core.js +234 -114
- package/dist/adapters/mysql/tools/core.js.map +1 -1
- package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
- package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/docstore.js +252 -117
- package/dist/adapters/mysql/tools/docstore.js.map +1 -1
- package/dist/adapters/mysql/tools/events.d.ts +2 -2
- package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/events.js +236 -113
- package/dist/adapters/mysql/tools/events.js.map +1 -1
- package/dist/adapters/mysql/tools/index.d.ts +19 -19
- package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/index.js +19 -19
- package/dist/adapters/mysql/tools/index.js.map +1 -1
- package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
- package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/json/core.js +225 -131
- package/dist/adapters/mysql/tools/json/core.js.map +1 -1
- package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
- package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
- package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
- package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
- package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/json/helpers.js +141 -57
- package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
- package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/json/index.js +6 -6
- package/dist/adapters/mysql/tools/json/index.js.map +1 -1
- package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
- package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/partitioning.js +180 -64
- package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
- package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
- package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/performance/analysis.js +184 -101
- package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
- package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/performance/index.js +4 -4
- package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
- package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
- package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/performance/optimization.js +229 -77
- package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
- package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
- package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/proxysql.js +213 -125
- package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
- package/dist/adapters/mysql/tools/replication.d.ts +2 -2
- package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/replication.js +117 -66
- package/dist/adapters/mysql/tools/replication.js.map +1 -1
- package/dist/adapters/mysql/tools/roles.d.ts +2 -2
- package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/roles.js +276 -84
- package/dist/adapters/mysql/tools/roles.js.map +1 -1
- package/dist/adapters/mysql/tools/router.d.ts +2 -2
- package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/router.js +174 -109
- package/dist/adapters/mysql/tools/router.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
- package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/index.js +7 -7
- package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/management.js +99 -42
- package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/routines.js +36 -19
- package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
- package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
- package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
- package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
- package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/schema/views.js +59 -28
- package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
- package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
- package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/security/audit.js +61 -55
- package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
- package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
- package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/security/data-protection.js +193 -80
- package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
- package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
- package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/security/encryption.js +86 -67
- package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
- package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/security/index.js +4 -4
- package/dist/adapters/mysql/tools/security/index.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
- package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/backup.js +122 -63
- package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/common.js +61 -37
- package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
- package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
- package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/shell/index.js +6 -6
- package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
- package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/info.js +12 -12
- package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
- package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/restore.js +128 -43
- package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
- package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
- package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
- package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
- package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
- package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
- package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
- package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/spatial/index.js +5 -5
- package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
- package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
- package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/spatial/operations.js +175 -106
- package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
- package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
- package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
- package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
- package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
- package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/spatial/setup.js +122 -34
- package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
- package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
- package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
- package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
- package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
- package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
- package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
- package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/stats/index.js +3 -3
- package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
- package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
- package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
- package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
- package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
- package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
- package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
- package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/sysschema/resources.js +58 -33
- package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
- package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
- package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/text/fulltext.js +214 -55
- package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
- package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
- package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/text/index.js +6 -5
- package/dist/adapters/mysql/tools/text/index.js.map +1 -1
- package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
- package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/text/processing.js +175 -122
- package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
- package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
- package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
- package/dist/adapters/mysql/tools/transactions.js +162 -85
- package/dist/adapters/mysql/tools/transactions.js.map +1 -1
- package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
- package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
- package/dist/adapters/mysql/types/proxysql-types.js +52 -30
- package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
- package/dist/adapters/mysql/types/router-types.d.ts +1 -1
- package/dist/adapters/mysql/types/router-types.js +17 -17
- package/dist/adapters/mysql/types/router-types.js.map +1 -1
- package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
- package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
- package/dist/adapters/mysql/types/shell-types.js +255 -82
- package/dist/adapters/mysql/types/shell-types.js.map +1 -1
- package/dist/adapters/mysql/types.d.ts +976 -80
- package/dist/adapters/mysql/types.d.ts.map +1 -1
- package/dist/adapters/mysql/types.js +1317 -170
- package/dist/adapters/mysql/types.js.map +1 -1
- package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
- package/dist/auth/AuthorizationServerDiscovery.js +16 -14
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
- package/dist/auth/OAuthResourceServer.d.ts +1 -1
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
- package/dist/auth/OAuthResourceServer.js +4 -4
- package/dist/auth/OAuthResourceServer.js.map +1 -1
- package/dist/auth/TokenValidator.d.ts +1 -1
- package/dist/auth/TokenValidator.d.ts.map +1 -1
- package/dist/auth/TokenValidator.js +30 -20
- package/dist/auth/TokenValidator.js.map +1 -1
- package/dist/auth/errors.d.ts.map +1 -1
- package/dist/auth/errors.js +24 -24
- package/dist/auth/errors.js.map +1 -1
- package/dist/auth/index.d.ts +7 -7
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +6 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/middleware.d.ts +2 -2
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +28 -24
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/scopes.d.ts +2 -2
- package/dist/auth/scopes.d.ts.map +1 -1
- package/dist/auth/scopes.js +23 -16
- package/dist/auth/scopes.js.map +1 -1
- package/dist/auth/types.d.ts +2 -2
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +82 -68
- package/dist/cli/args.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +44 -34
- package/dist/cli.js.map +1 -1
- package/dist/codemode/api.d.ts +69 -0
- package/dist/codemode/api.d.ts.map +1 -0
- package/dist/codemode/api.js +1035 -0
- package/dist/codemode/api.js.map +1 -0
- package/dist/codemode/index.d.ts +13 -0
- package/dist/codemode/index.d.ts.map +1 -0
- package/dist/codemode/index.js +17 -0
- package/dist/codemode/index.js.map +1 -0
- package/dist/codemode/sandbox-factory.d.ts +72 -0
- package/dist/codemode/sandbox-factory.d.ts.map +1 -0
- package/dist/codemode/sandbox-factory.js +88 -0
- package/dist/codemode/sandbox-factory.js.map +1 -0
- package/dist/codemode/sandbox.d.ts +96 -0
- package/dist/codemode/sandbox.d.ts.map +1 -0
- package/dist/codemode/sandbox.js +345 -0
- package/dist/codemode/sandbox.js.map +1 -0
- package/dist/codemode/security.d.ts +44 -0
- package/dist/codemode/security.d.ts.map +1 -0
- package/dist/codemode/security.js +149 -0
- package/dist/codemode/security.js.map +1 -0
- package/dist/codemode/types.d.ts +137 -0
- package/dist/codemode/types.d.ts.map +1 -0
- package/dist/codemode/types.js +46 -0
- package/dist/codemode/types.js.map +1 -0
- package/dist/codemode/worker-sandbox.d.ts +82 -0
- package/dist/codemode/worker-sandbox.d.ts.map +1 -0
- package/dist/codemode/worker-sandbox.js +244 -0
- package/dist/codemode/worker-sandbox.js.map +1 -0
- package/dist/codemode/worker-script.d.ts +8 -0
- package/dist/codemode/worker-script.d.ts.map +1 -0
- package/dist/codemode/worker-script.js +113 -0
- package/dist/codemode/worker-script.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +2 -2
- package/dist/constants/ServerInstructions.d.ts.map +1 -1
- package/dist/constants/ServerInstructions.js +252 -36
- package/dist/constants/ServerInstructions.js.map +1 -1
- package/dist/filtering/ToolConstants.d.ts +12 -12
- package/dist/filtering/ToolConstants.d.ts.map +1 -1
- package/dist/filtering/ToolConstants.js +253 -214
- package/dist/filtering/ToolConstants.js.map +1 -1
- package/dist/filtering/ToolFilter.d.ts +2 -2
- package/dist/filtering/ToolFilter.d.ts.map +1 -1
- package/dist/filtering/ToolFilter.js +47 -36
- package/dist/filtering/ToolFilter.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/logging/McpLogging.d.ts +2 -2
- package/dist/logging/McpLogging.d.ts.map +1 -1
- package/dist/logging/McpLogging.js +16 -13
- package/dist/logging/McpLogging.js.map +1 -1
- package/dist/logging/index.d.ts +1 -1
- package/dist/logging/index.js +1 -1
- package/dist/pool/ConnectionPool.d.ts +3 -3
- package/dist/pool/ConnectionPool.d.ts.map +1 -1
- package/dist/pool/ConnectionPool.js +30 -26
- package/dist/pool/ConnectionPool.js.map +1 -1
- package/dist/progress/ProgressReporter.d.ts +1 -1
- package/dist/progress/ProgressReporter.d.ts.map +1 -1
- package/dist/progress/ProgressReporter.js +5 -5
- package/dist/progress/ProgressReporter.js.map +1 -1
- package/dist/progress/index.d.ts +1 -1
- package/dist/progress/index.d.ts.map +1 -1
- package/dist/progress/index.js +1 -1
- package/dist/progress/index.js.map +1 -1
- package/dist/server/McpServer.d.ts +3 -3
- package/dist/server/McpServer.d.ts.map +1 -1
- package/dist/server/McpServer.js +58 -53
- package/dist/server/McpServer.js.map +1 -1
- package/dist/transports/http.d.ts +3 -3
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +36 -33
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/index.d.ts +1 -1
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +1 -1
- package/dist/transports/index.js.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/modules/database.d.ts +1 -1
- package/dist/types/modules/database.d.ts.map +1 -1
- package/dist/types/modules/errors.d.ts.map +1 -1
- package/dist/types/modules/errors.js +15 -15
- package/dist/types/modules/errors.js.map +1 -1
- package/dist/types/modules/oauth.d.ts +1 -1
- package/dist/types/modules/oauth.d.ts.map +1 -1
- package/dist/types/modules/query.d.ts +8 -8
- package/dist/types/modules/query.d.ts.map +1 -1
- package/dist/types/modules/server.d.ts +5 -3
- package/dist/types/modules/server.d.ts.map +1 -1
- package/dist/types/modules/tools.d.ts +6 -6
- package/dist/types/modules/tools.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +2 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +58 -55
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/promptGenerator.d.ts +1 -1
- package/dist/utils/promptGenerator.d.ts.map +1 -1
- package/dist/utils/promptGenerator.js +24 -16
- package/dist/utils/promptGenerator.js.map +1 -1
- package/dist/utils/validators.d.ts +21 -2
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +101 -13
- package/dist/utils/validators.js.map +1 -1
- package/eslint.config.js +117 -81
- package/package.json +66 -64
- package/releases/release-notes.md +32 -26
- package/releases/v2.0.0-release-notes.md +99 -51
- package/releases/v2.1.0-release-notes.md +14 -5
- package/releases/v2.2.0-release-notes.md +239 -0
- package/releases/v2.3.0-release-notes.md +191 -0
- package/server.json +1 -1
- package/src/__tests__/cli.test.ts +302 -247
- package/src/__tests__/index.test.ts +21 -21
- package/src/__tests__/mocks/adapter.ts +204 -163
- package/src/__tests__/mocks/index.ts +30 -23
- package/src/__tests__/mocks/mysql.ts +94 -84
- package/src/__tests__/perf.test.ts +207 -203
- package/src/__tests__/performance.test.ts +173 -164
- package/src/__tests__/setup.ts +26 -21
- package/src/adapters/DatabaseAdapter.ts +386 -340
- package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
- package/src/adapters/mysql/MySQLAdapter.ts +560 -486
- package/src/adapters/mysql/SchemaManager.ts +251 -208
- package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
- package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
- package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
- package/src/adapters/mysql/index.ts +2 -2
- package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
- package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
- package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
- package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
- package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
- package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
- package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
- package/src/adapters/mysql/prompts/index.ts +202 -145
- package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
- package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
- package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
- package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
- package/src/adapters/mysql/prompts/routerSetup.ts +15 -10
- package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
- package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
- package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +118 -47
- package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
- package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
- package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
- package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
- package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
- package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
- package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
- package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
- package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
- package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
- package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
- package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
- package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
- package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
- package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
- package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
- package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
- package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
- package/src/adapters/mysql/resources/capabilities.ts +61 -42
- package/src/adapters/mysql/resources/cluster.ts +58 -49
- package/src/adapters/mysql/resources/docstore.ts +46 -41
- package/src/adapters/mysql/resources/events.ts +37 -31
- package/src/adapters/mysql/resources/health.ts +98 -74
- package/src/adapters/mysql/resources/index.ts +55 -47
- package/src/adapters/mysql/resources/indexes.ts +66 -51
- package/src/adapters/mysql/resources/innodb.ts +98 -81
- package/src/adapters/mysql/resources/locks.ts +43 -40
- package/src/adapters/mysql/resources/performance.ts +80 -67
- package/src/adapters/mysql/resources/pool.ts +23 -20
- package/src/adapters/mysql/resources/processlist.ts +23 -18
- package/src/adapters/mysql/resources/replication.ts +124 -105
- package/src/adapters/mysql/resources/schema.ts +23 -18
- package/src/adapters/mysql/resources/spatial.ts +31 -26
- package/src/adapters/mysql/resources/status.ts +27 -22
- package/src/adapters/mysql/resources/sysschema.ts +41 -36
- package/src/adapters/mysql/resources/tables.ts +23 -18
- package/src/adapters/mysql/resources/variables.ts +27 -22
- package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
- package/src/adapters/mysql/tools/__tests__/core.test.ts +701 -382
- package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
- package/src/adapters/mysql/tools/__tests__/events.test.ts +806 -486
- package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
- package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
- package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +203 -128
- package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
- package/src/adapters/mysql/tools/__tests__/replication.test.ts +796 -390
- package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
- package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
- package/src/adapters/mysql/tools/__tests__/security.test.ts +746 -421
- package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
- package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
- package/src/adapters/mysql/tools/__tests__/spatial.test.ts +443 -298
- package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +535 -150
- package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
- package/src/adapters/mysql/tools/__tests__/transactions.test.ts +452 -263
- package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
- package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
- package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
- package/src/adapters/mysql/tools/admin/backup.ts +339 -215
- package/src/adapters/mysql/tools/admin/index.ts +46 -46
- package/src/adapters/mysql/tools/admin/maintenance.ts +180 -130
- package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
- package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
- package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +399 -95
- package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
- package/src/adapters/mysql/tools/cluster/index.ts +27 -27
- package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +413 -251
- package/src/adapters/mysql/tools/codemode/index.ts +249 -0
- package/src/adapters/mysql/tools/core.ts +425 -285
- package/src/adapters/mysql/tools/docstore.ts +478 -276
- package/src/adapters/mysql/tools/events.ts +441 -285
- package/src/adapters/mysql/tools/index.ts +31 -20
- package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
- package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
- package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +195 -74
- package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
- package/src/adapters/mysql/tools/json/core.ts +368 -263
- package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
- package/src/adapters/mysql/tools/json/helpers.ts +205 -113
- package/src/adapters/mysql/tools/json/index.ts +46 -46
- package/src/adapters/mysql/tools/partitioning.ts +289 -140
- package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +664 -249
- package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +436 -179
- package/src/adapters/mysql/tools/performance/analysis.ts +319 -215
- package/src/adapters/mysql/tools/performance/index.ts +33 -33
- package/src/adapters/mysql/tools/performance/optimization.ts +438 -183
- package/src/adapters/mysql/tools/proxysql.ts +462 -320
- package/src/adapters/mysql/tools/replication.ts +233 -180
- package/src/adapters/mysql/tools/roles.ts +429 -171
- package/src/adapters/mysql/tools/router.ts +410 -292
- package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
- package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
- package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
- package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
- package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
- package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
- package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
- package/src/adapters/mysql/tools/schema/index.ts +26 -35
- package/src/adapters/mysql/tools/schema/management.ts +167 -94
- package/src/adapters/mysql/tools/schema/routines.ts +79 -48
- package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
- package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
- package/src/adapters/mysql/tools/schema/views.ts +96 -53
- package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
- package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
- package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
- package/src/adapters/mysql/tools/security/audit.ts +213 -193
- package/src/adapters/mysql/tools/security/data-protection.ts +342 -198
- package/src/adapters/mysql/tools/security/encryption.ts +233 -193
- package/src/adapters/mysql/tools/security/index.ts +26 -26
- package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
- package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +183 -130
- package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
- package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
- package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +260 -174
- package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
- package/src/adapters/mysql/tools/shell/backup.ts +280 -188
- package/src/adapters/mysql/tools/shell/common.ts +203 -153
- package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
- package/src/adapters/mysql/tools/shell/index.ts +29 -29
- package/src/adapters/mysql/tools/shell/info.ts +35 -31
- package/src/adapters/mysql/tools/shell/restore.ts +236 -121
- package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
- package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
- package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +284 -148
- package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
- package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
- package/src/adapters/mysql/tools/spatial/index.ts +33 -33
- package/src/adapters/mysql/tools/spatial/operations.ts +254 -171
- package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
- package/src/adapters/mysql/tools/spatial/setup.ts +180 -73
- package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
- package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
- package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
- package/src/adapters/mysql/tools/stats/index.ts +23 -23
- package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
- package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
- package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
- package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +243 -104
- package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
- package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
- package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
- package/src/adapters/mysql/tools/sysschema/resources.ts +140 -99
- package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
- package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
- package/src/adapters/mysql/tools/text/fulltext.ts +327 -123
- package/src/adapters/mysql/tools/text/index.ts +32 -30
- package/src/adapters/mysql/tools/text/processing.ts +281 -212
- package/src/adapters/mysql/tools/transactions.ts +288 -197
- package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
- package/src/adapters/mysql/types/proxysql-types.ts +142 -109
- package/src/adapters/mysql/types/router-types.ts +36 -36
- package/src/adapters/mysql/types/shell-types.ts +280 -94
- package/src/adapters/mysql/types.ts +1475 -164
- package/src/auth/AuthorizationServerDiscovery.ts +127 -113
- package/src/auth/OAuthResourceServer.ts +67 -62
- package/src/auth/TokenValidator.ts +136 -119
- package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
- package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
- package/src/auth/__tests__/TokenValidator.test.ts +297 -285
- package/src/auth/__tests__/errors.test.ts +180 -175
- package/src/auth/__tests__/middleware.test.ts +281 -247
- package/src/auth/__tests__/scopes.test.ts +136 -134
- package/src/auth/errors.ts +56 -56
- package/src/auth/index.ts +23 -17
- package/src/auth/middleware.ts +161 -139
- package/src/auth/scopes.ts +134 -107
- package/src/auth/types.ts +155 -155
- package/src/cli/__tests__/args.test.ts +241 -216
- package/src/cli/__tests__/main.test.ts +191 -158
- package/src/cli/args.ts +285 -258
- package/src/cli.ts +150 -127
- package/src/codemode/api.ts +1224 -0
- package/src/codemode/index.ts +51 -0
- package/src/codemode/sandbox-factory.ts +146 -0
- package/src/codemode/sandbox.ts +450 -0
- package/src/codemode/security.ts +188 -0
- package/src/codemode/types.ts +194 -0
- package/src/codemode/worker-sandbox.ts +326 -0
- package/src/codemode/worker-script.ts +144 -0
- package/src/constants/ServerInstructions.ts +295 -70
- package/src/filtering/ToolConstants.ts +311 -272
- package/src/filtering/ToolFilter.ts +254 -220
- package/src/filtering/__tests__/ToolFilter.test.ts +469 -396
- package/src/index.ts +62 -57
- package/src/logging/McpLogging.ts +128 -119
- package/src/logging/__tests__/McpLogging.test.ts +223 -223
- package/src/logging/index.ts +2 -2
- package/src/pool/ConnectionPool.ts +260 -246
- package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
- package/src/progress/ProgressReporter.ts +123 -123
- package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
- package/src/progress/index.ts +6 -2
- package/src/server/McpServer.ts +305 -285
- package/src/server/__tests__/McpServer.test.ts +333 -291
- package/src/transports/__tests__/http.test.ts +658 -527
- package/src/transports/http.ts +237 -203
- package/src/transports/index.ts +6 -2
- package/src/types/__tests__/types.test.ts +197 -193
- package/src/types/index.ts +49 -37
- package/src/types/modules/database.ts +65 -63
- package/src/types/modules/errors.ts +41 -37
- package/src/types/modules/oauth.ts +46 -46
- package/src/types/modules/query.ts +75 -75
- package/src/types/modules/server.ts +21 -18
- package/src/types/modules/tools.ts +182 -178
- package/src/utils/__tests__/logger.test.ts +424 -414
- package/src/utils/__tests__/validators.test.ts +250 -165
- package/src/utils/logger.ts +344 -330
- package/src/utils/promptGenerator.ts +58 -47
- package/src/utils/validators.ts +217 -91
- package/tsconfig.json +41 -50
- package/vitest.config.ts +23 -23
|
@@ -2,244 +2,1391 @@
|
|
|
2
2
|
* MySQL Adapter - Zod Schemas
|
|
3
3
|
*
|
|
4
4
|
* Input validation schemas for all MySQL tools.
|
|
5
|
+
*
|
|
6
|
+
* DUAL-SCHEMA PATTERN (Split Schema):
|
|
7
|
+
* Base schemas (SchemaBase) are exported for MCP inputSchema visibility.
|
|
8
|
+
* Transformed schemas (Schema) are exported for handler parsing with alias resolution.
|
|
9
|
+
* This ensures MCP clients see all parameter names (including aliases) while
|
|
10
|
+
* handlers receive normalized data with canonical parameter names.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Preprocess Utilities
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Convert undefined input to empty object for optional-param tools.
|
|
18
|
+
* Used with z.preprocess() to handle tools called with no arguments.
|
|
19
|
+
*/
|
|
20
|
+
function defaultToEmpty(input) {
|
|
21
|
+
return input ?? {};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Preprocess table parameters:
|
|
25
|
+
* - Alias: tableName/name → table
|
|
26
|
+
*/
|
|
27
|
+
function preprocessTableParams(input) {
|
|
28
|
+
if (typeof input !== "object" || input === null)
|
|
29
|
+
return input;
|
|
30
|
+
const result = { ...input };
|
|
31
|
+
if (result["table"] === undefined) {
|
|
32
|
+
if (result["tableName"] !== undefined)
|
|
33
|
+
result["table"] = result["tableName"];
|
|
34
|
+
else if (result["name"] !== undefined)
|
|
35
|
+
result["table"] = result["name"];
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Preprocess query parameters:
|
|
41
|
+
* - Alias: sql → query
|
|
42
|
+
* - Alias: tx/txId → transactionId
|
|
43
|
+
*/
|
|
44
|
+
function preprocessQueryParams(input) {
|
|
45
|
+
if (typeof input !== "object" || input === null)
|
|
46
|
+
return input;
|
|
47
|
+
const result = { ...input };
|
|
48
|
+
if (result["query"] === undefined && result["sql"] !== undefined) {
|
|
49
|
+
result["query"] = result["sql"];
|
|
50
|
+
}
|
|
51
|
+
if (result["transactionId"] === undefined) {
|
|
52
|
+
if (result["txId"] !== undefined)
|
|
53
|
+
result["transactionId"] = result["txId"];
|
|
54
|
+
else if (result["tx"] !== undefined)
|
|
55
|
+
result["transactionId"] = result["tx"];
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Preprocess transaction ID parameters:
|
|
61
|
+
* - Alias: tx/txId → transactionId
|
|
62
|
+
*/
|
|
63
|
+
function preprocessTransactionIdParams(input) {
|
|
64
|
+
const normalized = defaultToEmpty(input);
|
|
65
|
+
if (normalized["transactionId"] === undefined) {
|
|
66
|
+
if (normalized["txId"] !== undefined)
|
|
67
|
+
normalized["transactionId"] = normalized["txId"];
|
|
68
|
+
else if (normalized["tx"] !== undefined)
|
|
69
|
+
normalized["transactionId"] = normalized["tx"];
|
|
70
|
+
}
|
|
71
|
+
return normalized;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Preprocess savepoint parameters:
|
|
75
|
+
* - Alias: tx/txId → transactionId
|
|
76
|
+
* - Alias: name → savepoint
|
|
77
|
+
*/
|
|
78
|
+
function preprocessSavepointParams(input) {
|
|
79
|
+
if (typeof input !== "object" || input === null)
|
|
80
|
+
return input;
|
|
81
|
+
const result = { ...input };
|
|
82
|
+
if (result["transactionId"] === undefined) {
|
|
83
|
+
if (result["txId"] !== undefined)
|
|
84
|
+
result["transactionId"] = result["txId"];
|
|
85
|
+
else if (result["tx"] !== undefined)
|
|
86
|
+
result["transactionId"] = result["tx"];
|
|
87
|
+
}
|
|
88
|
+
if (result["savepoint"] === undefined && result["name"] !== undefined) {
|
|
89
|
+
result["savepoint"] = result["name"];
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Preprocess create table parameters:
|
|
95
|
+
* - Alias: table/tableName → name
|
|
96
|
+
*/
|
|
97
|
+
function preprocessCreateTableParams(input) {
|
|
98
|
+
if (typeof input !== "object" || input === null)
|
|
99
|
+
return input;
|
|
100
|
+
const result = { ...input };
|
|
101
|
+
if (result["name"] === undefined) {
|
|
102
|
+
if (result["table"] !== undefined)
|
|
103
|
+
result["name"] = result["table"];
|
|
104
|
+
else if (result["tableName"] !== undefined)
|
|
105
|
+
result["name"] = result["tableName"];
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Preprocess transaction execute parameters:
|
|
111
|
+
* - Alias: queries/sqls → statements
|
|
5
112
|
*/
|
|
6
|
-
|
|
113
|
+
function preprocessTransactionExecuteParams(input) {
|
|
114
|
+
if (typeof input !== "object" || input === null)
|
|
115
|
+
return input;
|
|
116
|
+
const result = { ...input };
|
|
117
|
+
if (result["statements"] === undefined) {
|
|
118
|
+
if (result["queries"] !== undefined)
|
|
119
|
+
result["statements"] = result["queries"];
|
|
120
|
+
else if (result["sqls"] !== undefined)
|
|
121
|
+
result["statements"] = result["sqls"];
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
7
125
|
// =============================================================================
|
|
8
126
|
// Core Tools Schemas
|
|
9
127
|
// =============================================================================
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
128
|
+
// --- ReadQuery ---
|
|
129
|
+
// Base schema for MCP visibility (AI sees: query, sql, params, transactionId, txId, tx)
|
|
130
|
+
export const ReadQuerySchemaBase = z.object({
|
|
131
|
+
query: z.string().optional().describe("SQL SELECT query to execute"),
|
|
132
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
133
|
+
params: z
|
|
134
|
+
.array(z.unknown())
|
|
135
|
+
.optional()
|
|
136
|
+
.describe("Query parameters for prepared statement"),
|
|
137
|
+
transactionId: z
|
|
138
|
+
.string()
|
|
139
|
+
.optional()
|
|
140
|
+
.describe("Optional transaction ID for executing within a transaction"),
|
|
141
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
142
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
14
143
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
144
|
+
// Transformed schema for handler parsing (normalizes aliases)
|
|
145
|
+
export const ReadQuerySchema = z
|
|
146
|
+
.preprocess(preprocessQueryParams, z.object({
|
|
147
|
+
query: z.string().optional().describe("SQL SELECT query to execute"),
|
|
148
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
149
|
+
params: z
|
|
150
|
+
.array(z.unknown())
|
|
151
|
+
.optional()
|
|
152
|
+
.describe("Query parameters for prepared statement"),
|
|
153
|
+
transactionId: z
|
|
154
|
+
.string()
|
|
155
|
+
.optional()
|
|
156
|
+
.describe("Optional transaction ID for executing within a transaction"),
|
|
157
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
158
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
159
|
+
}))
|
|
160
|
+
.transform((data) => ({
|
|
161
|
+
query: data.query ?? data.sql ?? "",
|
|
162
|
+
params: data.params,
|
|
163
|
+
transactionId: data.transactionId ?? data.txId ?? data.tx,
|
|
164
|
+
}))
|
|
165
|
+
.refine((data) => data.query !== "", {
|
|
166
|
+
message: "query (or sql alias) is required",
|
|
19
167
|
});
|
|
168
|
+
// --- WriteQuery ---
|
|
169
|
+
// Base schema for MCP visibility
|
|
170
|
+
export const WriteQuerySchemaBase = z.object({
|
|
171
|
+
query: z
|
|
172
|
+
.string()
|
|
173
|
+
.optional()
|
|
174
|
+
.describe("SQL INSERT/UPDATE/DELETE query to execute"),
|
|
175
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
176
|
+
params: z
|
|
177
|
+
.array(z.unknown())
|
|
178
|
+
.optional()
|
|
179
|
+
.describe("Query parameters for prepared statement"),
|
|
180
|
+
transactionId: z
|
|
181
|
+
.string()
|
|
182
|
+
.optional()
|
|
183
|
+
.describe("Optional transaction ID for executing within a transaction"),
|
|
184
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
185
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
186
|
+
});
|
|
187
|
+
// Transformed schema for handler parsing
|
|
188
|
+
export const WriteQuerySchema = z
|
|
189
|
+
.preprocess(preprocessQueryParams, z.object({
|
|
190
|
+
query: z
|
|
191
|
+
.string()
|
|
192
|
+
.optional()
|
|
193
|
+
.describe("SQL INSERT/UPDATE/DELETE query to execute"),
|
|
194
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
195
|
+
params: z
|
|
196
|
+
.array(z.unknown())
|
|
197
|
+
.optional()
|
|
198
|
+
.describe("Query parameters for prepared statement"),
|
|
199
|
+
transactionId: z
|
|
200
|
+
.string()
|
|
201
|
+
.optional()
|
|
202
|
+
.describe("Optional transaction ID for executing within a transaction"),
|
|
203
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
204
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
205
|
+
}))
|
|
206
|
+
.transform((data) => ({
|
|
207
|
+
query: data.query ?? data.sql ?? "",
|
|
208
|
+
params: data.params,
|
|
209
|
+
transactionId: data.transactionId ?? data.txId ?? data.tx,
|
|
210
|
+
}))
|
|
211
|
+
.refine((data) => data.query !== "", {
|
|
212
|
+
message: "query (or sql alias) is required",
|
|
213
|
+
});
|
|
214
|
+
// --- ListTables ---
|
|
20
215
|
export const ListTablesSchema = z.object({
|
|
21
|
-
database: z
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
216
|
+
database: z
|
|
217
|
+
.string()
|
|
218
|
+
.optional()
|
|
219
|
+
.describe("Database name (defaults to connected database)"),
|
|
220
|
+
});
|
|
221
|
+
// --- DescribeTable ---
|
|
222
|
+
// Base schema for MCP visibility
|
|
223
|
+
export const DescribeTableSchemaBase = z.object({
|
|
224
|
+
table: z.string().optional().describe("Table name to describe"),
|
|
225
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
226
|
+
name: z.string().optional().describe("Alias for table"),
|
|
227
|
+
});
|
|
228
|
+
// Transformed schema for handler parsing
|
|
229
|
+
export const DescribeTableSchema = z
|
|
230
|
+
.preprocess(preprocessTableParams, DescribeTableSchemaBase)
|
|
231
|
+
.transform((data) => ({
|
|
232
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
233
|
+
}))
|
|
234
|
+
.refine((data) => data.table !== "", {
|
|
235
|
+
message: "table (or tableName/name alias) is required",
|
|
236
|
+
});
|
|
237
|
+
// --- CreateTable ---
|
|
238
|
+
// Base schema for MCP visibility
|
|
239
|
+
export const CreateTableSchemaBase = z.object({
|
|
240
|
+
name: z.string().optional().describe("Table name"),
|
|
241
|
+
table: z.string().optional().describe("Alias for name"),
|
|
242
|
+
tableName: z.string().optional().describe("Alias for name"),
|
|
243
|
+
columns: z
|
|
244
|
+
.array(z.object({
|
|
245
|
+
name: z.string().describe("Column name"),
|
|
246
|
+
type: z
|
|
247
|
+
.string()
|
|
248
|
+
.describe("MySQL data type (e.g., INT, VARCHAR(255), JSON)"),
|
|
249
|
+
nullable: z
|
|
250
|
+
.boolean()
|
|
251
|
+
.optional()
|
|
252
|
+
.default(true)
|
|
253
|
+
.describe("Allow NULL values"),
|
|
254
|
+
primaryKey: z.boolean().optional().describe("Is primary key"),
|
|
255
|
+
autoIncrement: z.boolean().optional().describe("Auto-increment column"),
|
|
256
|
+
default: z.unknown().optional().describe("Default value"),
|
|
257
|
+
unique: z.boolean().optional().describe("Unique constraint"),
|
|
258
|
+
comment: z.string().optional().describe("Column comment"),
|
|
259
|
+
}))
|
|
260
|
+
.describe("Column definitions"),
|
|
261
|
+
engine: z
|
|
262
|
+
.enum(["InnoDB", "MyISAM", "MEMORY", "CSV", "ARCHIVE"])
|
|
263
|
+
.optional()
|
|
264
|
+
.default("InnoDB")
|
|
265
|
+
.describe("Storage engine"),
|
|
266
|
+
charset: z.string().optional().default("utf8mb4").describe("Character set"),
|
|
267
|
+
collate: z
|
|
268
|
+
.string()
|
|
269
|
+
.optional()
|
|
270
|
+
.default("utf8mb4_unicode_ci")
|
|
271
|
+
.describe("Collation"),
|
|
272
|
+
comment: z.string().optional().describe("Table comment"),
|
|
273
|
+
ifNotExists: z
|
|
274
|
+
.boolean()
|
|
275
|
+
.optional()
|
|
276
|
+
.default(false)
|
|
277
|
+
.describe("Add IF NOT EXISTS clause"),
|
|
278
|
+
});
|
|
279
|
+
// Transformed schema for handler parsing
|
|
280
|
+
export const CreateTableSchema = z
|
|
281
|
+
.preprocess(preprocessCreateTableParams, CreateTableSchemaBase)
|
|
282
|
+
.transform((data) => ({
|
|
283
|
+
name: data.name ?? data.table ?? data.tableName ?? "",
|
|
284
|
+
columns: data.columns,
|
|
285
|
+
engine: data.engine,
|
|
286
|
+
charset: data.charset,
|
|
287
|
+
collate: data.collate,
|
|
288
|
+
comment: data.comment,
|
|
289
|
+
ifNotExists: data.ifNotExists,
|
|
290
|
+
}))
|
|
291
|
+
.refine((data) => data.name !== "", {
|
|
292
|
+
message: "name (or table/tableName alias) is required",
|
|
293
|
+
});
|
|
294
|
+
// --- DropTable ---
|
|
295
|
+
// Base schema for MCP visibility
|
|
296
|
+
export const DropTableSchemaBase = z.object({
|
|
297
|
+
table: z.string().optional().describe("Table name to drop"),
|
|
298
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
299
|
+
name: z.string().optional().describe("Alias for table"),
|
|
300
|
+
ifExists: z
|
|
301
|
+
.boolean()
|
|
302
|
+
.optional()
|
|
303
|
+
.default(true)
|
|
304
|
+
.describe("Add IF EXISTS clause"),
|
|
305
|
+
});
|
|
306
|
+
// Transformed schema for handler parsing
|
|
307
|
+
export const DropTableSchema = z
|
|
308
|
+
.preprocess(preprocessTableParams, DropTableSchemaBase)
|
|
309
|
+
.transform((data) => ({
|
|
310
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
311
|
+
ifExists: data.ifExists,
|
|
312
|
+
}))
|
|
313
|
+
.refine((data) => data.table !== "", {
|
|
314
|
+
message: "table (or tableName/name alias) is required",
|
|
315
|
+
});
|
|
316
|
+
// --- CreateIndex ---
|
|
317
|
+
// Base schema for MCP visibility
|
|
318
|
+
export const CreateIndexSchemaBase = z.object({
|
|
319
|
+
name: z.string().describe("Index name"),
|
|
320
|
+
table: z.string().optional().describe("Table name"),
|
|
321
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
322
|
+
columns: z.array(z.string()).describe("Column names to index"),
|
|
323
|
+
unique: z.boolean().optional().default(false).describe("Create unique index"),
|
|
324
|
+
type: z
|
|
325
|
+
.enum(["BTREE", "HASH", "FULLTEXT", "SPATIAL"])
|
|
326
|
+
.optional()
|
|
327
|
+
.describe("Index type"),
|
|
328
|
+
ifNotExists: z
|
|
329
|
+
.boolean()
|
|
330
|
+
.optional()
|
|
331
|
+
.default(false)
|
|
332
|
+
.describe("Add IF NOT EXISTS clause"),
|
|
333
|
+
});
|
|
334
|
+
// Transformed schema for handler parsing
|
|
335
|
+
export const CreateIndexSchema = z
|
|
336
|
+
.preprocess(preprocessTableParams, CreateIndexSchemaBase)
|
|
337
|
+
.transform((data) => ({
|
|
338
|
+
name: data.name,
|
|
339
|
+
table: data.table ?? data.tableName ?? "",
|
|
340
|
+
columns: data.columns,
|
|
341
|
+
unique: data.unique,
|
|
342
|
+
type: data.type,
|
|
343
|
+
ifNotExists: data.ifNotExists,
|
|
344
|
+
}))
|
|
345
|
+
.refine((data) => data.table !== "", {
|
|
346
|
+
message: "table (or tableName alias) is required",
|
|
347
|
+
});
|
|
348
|
+
// --- GetIndexes ---
|
|
349
|
+
// Base schema for MCP visibility
|
|
350
|
+
export const GetIndexesSchemaBase = z.object({
|
|
351
|
+
table: z.string().optional().describe("Table name"),
|
|
352
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
353
|
+
});
|
|
354
|
+
// Transformed schema for handler parsing
|
|
355
|
+
export const GetIndexesSchema = z
|
|
356
|
+
.preprocess(preprocessTableParams, GetIndexesSchemaBase)
|
|
357
|
+
.transform((data) => ({
|
|
358
|
+
table: data.table ?? data.tableName ?? "",
|
|
359
|
+
}))
|
|
360
|
+
.refine((data) => data.table !== "", {
|
|
361
|
+
message: "table (or tableName alias) is required",
|
|
58
362
|
});
|
|
59
363
|
// =============================================================================
|
|
60
364
|
// Transaction Schemas
|
|
61
365
|
// =============================================================================
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
366
|
+
// --- TransactionBegin ---
|
|
367
|
+
export const TransactionBeginSchema = z.preprocess(defaultToEmpty, z.object({
|
|
368
|
+
isolationLevel: z
|
|
369
|
+
.enum([
|
|
370
|
+
"READ UNCOMMITTED",
|
|
371
|
+
"READ COMMITTED",
|
|
372
|
+
"REPEATABLE READ",
|
|
373
|
+
"SERIALIZABLE",
|
|
374
|
+
])
|
|
375
|
+
.optional()
|
|
376
|
+
.describe("Transaction isolation level"),
|
|
377
|
+
}));
|
|
378
|
+
// --- TransactionId ---
|
|
379
|
+
// Base schema for MCP visibility
|
|
380
|
+
export const TransactionIdSchemaBase = z.object({
|
|
381
|
+
transactionId: z
|
|
382
|
+
.string()
|
|
383
|
+
.optional()
|
|
384
|
+
.describe("Transaction ID from begin operation"),
|
|
385
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
386
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
387
|
+
});
|
|
388
|
+
// Transformed schema for handler parsing
|
|
389
|
+
export const TransactionIdSchema = z
|
|
390
|
+
.preprocess(preprocessTransactionIdParams, TransactionIdSchemaBase)
|
|
391
|
+
.transform((data) => ({
|
|
392
|
+
transactionId: data.transactionId ?? data.txId ?? data.tx ?? "",
|
|
393
|
+
}))
|
|
394
|
+
.refine((data) => data.transactionId !== "", {
|
|
395
|
+
message: "transactionId (or txId/tx alias) is required. Get one from mysql_transaction_begin first.",
|
|
69
396
|
});
|
|
70
|
-
|
|
71
|
-
|
|
397
|
+
// --- TransactionSavepoint ---
|
|
398
|
+
// Base schema for MCP visibility
|
|
399
|
+
export const TransactionSavepointSchemaBase = z.object({
|
|
400
|
+
transactionId: z.string().optional().describe("Transaction ID"),
|
|
401
|
+
txId: z.string().optional().describe("Alias for transactionId"),
|
|
402
|
+
tx: z.string().optional().describe("Alias for transactionId"),
|
|
403
|
+
savepoint: z.string().optional().describe("Savepoint name"),
|
|
404
|
+
name: z.string().optional().describe("Alias for savepoint"),
|
|
72
405
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
406
|
+
// Transformed schema for handler parsing
|
|
407
|
+
export const TransactionSavepointSchema = z
|
|
408
|
+
.preprocess(preprocessSavepointParams, TransactionSavepointSchemaBase)
|
|
409
|
+
.transform((data) => ({
|
|
410
|
+
transactionId: data.transactionId ?? data.txId ?? data.tx ?? "",
|
|
411
|
+
savepoint: data.savepoint ?? data.name ?? "",
|
|
412
|
+
}))
|
|
413
|
+
.refine((data) => data.transactionId !== "" && data.savepoint !== "", {
|
|
414
|
+
message: 'Both transactionId and savepoint are required. Example: {transactionId: "...", savepoint: "sp1"}',
|
|
76
415
|
});
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
416
|
+
// --- TransactionExecute ---
|
|
417
|
+
// Base schema for MCP visibility
|
|
418
|
+
export const TransactionExecuteSchemaBase = z.object({
|
|
419
|
+
statements: z
|
|
420
|
+
.array(z.string())
|
|
421
|
+
.optional()
|
|
422
|
+
.describe("SQL statements to execute atomically"),
|
|
423
|
+
queries: z.array(z.string()).optional().describe("Alias for statements"),
|
|
424
|
+
isolationLevel: z
|
|
425
|
+
.enum([
|
|
426
|
+
"READ UNCOMMITTED",
|
|
427
|
+
"READ COMMITTED",
|
|
428
|
+
"REPEATABLE READ",
|
|
429
|
+
"SERIALIZABLE",
|
|
430
|
+
])
|
|
431
|
+
.optional()
|
|
432
|
+
.describe("Transaction isolation level"),
|
|
85
433
|
});
|
|
434
|
+
// Transformed schema for handler parsing
|
|
435
|
+
export const TransactionExecuteSchema = z
|
|
436
|
+
.preprocess(preprocessTransactionExecuteParams, TransactionExecuteSchemaBase)
|
|
437
|
+
.transform((data) => ({
|
|
438
|
+
statements: data.statements ?? data.queries ?? [],
|
|
439
|
+
isolationLevel: data.isolationLevel,
|
|
440
|
+
}));
|
|
441
|
+
// =============================================================================
|
|
442
|
+
// Preprocess: JSON/Text column params (table, column, where aliases)
|
|
443
|
+
// =============================================================================
|
|
444
|
+
function preprocessJsonColumnParams(val) {
|
|
445
|
+
if (val == null || typeof val !== "object")
|
|
446
|
+
return val ?? {};
|
|
447
|
+
const v = val;
|
|
448
|
+
return {
|
|
449
|
+
...v,
|
|
450
|
+
table: v["table"] ?? v["tableName"] ?? v["name"],
|
|
451
|
+
column: v["column"] ?? v["col"],
|
|
452
|
+
where: v["where"] ?? v["filter"],
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
export function preprocessQueryOnlyParams(val) {
|
|
456
|
+
if (val == null || typeof val !== "object")
|
|
457
|
+
return val ?? {};
|
|
458
|
+
const v = val;
|
|
459
|
+
return {
|
|
460
|
+
...v,
|
|
461
|
+
query: v["query"] ?? v["sql"],
|
|
462
|
+
};
|
|
463
|
+
}
|
|
86
464
|
// =============================================================================
|
|
87
465
|
// JSON Schemas
|
|
88
466
|
// =============================================================================
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
467
|
+
// --- JsonExtract ---
|
|
468
|
+
export const JsonExtractSchemaBase = z.object({
|
|
469
|
+
table: z.string().optional().describe("Table name"),
|
|
470
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
471
|
+
name: z.string().optional().describe("Alias for table"),
|
|
472
|
+
column: z.string().optional().describe("JSON column name"),
|
|
473
|
+
col: z.string().optional().describe("Alias for column"),
|
|
474
|
+
path: z.string().describe("JSON path (e.g., $.name or $[0])"),
|
|
475
|
+
where: z.string().optional().describe("WHERE clause for filtering rows"),
|
|
476
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
477
|
+
});
|
|
478
|
+
export const JsonExtractSchema = z
|
|
479
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
480
|
+
table: z.string().optional(),
|
|
481
|
+
tableName: z.string().optional(),
|
|
482
|
+
name: z.string().optional(),
|
|
483
|
+
column: z.string().optional(),
|
|
484
|
+
col: z.string().optional(),
|
|
485
|
+
path: z.string(),
|
|
486
|
+
where: z.string().optional(),
|
|
487
|
+
filter: z.string().optional(),
|
|
488
|
+
}))
|
|
489
|
+
.transform((data) => ({
|
|
490
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
491
|
+
column: data.column ?? data.col ?? "",
|
|
492
|
+
path: data.path,
|
|
493
|
+
where: data.where ?? data.filter,
|
|
494
|
+
}))
|
|
495
|
+
.refine((data) => data.table !== "", {
|
|
496
|
+
message: "table (or tableName/name alias) is required",
|
|
497
|
+
})
|
|
498
|
+
.refine((data) => data.column !== "", {
|
|
499
|
+
message: "column (or col alias) is required",
|
|
500
|
+
});
|
|
501
|
+
// --- JsonSet ---
|
|
502
|
+
export const JsonSetSchemaBase = z.object({
|
|
503
|
+
table: z.string().optional().describe("Table name"),
|
|
504
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
505
|
+
name: z.string().optional().describe("Alias for table"),
|
|
506
|
+
column: z.string().optional().describe("JSON column name"),
|
|
507
|
+
col: z.string().optional().describe("Alias for column"),
|
|
508
|
+
path: z.string().describe("JSON path to set"),
|
|
509
|
+
value: z.unknown().describe("Value to set"),
|
|
510
|
+
where: z.string().optional().describe("WHERE clause to identify rows"),
|
|
511
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
118
512
|
});
|
|
513
|
+
export const JsonSetSchema = z
|
|
514
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
515
|
+
table: z.string().optional(),
|
|
516
|
+
tableName: z.string().optional(),
|
|
517
|
+
name: z.string().optional(),
|
|
518
|
+
column: z.string().optional(),
|
|
519
|
+
col: z.string().optional(),
|
|
520
|
+
path: z.string(),
|
|
521
|
+
value: z.unknown(),
|
|
522
|
+
where: z.string().optional(),
|
|
523
|
+
filter: z.string().optional(),
|
|
524
|
+
}))
|
|
525
|
+
.transform((data) => ({
|
|
526
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
527
|
+
column: data.column ?? data.col ?? "",
|
|
528
|
+
path: data.path,
|
|
529
|
+
value: data.value,
|
|
530
|
+
where: data.where ?? data.filter ?? "",
|
|
531
|
+
}))
|
|
532
|
+
.refine((data) => data.table !== "", {
|
|
533
|
+
message: "table (or tableName/name alias) is required",
|
|
534
|
+
})
|
|
535
|
+
.refine((data) => data.column !== "", {
|
|
536
|
+
message: "column (or col alias) is required",
|
|
537
|
+
})
|
|
538
|
+
.refine((data) => data.where !== "", {
|
|
539
|
+
message: "where (or filter alias) is required",
|
|
540
|
+
});
|
|
541
|
+
// --- JsonContains ---
|
|
542
|
+
export const JsonContainsSchemaBase = z.object({
|
|
543
|
+
table: z.string().optional().describe("Table name"),
|
|
544
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
545
|
+
name: z.string().optional().describe("Alias for table"),
|
|
546
|
+
column: z.string().optional().describe("JSON column name"),
|
|
547
|
+
col: z.string().optional().describe("Alias for column"),
|
|
548
|
+
value: z.unknown().describe("Value to search for"),
|
|
549
|
+
path: z.string().optional().describe("Optional JSON path to search within"),
|
|
550
|
+
});
|
|
551
|
+
export const JsonContainsSchema = z
|
|
552
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
553
|
+
table: z.string().optional(),
|
|
554
|
+
tableName: z.string().optional(),
|
|
555
|
+
name: z.string().optional(),
|
|
556
|
+
column: z.string().optional(),
|
|
557
|
+
col: z.string().optional(),
|
|
558
|
+
value: z.unknown(),
|
|
559
|
+
path: z.string().optional(),
|
|
560
|
+
}))
|
|
561
|
+
.transform((data) => ({
|
|
562
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
563
|
+
column: data.column ?? data.col ?? "",
|
|
564
|
+
value: data.value,
|
|
565
|
+
path: data.path,
|
|
566
|
+
}))
|
|
567
|
+
.refine((data) => data.table !== "", {
|
|
568
|
+
message: "table (or tableName/name alias) is required",
|
|
569
|
+
})
|
|
570
|
+
.refine((data) => data.column !== "", {
|
|
571
|
+
message: "column (or col alias) is required",
|
|
572
|
+
});
|
|
573
|
+
// --- JsonKeys ---
|
|
574
|
+
export const JsonKeysSchemaBase = z.object({
|
|
575
|
+
table: z.string().optional().describe("Table name"),
|
|
576
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
577
|
+
name: z.string().optional().describe("Alias for table"),
|
|
578
|
+
column: z.string().optional().describe("JSON column name"),
|
|
579
|
+
col: z.string().optional().describe("Alias for column"),
|
|
580
|
+
path: z.string().optional().describe("Optional JSON path (defaults to root)"),
|
|
581
|
+
});
|
|
582
|
+
export const JsonKeysSchema = z
|
|
583
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
584
|
+
table: z.string().optional(),
|
|
585
|
+
tableName: z.string().optional(),
|
|
586
|
+
name: z.string().optional(),
|
|
587
|
+
column: z.string().optional(),
|
|
588
|
+
col: z.string().optional(),
|
|
589
|
+
path: z.string().optional(),
|
|
590
|
+
}))
|
|
591
|
+
.transform((data) => ({
|
|
592
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
593
|
+
column: data.column ?? data.col ?? "",
|
|
594
|
+
path: data.path,
|
|
595
|
+
}))
|
|
596
|
+
.refine((data) => data.table !== "", {
|
|
597
|
+
message: "table (or tableName/name alias) is required",
|
|
598
|
+
})
|
|
599
|
+
.refine((data) => data.column !== "", {
|
|
600
|
+
message: "column (or col alias) is required",
|
|
601
|
+
});
|
|
602
|
+
// --- JsonSearch ---
|
|
603
|
+
export const JsonSearchSchemaBase = z.object({
|
|
604
|
+
table: z.string().optional().describe("Table name"),
|
|
605
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
606
|
+
name: z.string().optional().describe("Alias for table"),
|
|
607
|
+
column: z.string().optional().describe("JSON column name"),
|
|
608
|
+
col: z.string().optional().describe("Alias for column"),
|
|
609
|
+
searchValue: z.string().describe("String value to search for"),
|
|
610
|
+
mode: z
|
|
611
|
+
.enum(["one", "all"])
|
|
612
|
+
.optional()
|
|
613
|
+
.default("one")
|
|
614
|
+
.describe("Search mode"),
|
|
615
|
+
});
|
|
616
|
+
export const JsonSearchSchema = z
|
|
617
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
618
|
+
table: z.string().optional(),
|
|
619
|
+
tableName: z.string().optional(),
|
|
620
|
+
name: z.string().optional(),
|
|
621
|
+
column: z.string().optional(),
|
|
622
|
+
col: z.string().optional(),
|
|
623
|
+
searchValue: z.string(),
|
|
624
|
+
mode: z.enum(["one", "all"]).optional().default("one"),
|
|
625
|
+
}))
|
|
626
|
+
.transform((data) => ({
|
|
627
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
628
|
+
column: data.column ?? data.col ?? "",
|
|
629
|
+
searchValue: data.searchValue,
|
|
630
|
+
mode: data.mode,
|
|
631
|
+
}))
|
|
632
|
+
.refine((data) => data.table !== "", {
|
|
633
|
+
message: "table (or tableName/name alias) is required",
|
|
634
|
+
})
|
|
635
|
+
.refine((data) => data.column !== "", {
|
|
636
|
+
message: "column (or col alias) is required",
|
|
637
|
+
});
|
|
638
|
+
// --- JsonValidate (no table/column — no aliases needed) ---
|
|
119
639
|
export const JsonValidateSchema = z.object({
|
|
120
|
-
value: z.string().describe(
|
|
640
|
+
value: z.string().describe("JSON string to validate"),
|
|
121
641
|
});
|
|
122
642
|
// =============================================================================
|
|
123
643
|
// Text Schemas
|
|
124
644
|
// =============================================================================
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
645
|
+
// --- RegexpMatch ---
|
|
646
|
+
export const RegexpMatchSchemaBase = z.object({
|
|
647
|
+
table: z.string().optional().describe("Table name"),
|
|
648
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
649
|
+
name: z.string().optional().describe("Alias for table"),
|
|
650
|
+
column: z.string().optional().describe("Column name"),
|
|
651
|
+
col: z.string().optional().describe("Alias for column"),
|
|
652
|
+
pattern: z.string().describe("Regular expression pattern"),
|
|
653
|
+
where: z
|
|
654
|
+
.string()
|
|
655
|
+
.optional()
|
|
656
|
+
.describe("Additional WHERE clause for filtering"),
|
|
657
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
658
|
+
});
|
|
659
|
+
export const RegexpMatchSchema = z
|
|
660
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
661
|
+
table: z.string().optional(),
|
|
662
|
+
tableName: z.string().optional(),
|
|
663
|
+
name: z.string().optional(),
|
|
664
|
+
column: z.string().optional(),
|
|
665
|
+
col: z.string().optional(),
|
|
666
|
+
pattern: z.string(),
|
|
667
|
+
where: z.string().optional(),
|
|
668
|
+
filter: z.string().optional(),
|
|
669
|
+
}))
|
|
670
|
+
.transform((data) => ({
|
|
671
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
672
|
+
column: data.column ?? data.col ?? "",
|
|
673
|
+
pattern: data.pattern,
|
|
674
|
+
where: data.where ?? data.filter,
|
|
675
|
+
}))
|
|
676
|
+
.refine((data) => data.table !== "", {
|
|
677
|
+
message: "table (or tableName/name alias) is required",
|
|
678
|
+
})
|
|
679
|
+
.refine((data) => data.column !== "", {
|
|
680
|
+
message: "column (or col alias) is required",
|
|
681
|
+
});
|
|
682
|
+
// --- LikeSearch ---
|
|
683
|
+
export const LikeSearchSchemaBase = z.object({
|
|
684
|
+
table: z.string().optional().describe("Table name"),
|
|
685
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
686
|
+
name: z.string().optional().describe("Alias for table"),
|
|
687
|
+
column: z.string().optional().describe("Column name"),
|
|
688
|
+
col: z.string().optional().describe("Alias for column"),
|
|
689
|
+
pattern: z.string().describe("LIKE pattern with % and _ wildcards"),
|
|
690
|
+
where: z
|
|
691
|
+
.string()
|
|
692
|
+
.optional()
|
|
693
|
+
.describe("Additional WHERE clause for filtering"),
|
|
694
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
695
|
+
});
|
|
696
|
+
export const LikeSearchSchema = z
|
|
697
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
698
|
+
table: z.string().optional(),
|
|
699
|
+
tableName: z.string().optional(),
|
|
700
|
+
name: z.string().optional(),
|
|
701
|
+
column: z.string().optional(),
|
|
702
|
+
col: z.string().optional(),
|
|
703
|
+
pattern: z.string(),
|
|
704
|
+
where: z.string().optional(),
|
|
705
|
+
filter: z.string().optional(),
|
|
706
|
+
}))
|
|
707
|
+
.transform((data) => ({
|
|
708
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
709
|
+
column: data.column ?? data.col ?? "",
|
|
710
|
+
pattern: data.pattern,
|
|
711
|
+
where: data.where ?? data.filter,
|
|
712
|
+
}))
|
|
713
|
+
.refine((data) => data.table !== "", {
|
|
714
|
+
message: "table (or tableName/name alias) is required",
|
|
715
|
+
})
|
|
716
|
+
.refine((data) => data.column !== "", {
|
|
717
|
+
message: "column (or col alias) is required",
|
|
718
|
+
});
|
|
719
|
+
// --- Soundex ---
|
|
720
|
+
export const SoundexSchemaBase = z.object({
|
|
721
|
+
table: z.string().optional().describe("Table name"),
|
|
722
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
723
|
+
name: z.string().optional().describe("Alias for table"),
|
|
724
|
+
column: z.string().optional().describe("Column name"),
|
|
725
|
+
col: z.string().optional().describe("Alias for column"),
|
|
726
|
+
value: z.string().describe("Value to match phonetically"),
|
|
727
|
+
where: z
|
|
728
|
+
.string()
|
|
729
|
+
.optional()
|
|
730
|
+
.describe("Additional WHERE clause for filtering"),
|
|
731
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
732
|
+
});
|
|
733
|
+
export const SoundexSchema = z
|
|
734
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
735
|
+
table: z.string().optional(),
|
|
736
|
+
tableName: z.string().optional(),
|
|
737
|
+
name: z.string().optional(),
|
|
738
|
+
column: z.string().optional(),
|
|
739
|
+
col: z.string().optional(),
|
|
740
|
+
value: z.string(),
|
|
741
|
+
where: z.string().optional(),
|
|
742
|
+
filter: z.string().optional(),
|
|
743
|
+
}))
|
|
744
|
+
.transform((data) => ({
|
|
745
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
746
|
+
column: data.column ?? data.col ?? "",
|
|
747
|
+
value: data.value,
|
|
748
|
+
where: data.where ?? data.filter,
|
|
749
|
+
}))
|
|
750
|
+
.refine((data) => data.table !== "", {
|
|
751
|
+
message: "table (or tableName/name alias) is required",
|
|
752
|
+
})
|
|
753
|
+
.refine((data) => data.column !== "", {
|
|
754
|
+
message: "column (or col alias) is required",
|
|
755
|
+
});
|
|
756
|
+
// --- Substring ---
|
|
757
|
+
export const SubstringSchemaBase = z.object({
|
|
758
|
+
table: z.string().optional().describe("Table name"),
|
|
759
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
760
|
+
name: z.string().optional().describe("Alias for table"),
|
|
761
|
+
column: z.string().describe("Column name"),
|
|
762
|
+
start: z.number().describe("Starting position (1-indexed)"),
|
|
763
|
+
length: z.number().optional().describe("Number of characters"),
|
|
764
|
+
where: z
|
|
765
|
+
.string()
|
|
766
|
+
.optional()
|
|
767
|
+
.describe("Additional WHERE clause for filtering"),
|
|
768
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
769
|
+
});
|
|
770
|
+
export const SubstringSchema = z
|
|
771
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
772
|
+
table: z.string().optional(),
|
|
773
|
+
tableName: z.string().optional(),
|
|
774
|
+
name: z.string().optional(),
|
|
775
|
+
column: z.string(),
|
|
776
|
+
start: z.number(),
|
|
777
|
+
length: z.number().optional(),
|
|
778
|
+
where: z.string().optional(),
|
|
779
|
+
filter: z.string().optional(),
|
|
780
|
+
}))
|
|
781
|
+
.transform((data) => ({
|
|
782
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
783
|
+
column: data.column,
|
|
784
|
+
start: data.start,
|
|
785
|
+
length: data.length,
|
|
786
|
+
where: data.where ?? data.filter,
|
|
787
|
+
}))
|
|
788
|
+
.refine((data) => data.table !== "", {
|
|
789
|
+
message: "table (or tableName/name alias) is required",
|
|
790
|
+
});
|
|
791
|
+
// --- Concat ---
|
|
792
|
+
export const ConcatSchemaBase = z.object({
|
|
793
|
+
table: z.string().optional().describe("Table name"),
|
|
794
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
795
|
+
name: z.string().optional().describe("Alias for table"),
|
|
796
|
+
columns: z.array(z.string()).describe("Columns to concatenate"),
|
|
797
|
+
separator: z
|
|
798
|
+
.string()
|
|
799
|
+
.optional()
|
|
800
|
+
.default(" ")
|
|
801
|
+
.describe("Separator between values"),
|
|
802
|
+
alias: z
|
|
803
|
+
.string()
|
|
804
|
+
.optional()
|
|
805
|
+
.default("concatenated")
|
|
806
|
+
.describe("Result column name"),
|
|
807
|
+
where: z
|
|
808
|
+
.string()
|
|
809
|
+
.optional()
|
|
810
|
+
.describe("Additional WHERE clause for filtering"),
|
|
811
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
812
|
+
includeSourceColumns: z
|
|
813
|
+
.boolean()
|
|
814
|
+
.optional()
|
|
815
|
+
.default(true)
|
|
816
|
+
.describe("Include individual source columns in output (default: true). Set to false for minimal payload."),
|
|
817
|
+
});
|
|
818
|
+
export const ConcatSchema = z
|
|
819
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
820
|
+
table: z.string().optional(),
|
|
821
|
+
tableName: z.string().optional(),
|
|
822
|
+
name: z.string().optional(),
|
|
823
|
+
columns: z.array(z.string()),
|
|
824
|
+
separator: z.string().optional().default(" "),
|
|
825
|
+
alias: z.string().optional().default("concatenated"),
|
|
826
|
+
where: z.string().optional(),
|
|
827
|
+
filter: z.string().optional(),
|
|
828
|
+
includeSourceColumns: z.boolean().optional().default(true),
|
|
829
|
+
}))
|
|
830
|
+
.transform((data) => ({
|
|
831
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
832
|
+
columns: data.columns,
|
|
833
|
+
separator: data.separator,
|
|
834
|
+
alias: data.alias,
|
|
835
|
+
where: data.where ?? data.filter,
|
|
836
|
+
includeSourceColumns: data.includeSourceColumns,
|
|
837
|
+
}))
|
|
838
|
+
.refine((data) => data.table !== "", {
|
|
839
|
+
message: "table (or tableName/name alias) is required",
|
|
840
|
+
});
|
|
841
|
+
// --- CollationConvert ---
|
|
842
|
+
export const CollationConvertSchemaBase = z.object({
|
|
843
|
+
table: z.string().optional().describe("Table name"),
|
|
844
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
845
|
+
name: z.string().optional().describe("Alias for table"),
|
|
846
|
+
column: z.string().optional().describe("Column name"),
|
|
847
|
+
col: z.string().optional().describe("Alias for column"),
|
|
848
|
+
charset: z.string().describe("Target character set (e.g., utf8mb4)"),
|
|
849
|
+
collation: z.string().optional().describe("Target collation"),
|
|
850
|
+
where: z
|
|
851
|
+
.string()
|
|
852
|
+
.optional()
|
|
853
|
+
.describe("Additional WHERE clause for filtering"),
|
|
854
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
129
855
|
});
|
|
130
|
-
export const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
856
|
+
export const CollationConvertSchema = z
|
|
857
|
+
.preprocess(preprocessJsonColumnParams, z.object({
|
|
858
|
+
table: z.string().optional(),
|
|
859
|
+
tableName: z.string().optional(),
|
|
860
|
+
name: z.string().optional(),
|
|
861
|
+
column: z.string().optional(),
|
|
862
|
+
col: z.string().optional(),
|
|
863
|
+
charset: z.string(),
|
|
864
|
+
collation: z.string().optional(),
|
|
865
|
+
where: z.string().optional(),
|
|
866
|
+
filter: z.string().optional(),
|
|
867
|
+
}))
|
|
868
|
+
.transform((data) => ({
|
|
869
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
870
|
+
column: data.column ?? data.col ?? "",
|
|
871
|
+
charset: data.charset,
|
|
872
|
+
collation: data.collation,
|
|
873
|
+
where: data.where ?? data.filter,
|
|
874
|
+
}))
|
|
875
|
+
.refine((data) => data.table !== "", {
|
|
876
|
+
message: "table (or tableName/name alias) is required",
|
|
877
|
+
})
|
|
878
|
+
.refine((data) => data.column !== "", {
|
|
879
|
+
message: "column (or col alias) is required",
|
|
134
880
|
});
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
881
|
+
// --- FulltextCreate ---
|
|
882
|
+
export const FulltextCreateSchemaBase = z.object({
|
|
883
|
+
table: z.string().optional().describe("Table name"),
|
|
884
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
885
|
+
name: z.string().optional().describe("Alias for table"),
|
|
886
|
+
columns: z
|
|
887
|
+
.array(z.string())
|
|
888
|
+
.optional()
|
|
889
|
+
.describe("Columns to include in index"),
|
|
890
|
+
indexName: z.string().optional().describe("Optional index name"),
|
|
139
891
|
});
|
|
140
|
-
export const FulltextCreateSchema = z
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
892
|
+
export const FulltextCreateSchema = z
|
|
893
|
+
.preprocess(preprocessTableParams, z.object({
|
|
894
|
+
table: z.string().optional(),
|
|
895
|
+
tableName: z.string().optional(),
|
|
896
|
+
name: z.string().optional(),
|
|
897
|
+
columns: z.array(z.string()).optional(),
|
|
898
|
+
indexName: z.string().optional(),
|
|
899
|
+
}))
|
|
900
|
+
.transform((data) => ({
|
|
901
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
902
|
+
columns: data.columns ?? [],
|
|
903
|
+
indexName: data.indexName,
|
|
904
|
+
}))
|
|
905
|
+
.refine((data) => data.table !== "", {
|
|
906
|
+
message: "table (or tableName/name alias) is required",
|
|
907
|
+
})
|
|
908
|
+
.refine((data) => data.columns.length > 0, {
|
|
909
|
+
message: "columns is required",
|
|
144
910
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
911
|
+
// --- FulltextSearch ---
|
|
912
|
+
export const FulltextSearchSchemaBase = z.object({
|
|
913
|
+
table: z.string().optional().describe("Table name"),
|
|
914
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
915
|
+
name: z.string().optional().describe("Alias for table"),
|
|
916
|
+
columns: z.array(z.string()).optional().describe("Columns to search"),
|
|
917
|
+
query: z.string().optional().describe("Search query"),
|
|
918
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
919
|
+
mode: z
|
|
920
|
+
.enum(["NATURAL", "BOOLEAN", "EXPANSION"])
|
|
921
|
+
.optional()
|
|
922
|
+
.default("NATURAL")
|
|
923
|
+
.describe("Search mode"),
|
|
924
|
+
});
|
|
925
|
+
export const FulltextSearchSchema = z
|
|
926
|
+
.preprocess((val) => {
|
|
927
|
+
const v1 = preprocessTableParams(val);
|
|
928
|
+
return preprocessQueryOnlyParams(v1);
|
|
929
|
+
}, z.object({
|
|
930
|
+
table: z.string().optional(),
|
|
931
|
+
tableName: z.string().optional(),
|
|
932
|
+
name: z.string().optional(),
|
|
933
|
+
columns: z.array(z.string()).optional(),
|
|
934
|
+
query: z.string().optional(),
|
|
935
|
+
sql: z.string().optional(),
|
|
936
|
+
mode: z
|
|
937
|
+
.enum(["NATURAL", "BOOLEAN", "EXPANSION"])
|
|
938
|
+
.optional()
|
|
939
|
+
.default("NATURAL"),
|
|
940
|
+
}))
|
|
941
|
+
.transform((data) => ({
|
|
942
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
943
|
+
columns: data.columns ?? [],
|
|
944
|
+
query: data.query ?? data.sql ?? "",
|
|
945
|
+
mode: data.mode,
|
|
946
|
+
}))
|
|
947
|
+
.refine((data) => data.table !== "", {
|
|
948
|
+
message: "table (or tableName/name alias) is required",
|
|
949
|
+
})
|
|
950
|
+
.refine((data) => data.columns.length > 0, { message: "columns is required" })
|
|
951
|
+
.refine((data) => data.query !== "", {
|
|
952
|
+
message: "query (or sql alias) is required",
|
|
150
953
|
});
|
|
151
954
|
// =============================================================================
|
|
152
955
|
// Performance Schemas
|
|
153
956
|
// =============================================================================
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
957
|
+
// --- Explain ---
|
|
958
|
+
export const ExplainSchemaBase = z.object({
|
|
959
|
+
query: z.string().optional().describe("SQL query to explain"),
|
|
960
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
961
|
+
format: z
|
|
962
|
+
.enum(["TRADITIONAL", "JSON", "TREE"])
|
|
963
|
+
.optional()
|
|
964
|
+
.default("JSON")
|
|
965
|
+
.describe("Output format"),
|
|
966
|
+
});
|
|
967
|
+
export const ExplainSchema = z
|
|
968
|
+
.preprocess(preprocessQueryOnlyParams, z.object({
|
|
969
|
+
query: z.string().optional(),
|
|
970
|
+
sql: z.string().optional(),
|
|
971
|
+
format: z
|
|
972
|
+
.enum(["TRADITIONAL", "JSON", "TREE"])
|
|
973
|
+
.optional()
|
|
974
|
+
.default("JSON"),
|
|
975
|
+
}))
|
|
976
|
+
.transform((data) => ({
|
|
977
|
+
query: data.query ?? data.sql ?? "",
|
|
978
|
+
format: data.format,
|
|
979
|
+
}))
|
|
980
|
+
.refine((data) => data.query !== "", {
|
|
981
|
+
message: "query (or sql alias) is required",
|
|
982
|
+
});
|
|
983
|
+
// --- ExplainAnalyze ---
|
|
984
|
+
export const ExplainAnalyzeSchemaBase = z.object({
|
|
985
|
+
query: z.string().optional().describe("SQL query to analyze"),
|
|
986
|
+
sql: z.string().optional().describe("Alias for query"),
|
|
987
|
+
format: z
|
|
988
|
+
.enum(["JSON", "TREE"])
|
|
989
|
+
.optional()
|
|
990
|
+
.default("TREE")
|
|
991
|
+
.describe("Output format"),
|
|
992
|
+
});
|
|
993
|
+
export const ExplainAnalyzeSchema = z
|
|
994
|
+
.preprocess(preprocessQueryOnlyParams, z.object({
|
|
995
|
+
query: z.string().optional(),
|
|
996
|
+
sql: z.string().optional(),
|
|
997
|
+
format: z.enum(["JSON", "TREE"]).optional().default("TREE"),
|
|
998
|
+
}))
|
|
999
|
+
.transform((data) => ({
|
|
1000
|
+
query: data.query ?? data.sql ?? "",
|
|
1001
|
+
format: data.format,
|
|
1002
|
+
}))
|
|
1003
|
+
.refine((data) => data.query !== "", {
|
|
1004
|
+
message: "query (or sql alias) is required",
|
|
158
1005
|
});
|
|
1006
|
+
// --- SlowQuery (no table/query aliases — simple passthrough) ---
|
|
159
1007
|
export const SlowQuerySchema = z.object({
|
|
160
|
-
limit: z
|
|
161
|
-
|
|
1008
|
+
limit: z
|
|
1009
|
+
.number()
|
|
1010
|
+
.optional()
|
|
1011
|
+
.default(10)
|
|
1012
|
+
.describe("Number of slow queries to return"),
|
|
1013
|
+
minTime: z.number().optional().describe("Minimum query time in seconds"),
|
|
162
1014
|
});
|
|
163
|
-
|
|
164
|
-
|
|
1015
|
+
// --- IndexUsage ---
|
|
1016
|
+
export const IndexUsageSchemaBase = z.object({
|
|
1017
|
+
table: z.string().optional().describe("Filter by table name"),
|
|
1018
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1019
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1020
|
+
limit: z
|
|
1021
|
+
.number()
|
|
1022
|
+
.int()
|
|
1023
|
+
.positive()
|
|
1024
|
+
.optional()
|
|
1025
|
+
.default(10)
|
|
1026
|
+
.describe("Maximum number of indexes to return"),
|
|
165
1027
|
});
|
|
166
|
-
export const
|
|
167
|
-
|
|
1028
|
+
export const IndexUsageSchema = z
|
|
1029
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1030
|
+
table: z.string().optional(),
|
|
1031
|
+
tableName: z.string().optional(),
|
|
1032
|
+
name: z.string().optional(),
|
|
1033
|
+
limit: z.number().int().positive().optional().default(10),
|
|
1034
|
+
}))
|
|
1035
|
+
.transform((data) => ({
|
|
1036
|
+
table: data.table ?? data.tableName ?? data.name,
|
|
1037
|
+
limit: data.limit,
|
|
1038
|
+
}));
|
|
1039
|
+
// --- TableStats ---
|
|
1040
|
+
export const TableStatsSchemaBase = z.object({
|
|
1041
|
+
table: z.string().optional().describe("Table name"),
|
|
1042
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1043
|
+
name: z.string().optional().describe("Alias for table"),
|
|
168
1044
|
});
|
|
1045
|
+
export const TableStatsSchema = z
|
|
1046
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1047
|
+
table: z.string().optional(),
|
|
1048
|
+
tableName: z.string().optional(),
|
|
1049
|
+
name: z.string().optional(),
|
|
1050
|
+
}))
|
|
1051
|
+
.transform((data) => ({
|
|
1052
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1053
|
+
}))
|
|
1054
|
+
.refine((data) => data.table !== "", {
|
|
1055
|
+
message: "table (or tableName/name alias) is required",
|
|
1056
|
+
});
|
|
1057
|
+
// =============================================================================
|
|
1058
|
+
// Preprocess: Admin table params (normalizes singular 'table' to 'tables' array)
|
|
1059
|
+
// =============================================================================
|
|
1060
|
+
function preprocessAdminTableParams(val) {
|
|
1061
|
+
if (val == null || typeof val !== "object")
|
|
1062
|
+
return val ?? {};
|
|
1063
|
+
const v = val;
|
|
1064
|
+
// If 'table' is passed as a string and 'tables' is not set, wrap it into an array
|
|
1065
|
+
if (typeof v["table"] === "string" && !Array.isArray(v["tables"])) {
|
|
1066
|
+
return { ...v, tables: [v["table"]] };
|
|
1067
|
+
}
|
|
1068
|
+
// Also support tableName/name aliases → tables
|
|
1069
|
+
if (typeof v["tableName"] === "string" && !Array.isArray(v["tables"])) {
|
|
1070
|
+
return { ...v, tables: [v["tableName"]] };
|
|
1071
|
+
}
|
|
1072
|
+
if (typeof v["name"] === "string" && !Array.isArray(v["tables"])) {
|
|
1073
|
+
return { ...v, tables: [v["name"]] };
|
|
1074
|
+
}
|
|
1075
|
+
return v;
|
|
1076
|
+
}
|
|
169
1077
|
// =============================================================================
|
|
170
1078
|
// Admin Schemas
|
|
171
1079
|
// =============================================================================
|
|
172
|
-
|
|
173
|
-
|
|
1080
|
+
// --- OptimizeTable ---
|
|
1081
|
+
export const OptimizeTableSchemaBase = z.object({
|
|
1082
|
+
tables: z.array(z.string()).optional().describe("Table names to optimize"),
|
|
1083
|
+
table: z.string().optional().describe("Single table name (alias for tables)"),
|
|
1084
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1085
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1086
|
+
});
|
|
1087
|
+
export const OptimizeTableSchema = z
|
|
1088
|
+
.preprocess(preprocessAdminTableParams, z.object({
|
|
1089
|
+
tables: z.array(z.string()).optional(),
|
|
1090
|
+
table: z.string().optional(),
|
|
1091
|
+
tableName: z.string().optional(),
|
|
1092
|
+
name: z.string().optional(),
|
|
1093
|
+
}))
|
|
1094
|
+
.transform((data) => ({
|
|
1095
|
+
tables: data.tables ?? [],
|
|
1096
|
+
}))
|
|
1097
|
+
.refine((data) => data.tables.length > 0, {
|
|
1098
|
+
message: "tables (or table/tableName/name alias) is required",
|
|
174
1099
|
});
|
|
175
|
-
|
|
176
|
-
|
|
1100
|
+
// --- AnalyzeTable ---
|
|
1101
|
+
export const AnalyzeTableSchemaBase = z.object({
|
|
1102
|
+
tables: z.array(z.string()).optional().describe("Table names to analyze"),
|
|
1103
|
+
table: z.string().optional().describe("Single table name (alias for tables)"),
|
|
1104
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1105
|
+
name: z.string().optional().describe("Alias for table"),
|
|
177
1106
|
});
|
|
178
|
-
export const
|
|
179
|
-
|
|
180
|
-
|
|
1107
|
+
export const AnalyzeTableSchema = z
|
|
1108
|
+
.preprocess(preprocessAdminTableParams, z.object({
|
|
1109
|
+
tables: z.array(z.string()).optional(),
|
|
1110
|
+
table: z.string().optional(),
|
|
1111
|
+
tableName: z.string().optional(),
|
|
1112
|
+
name: z.string().optional(),
|
|
1113
|
+
}))
|
|
1114
|
+
.transform((data) => ({
|
|
1115
|
+
tables: data.tables ?? [],
|
|
1116
|
+
}))
|
|
1117
|
+
.refine((data) => data.tables.length > 0, {
|
|
1118
|
+
message: "tables (or table/tableName/name alias) is required",
|
|
181
1119
|
});
|
|
182
|
-
|
|
183
|
-
|
|
1120
|
+
// --- CheckTable ---
|
|
1121
|
+
export const CheckTableSchemaBase = z.object({
|
|
1122
|
+
tables: z.array(z.string()).optional().describe("Table names to check"),
|
|
1123
|
+
table: z.string().optional().describe("Single table name (alias for tables)"),
|
|
1124
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1125
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1126
|
+
option: z
|
|
1127
|
+
.enum(["QUICK", "FAST", "MEDIUM", "EXTENDED", "CHANGED"])
|
|
1128
|
+
.optional()
|
|
1129
|
+
.describe("Check option"),
|
|
184
1130
|
});
|
|
1131
|
+
export const CheckTableSchema = z
|
|
1132
|
+
.preprocess(preprocessAdminTableParams, z.object({
|
|
1133
|
+
tables: z.array(z.string()).optional(),
|
|
1134
|
+
table: z.string().optional(),
|
|
1135
|
+
tableName: z.string().optional(),
|
|
1136
|
+
name: z.string().optional(),
|
|
1137
|
+
option: z
|
|
1138
|
+
.enum(["QUICK", "FAST", "MEDIUM", "EXTENDED", "CHANGED"])
|
|
1139
|
+
.optional(),
|
|
1140
|
+
}))
|
|
1141
|
+
.transform((data) => ({
|
|
1142
|
+
tables: data.tables ?? [],
|
|
1143
|
+
option: data.option,
|
|
1144
|
+
}))
|
|
1145
|
+
.refine((data) => data.tables.length > 0, {
|
|
1146
|
+
message: "tables (or table/tableName/name alias) is required",
|
|
1147
|
+
});
|
|
1148
|
+
// --- FlushTables ---
|
|
1149
|
+
export const FlushTablesSchemaBase = z.object({
|
|
1150
|
+
tables: z
|
|
1151
|
+
.array(z.string())
|
|
1152
|
+
.optional()
|
|
1153
|
+
.describe("Specific tables to flush (empty for all)"),
|
|
1154
|
+
table: z.string().optional().describe("Single table name (alias for tables)"),
|
|
1155
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1156
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1157
|
+
});
|
|
1158
|
+
export const FlushTablesSchema = z
|
|
1159
|
+
.preprocess(preprocessAdminTableParams, z.object({
|
|
1160
|
+
tables: z.array(z.string()).optional(),
|
|
1161
|
+
table: z.string().optional(),
|
|
1162
|
+
tableName: z.string().optional(),
|
|
1163
|
+
name: z.string().optional(),
|
|
1164
|
+
}))
|
|
1165
|
+
.transform((data) => ({
|
|
1166
|
+
tables: data.tables,
|
|
1167
|
+
}));
|
|
185
1168
|
export const KillQuerySchema = z.object({
|
|
186
|
-
processId: z.number().describe(
|
|
187
|
-
connection: z
|
|
1169
|
+
processId: z.number().describe("Process ID to kill"),
|
|
1170
|
+
connection: z
|
|
1171
|
+
.boolean()
|
|
1172
|
+
.optional()
|
|
1173
|
+
.default(false)
|
|
1174
|
+
.describe("Kill connection instead of query"),
|
|
188
1175
|
});
|
|
189
1176
|
export const ShowProcesslistSchema = z.object({
|
|
190
|
-
full: z.boolean().optional().default(false).describe(
|
|
1177
|
+
full: z.boolean().optional().default(false).describe("Show full query text"),
|
|
191
1178
|
});
|
|
192
1179
|
export const ShowStatusSchema = z.object({
|
|
193
|
-
like: z.string().optional().describe(
|
|
194
|
-
global: z.boolean().optional().default(true).describe(
|
|
1180
|
+
like: z.string().optional().describe("Filter variables by LIKE pattern"),
|
|
1181
|
+
global: z.boolean().optional().default(true).describe("Show global status"),
|
|
1182
|
+
limit: z
|
|
1183
|
+
.number()
|
|
1184
|
+
.int()
|
|
1185
|
+
.positive()
|
|
1186
|
+
.optional()
|
|
1187
|
+
.describe("Maximum number of variables to return (default: 100). Set higher to see all."),
|
|
195
1188
|
});
|
|
196
1189
|
export const ShowVariablesSchema = z.object({
|
|
197
|
-
like: z.string().optional().describe(
|
|
198
|
-
global: z
|
|
1190
|
+
like: z.string().optional().describe("Filter variables by LIKE pattern"),
|
|
1191
|
+
global: z
|
|
1192
|
+
.boolean()
|
|
1193
|
+
.optional()
|
|
1194
|
+
.default(true)
|
|
1195
|
+
.describe("Show global variables"),
|
|
1196
|
+
limit: z
|
|
1197
|
+
.number()
|
|
1198
|
+
.int()
|
|
1199
|
+
.positive()
|
|
1200
|
+
.optional()
|
|
1201
|
+
.describe("Maximum number of variables to return (default: 100). Set higher to see all."),
|
|
199
1202
|
});
|
|
200
1203
|
// =============================================================================
|
|
201
1204
|
// Backup Schemas
|
|
202
1205
|
// =============================================================================
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
1206
|
+
// --- ExportTable ---
|
|
1207
|
+
export const ExportTableSchemaBase = z.object({
|
|
1208
|
+
table: z.string().optional().describe("Table name"),
|
|
1209
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1210
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1211
|
+
format: z
|
|
1212
|
+
.enum(["SQL", "CSV"])
|
|
1213
|
+
.optional()
|
|
1214
|
+
.default("SQL")
|
|
1215
|
+
.describe("Export format"),
|
|
1216
|
+
where: z.string().optional().describe("WHERE clause to filter rows"),
|
|
1217
|
+
filter: z.string().optional().describe("Alias for where"),
|
|
1218
|
+
limit: z
|
|
1219
|
+
.number()
|
|
1220
|
+
.int()
|
|
1221
|
+
.positive()
|
|
1222
|
+
.optional()
|
|
1223
|
+
.default(100)
|
|
1224
|
+
.describe("Maximum number of rows to export (default: 100). Set higher to export more rows."),
|
|
1225
|
+
});
|
|
1226
|
+
export const ExportTableSchema = z
|
|
1227
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1228
|
+
table: z.string().optional(),
|
|
1229
|
+
tableName: z.string().optional(),
|
|
1230
|
+
name: z.string().optional(),
|
|
1231
|
+
format: z.enum(["SQL", "CSV"]).optional().default("SQL"),
|
|
1232
|
+
where: z.string().optional(),
|
|
1233
|
+
filter: z.string().optional(),
|
|
1234
|
+
limit: z.number().int().positive().optional().default(100),
|
|
1235
|
+
}))
|
|
1236
|
+
.transform((data) => ({
|
|
1237
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1238
|
+
format: data.format,
|
|
1239
|
+
where: data.where ?? data.filter,
|
|
1240
|
+
limit: data.limit,
|
|
1241
|
+
}))
|
|
1242
|
+
.refine((data) => data.table !== "", {
|
|
1243
|
+
message: "table (or tableName/name alias) is required",
|
|
1244
|
+
});
|
|
1245
|
+
// --- ImportData ---
|
|
1246
|
+
export const ImportDataSchemaBase = z.object({
|
|
1247
|
+
table: z.string().optional().describe("Table name"),
|
|
1248
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1249
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1250
|
+
data: z
|
|
1251
|
+
.array(z.record(z.string(), z.unknown()))
|
|
1252
|
+
.describe("Array of row objects to insert"),
|
|
207
1253
|
});
|
|
208
|
-
export const ImportDataSchema = z
|
|
209
|
-
|
|
210
|
-
|
|
1254
|
+
export const ImportDataSchema = z
|
|
1255
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1256
|
+
table: z.string().optional(),
|
|
1257
|
+
tableName: z.string().optional(),
|
|
1258
|
+
name: z.string().optional(),
|
|
1259
|
+
data: z.array(z.record(z.string(), z.unknown())),
|
|
1260
|
+
}))
|
|
1261
|
+
.transform((data) => ({
|
|
1262
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1263
|
+
data: data.data,
|
|
1264
|
+
}))
|
|
1265
|
+
.refine((data) => data.table !== "", {
|
|
1266
|
+
message: "table (or tableName/name alias) is required",
|
|
211
1267
|
});
|
|
212
1268
|
// =============================================================================
|
|
213
1269
|
// Replication Schemas
|
|
214
1270
|
// =============================================================================
|
|
215
1271
|
export const BinlogEventsSchema = z.object({
|
|
216
|
-
logFile: z.string().optional().describe(
|
|
217
|
-
position: z.number().optional().describe(
|
|
218
|
-
limit: z
|
|
1272
|
+
logFile: z.string().optional().describe("Binlog file name"),
|
|
1273
|
+
position: z.number().optional().describe("Starting position"),
|
|
1274
|
+
limit: z
|
|
1275
|
+
.number()
|
|
1276
|
+
.optional()
|
|
1277
|
+
.default(20)
|
|
1278
|
+
.describe("Maximum events to return (default: 20). Set higher for more events."),
|
|
219
1279
|
});
|
|
220
1280
|
// =============================================================================
|
|
221
1281
|
// Partitioning Schemas
|
|
222
1282
|
// =============================================================================
|
|
223
|
-
|
|
224
|
-
|
|
1283
|
+
// --- PartitionInfo ---
|
|
1284
|
+
export const PartitionInfoSchemaBase = z.object({
|
|
1285
|
+
table: z.string().optional().describe("Table name"),
|
|
1286
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1287
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1288
|
+
});
|
|
1289
|
+
export const PartitionInfoSchema = z
|
|
1290
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1291
|
+
table: z.string().optional(),
|
|
1292
|
+
tableName: z.string().optional(),
|
|
1293
|
+
name: z.string().optional(),
|
|
1294
|
+
}))
|
|
1295
|
+
.transform((data) => ({
|
|
1296
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1297
|
+
}))
|
|
1298
|
+
.refine((data) => data.table !== "", {
|
|
1299
|
+
message: "table (or tableName/name alias) is required",
|
|
1300
|
+
});
|
|
1301
|
+
// --- AddPartition ---
|
|
1302
|
+
export const AddPartitionSchemaBase = z.object({
|
|
1303
|
+
table: z.string().optional().describe("Table name"),
|
|
1304
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1305
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1306
|
+
partitionName: z.string().describe("New partition name"),
|
|
1307
|
+
partitionType: z
|
|
1308
|
+
.enum(["RANGE", "LIST", "HASH", "KEY"])
|
|
1309
|
+
.describe("Partition type"),
|
|
1310
|
+
value: z
|
|
1311
|
+
.string()
|
|
1312
|
+
.describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST, "4" for HASH/KEY partitions count. Do NOT include "LESS THAN" or "VALUES IN" keywords.'),
|
|
1313
|
+
});
|
|
1314
|
+
export const AddPartitionSchema = z
|
|
1315
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1316
|
+
table: z.string().optional(),
|
|
1317
|
+
tableName: z.string().optional(),
|
|
1318
|
+
name: z.string().optional(),
|
|
1319
|
+
partitionName: z.string(),
|
|
1320
|
+
partitionType: z.enum(["RANGE", "LIST", "HASH", "KEY"]),
|
|
1321
|
+
value: z.string(),
|
|
1322
|
+
}))
|
|
1323
|
+
.transform((data) => ({
|
|
1324
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1325
|
+
partitionName: data.partitionName,
|
|
1326
|
+
partitionType: data.partitionType,
|
|
1327
|
+
value: data.value,
|
|
1328
|
+
}))
|
|
1329
|
+
.refine((data) => data.table !== "", {
|
|
1330
|
+
message: "table (or tableName/name alias) is required",
|
|
1331
|
+
});
|
|
1332
|
+
// --- DropPartition ---
|
|
1333
|
+
export const DropPartitionSchemaBase = z.object({
|
|
1334
|
+
table: z.string().optional().describe("Table name"),
|
|
1335
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1336
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1337
|
+
partitionName: z.string().describe("Partition name to drop"),
|
|
225
1338
|
});
|
|
226
|
-
export const
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
1339
|
+
export const DropPartitionSchema = z
|
|
1340
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1341
|
+
table: z.string().optional(),
|
|
1342
|
+
tableName: z.string().optional(),
|
|
1343
|
+
name: z.string().optional(),
|
|
1344
|
+
partitionName: z.string(),
|
|
1345
|
+
}))
|
|
1346
|
+
.transform((data) => ({
|
|
1347
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1348
|
+
partitionName: data.partitionName,
|
|
1349
|
+
}))
|
|
1350
|
+
.refine((data) => data.table !== "", {
|
|
1351
|
+
message: "table (or tableName/name alias) is required",
|
|
231
1352
|
});
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
1353
|
+
// --- ReorganizePartition ---
|
|
1354
|
+
export const ReorganizePartitionSchemaBase = z.object({
|
|
1355
|
+
table: z.string().optional().describe("Table name"),
|
|
1356
|
+
tableName: z.string().optional().describe("Alias for table"),
|
|
1357
|
+
name: z.string().optional().describe("Alias for table"),
|
|
1358
|
+
fromPartitions: z.array(z.string()).describe("Source partition names"),
|
|
1359
|
+
partitionType: z
|
|
1360
|
+
.enum(["RANGE", "LIST", "HASH", "KEY"])
|
|
1361
|
+
.describe("Partition type (RANGE or LIST). HASH/KEY partitions cannot be reorganized."),
|
|
1362
|
+
toPartitions: z
|
|
1363
|
+
.array(z.object({
|
|
1364
|
+
name: z.string().describe("New partition name"),
|
|
1365
|
+
value: z
|
|
1366
|
+
.string()
|
|
1367
|
+
.describe('Partition boundary value only - e.g., "2024" for RANGE, "1,2,3" for LIST. Do NOT include "LESS THAN" or "VALUES IN" keywords.'),
|
|
1368
|
+
}))
|
|
1369
|
+
.describe("New partition definitions"),
|
|
235
1370
|
});
|
|
236
|
-
export const ReorganizePartitionSchema = z
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
1371
|
+
export const ReorganizePartitionSchema = z
|
|
1372
|
+
.preprocess(preprocessTableParams, z.object({
|
|
1373
|
+
table: z.string().optional(),
|
|
1374
|
+
tableName: z.string().optional(),
|
|
1375
|
+
name: z.string().optional(),
|
|
1376
|
+
fromPartitions: z.array(z.string()),
|
|
1377
|
+
partitionType: z.enum(["RANGE", "LIST"]),
|
|
240
1378
|
toPartitions: z.array(z.object({
|
|
241
|
-
name: z.string()
|
|
242
|
-
value: z.string()
|
|
243
|
-
}))
|
|
1379
|
+
name: z.string(),
|
|
1380
|
+
value: z.string(),
|
|
1381
|
+
})),
|
|
1382
|
+
}))
|
|
1383
|
+
.transform((data) => ({
|
|
1384
|
+
table: data.table ?? data.tableName ?? data.name ?? "",
|
|
1385
|
+
fromPartitions: data.fromPartitions,
|
|
1386
|
+
partitionType: data.partitionType,
|
|
1387
|
+
toPartitions: data.toPartitions,
|
|
1388
|
+
}))
|
|
1389
|
+
.refine((data) => data.table !== "", {
|
|
1390
|
+
message: "table (or tableName/name alias) is required",
|
|
244
1391
|
});
|
|
245
1392
|
//# sourceMappingURL=types.js.map
|