@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.
Files changed (802) hide show
  1. package/.env.example +14 -4
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
  4. package/.github/dependabot.yml +15 -0
  5. package/.github/pull_request_template.md +5 -0
  6. package/.github/workflows/codeql.yml +41 -42
  7. package/.github/workflows/docker-publish.yml +247 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +357 -22
  10. package/CODE_MODE.md +245 -0
  11. package/CODE_OF_CONDUCT.md +2 -0
  12. package/DOCKER_README.md +250 -161
  13. package/Dockerfile +2 -2
  14. package/README.md +239 -182
  15. package/SECURITY.md +0 -8
  16. package/VERSION +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  18. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  19. package/dist/__tests__/mocks/adapter.js +51 -35
  20. package/dist/__tests__/mocks/adapter.js.map +1 -1
  21. package/dist/__tests__/mocks/index.d.ts +4 -4
  22. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  23. package/dist/__tests__/mocks/index.js +2 -2
  24. package/dist/__tests__/mocks/index.js.map +1 -1
  25. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  26. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  27. package/dist/__tests__/mocks/mysql.js +14 -14
  28. package/dist/__tests__/mocks/mysql.js.map +1 -1
  29. package/dist/__tests__/setup.d.ts.map +1 -1
  30. package/dist/__tests__/setup.js +7 -7
  31. package/dist/__tests__/setup.js.map +1 -1
  32. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  33. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  34. package/dist/adapters/DatabaseAdapter.js +69 -40
  35. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts +14 -4
  37. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  38. package/dist/adapters/mysql/MySQLAdapter.js +152 -116
  39. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  41. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  42. package/dist/adapters/mysql/SchemaManager.js +76 -56
  43. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  44. package/dist/adapters/mysql/index.d.ts +2 -2
  45. package/dist/adapters/mysql/index.js +2 -2
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  48. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  49. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  52. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  53. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  56. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  58. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  59. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  62. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  63. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  64. package/dist/adapters/mysql/prompts/index.d.ts +10 -3
  65. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  66. package/dist/adapters/mysql/prompts/index.js +106 -63
  67. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  70. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  71. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  74. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  77. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  80. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  81. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  83. package/dist/adapters/mysql/prompts/routerSetup.d.ts.map +1 -1
  84. package/dist/adapters/mysql/prompts/routerSetup.js +8 -3
  85. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  86. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  87. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  88. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  90. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  91. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  92. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  94. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  95. package/dist/adapters/mysql/resources/capabilities.js +19 -16
  96. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  98. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  99. package/dist/adapters/mysql/resources/cluster.js +17 -15
  100. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  102. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  103. package/dist/adapters/mysql/resources/docstore.js +12 -12
  104. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  105. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  106. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  107. package/dist/adapters/mysql/resources/events.js +12 -12
  108. package/dist/adapters/mysql/resources/events.js.map +1 -1
  109. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  110. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  111. package/dist/adapters/mysql/resources/health.js +36 -32
  112. package/dist/adapters/mysql/resources/health.js.map +1 -1
  113. package/dist/adapters/mysql/resources/index.d.ts +11 -3
  114. package/dist/adapters/mysql/resources/index.d.ts.map +1 -1
  115. package/dist/adapters/mysql/resources/index.js +28 -20
  116. package/dist/adapters/mysql/resources/index.js.map +1 -1
  117. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  118. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  119. package/dist/adapters/mysql/resources/indexes.js +12 -12
  120. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  121. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  122. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  123. package/dist/adapters/mysql/resources/innodb.js +37 -36
  124. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  125. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  126. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  127. package/dist/adapters/mysql/resources/locks.js +14 -14
  128. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  129. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  130. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  131. package/dist/adapters/mysql/resources/performance.js +30 -29
  132. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  133. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  134. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  135. package/dist/adapters/mysql/resources/pool.js +9 -9
  136. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  137. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  138. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  139. package/dist/adapters/mysql/resources/processlist.js +9 -9
  140. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  141. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  142. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  143. package/dist/adapters/mysql/resources/replication.js +42 -35
  144. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  145. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  146. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  147. package/dist/adapters/mysql/resources/schema.js +8 -8
  148. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  149. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  150. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  151. package/dist/adapters/mysql/resources/spatial.js +9 -9
  152. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  153. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  154. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  155. package/dist/adapters/mysql/resources/status.js +10 -10
  156. package/dist/adapters/mysql/resources/status.js.map +1 -1
  157. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  158. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  159. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  160. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  161. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  162. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  163. package/dist/adapters/mysql/resources/tables.js +8 -8
  164. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  165. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  166. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  167. package/dist/adapters/mysql/resources/variables.js +10 -10
  168. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  169. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  170. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  171. package/dist/adapters/mysql/tools/admin/backup.js +193 -101
  172. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  175. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  176. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  177. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  178. package/dist/adapters/mysql/tools/admin/maintenance.js +97 -66
  179. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  180. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  181. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  182. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  183. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  184. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  185. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  186. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  187. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  190. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  192. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  193. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +225 -97
  194. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  195. package/dist/adapters/mysql/tools/codemode/index.d.ts +38 -0
  196. package/dist/adapters/mysql/tools/codemode/index.d.ts.map +1 -0
  197. package/dist/adapters/mysql/tools/codemode/index.js +203 -0
  198. package/dist/adapters/mysql/tools/codemode/index.js.map +1 -0
  199. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  200. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  201. package/dist/adapters/mysql/tools/core.js +234 -114
  202. package/dist/adapters/mysql/tools/core.js.map +1 -1
  203. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  204. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  205. package/dist/adapters/mysql/tools/docstore.js +252 -117
  206. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  207. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  208. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  209. package/dist/adapters/mysql/tools/events.js +236 -113
  210. package/dist/adapters/mysql/tools/events.js.map +1 -1
  211. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  212. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  213. package/dist/adapters/mysql/tools/index.js +19 -19
  214. package/dist/adapters/mysql/tools/index.js.map +1 -1
  215. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  216. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  217. package/dist/adapters/mysql/tools/json/core.js +225 -131
  218. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  219. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  220. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  221. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  222. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  223. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  225. package/dist/adapters/mysql/tools/json/helpers.js +141 -57
  226. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  227. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  228. package/dist/adapters/mysql/tools/json/index.js +6 -6
  229. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  230. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/partitioning.d.ts.map +1 -1
  232. package/dist/adapters/mysql/tools/partitioning.js +180 -64
  233. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  234. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  235. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  236. package/dist/adapters/mysql/tools/performance/analysis.js +184 -101
  237. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  238. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  239. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  240. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  241. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  242. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/performance/optimization.js +229 -77
  244. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  245. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  248. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  249. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/replication.js +117 -66
  252. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  253. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/roles.js +276 -84
  256. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  257. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/router.js +174 -109
  260. package/dist/adapters/mysql/tools/router.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  264. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  268. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  272. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  276. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  280. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  281. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  284. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  285. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  288. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  292. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  295. package/dist/adapters/mysql/tools/security/data-protection.js +193 -80
  296. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  297. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  298. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  299. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  300. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  301. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  302. package/dist/adapters/mysql/tools/security/index.js +4 -4
  303. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  304. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  305. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  306. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  307. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  308. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  309. package/dist/adapters/mysql/tools/shell/common.js +61 -37
  310. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  311. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  312. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  313. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  314. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  315. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  316. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  317. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  321. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  322. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  323. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/shell/restore.js +128 -43
  325. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  326. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  327. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  328. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  329. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  330. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  331. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  332. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  333. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  334. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  335. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  336. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/operations.js +175 -106
  340. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  341. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  344. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  345. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/spatial/setup.js +122 -34
  348. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  351. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  352. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  353. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  354. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  355. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  356. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  357. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  358. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  359. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  360. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  361. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  362. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  363. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  364. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  365. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  366. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  367. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  368. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  370. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  371. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  372. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/sysschema/resources.js +58 -33
  374. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  376. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/fulltext.js +214 -55
  378. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  379. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  380. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  381. package/dist/adapters/mysql/tools/text/index.js +6 -5
  382. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  383. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  384. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  385. package/dist/adapters/mysql/tools/text/processing.js +175 -122
  386. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  387. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  388. package/dist/adapters/mysql/tools/transactions.d.ts.map +1 -1
  389. package/dist/adapters/mysql/tools/transactions.js +162 -85
  390. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  391. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  392. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  393. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  394. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  395. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  396. package/dist/adapters/mysql/types/router-types.js +17 -17
  397. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  398. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  399. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  400. package/dist/adapters/mysql/types/shell-types.js +255 -82
  401. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  402. package/dist/adapters/mysql/types.d.ts +976 -80
  403. package/dist/adapters/mysql/types.d.ts.map +1 -1
  404. package/dist/adapters/mysql/types.js +1317 -170
  405. package/dist/adapters/mysql/types.js.map +1 -1
  406. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  407. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  408. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  409. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  410. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  411. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  412. package/dist/auth/OAuthResourceServer.js +4 -4
  413. package/dist/auth/OAuthResourceServer.js.map +1 -1
  414. package/dist/auth/TokenValidator.d.ts +1 -1
  415. package/dist/auth/TokenValidator.d.ts.map +1 -1
  416. package/dist/auth/TokenValidator.js +30 -20
  417. package/dist/auth/TokenValidator.js.map +1 -1
  418. package/dist/auth/errors.d.ts.map +1 -1
  419. package/dist/auth/errors.js +24 -24
  420. package/dist/auth/errors.js.map +1 -1
  421. package/dist/auth/index.d.ts +7 -7
  422. package/dist/auth/index.d.ts.map +1 -1
  423. package/dist/auth/index.js +6 -6
  424. package/dist/auth/index.js.map +1 -1
  425. package/dist/auth/middleware.d.ts +2 -2
  426. package/dist/auth/middleware.d.ts.map +1 -1
  427. package/dist/auth/middleware.js +28 -24
  428. package/dist/auth/middleware.js.map +1 -1
  429. package/dist/auth/scopes.d.ts +2 -2
  430. package/dist/auth/scopes.d.ts.map +1 -1
  431. package/dist/auth/scopes.js +23 -16
  432. package/dist/auth/scopes.js.map +1 -1
  433. package/dist/auth/types.d.ts +2 -2
  434. package/dist/auth/types.d.ts.map +1 -1
  435. package/dist/cli/args.d.ts +1 -1
  436. package/dist/cli/args.d.ts.map +1 -1
  437. package/dist/cli/args.js +82 -68
  438. package/dist/cli/args.js.map +1 -1
  439. package/dist/cli.d.ts +1 -1
  440. package/dist/cli.d.ts.map +1 -1
  441. package/dist/cli.js +44 -34
  442. package/dist/cli.js.map +1 -1
  443. package/dist/codemode/api.d.ts +69 -0
  444. package/dist/codemode/api.d.ts.map +1 -0
  445. package/dist/codemode/api.js +1035 -0
  446. package/dist/codemode/api.js.map +1 -0
  447. package/dist/codemode/index.d.ts +13 -0
  448. package/dist/codemode/index.d.ts.map +1 -0
  449. package/dist/codemode/index.js +17 -0
  450. package/dist/codemode/index.js.map +1 -0
  451. package/dist/codemode/sandbox-factory.d.ts +72 -0
  452. package/dist/codemode/sandbox-factory.d.ts.map +1 -0
  453. package/dist/codemode/sandbox-factory.js +88 -0
  454. package/dist/codemode/sandbox-factory.js.map +1 -0
  455. package/dist/codemode/sandbox.d.ts +96 -0
  456. package/dist/codemode/sandbox.d.ts.map +1 -0
  457. package/dist/codemode/sandbox.js +345 -0
  458. package/dist/codemode/sandbox.js.map +1 -0
  459. package/dist/codemode/security.d.ts +44 -0
  460. package/dist/codemode/security.d.ts.map +1 -0
  461. package/dist/codemode/security.js +149 -0
  462. package/dist/codemode/security.js.map +1 -0
  463. package/dist/codemode/types.d.ts +137 -0
  464. package/dist/codemode/types.d.ts.map +1 -0
  465. package/dist/codemode/types.js +46 -0
  466. package/dist/codemode/types.js.map +1 -0
  467. package/dist/codemode/worker-sandbox.d.ts +82 -0
  468. package/dist/codemode/worker-sandbox.d.ts.map +1 -0
  469. package/dist/codemode/worker-sandbox.js +244 -0
  470. package/dist/codemode/worker-sandbox.js.map +1 -0
  471. package/dist/codemode/worker-script.d.ts +8 -0
  472. package/dist/codemode/worker-script.d.ts.map +1 -0
  473. package/dist/codemode/worker-script.js +113 -0
  474. package/dist/codemode/worker-script.js.map +1 -0
  475. package/dist/constants/ServerInstructions.d.ts +2 -2
  476. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  477. package/dist/constants/ServerInstructions.js +252 -36
  478. package/dist/constants/ServerInstructions.js.map +1 -1
  479. package/dist/filtering/ToolConstants.d.ts +12 -12
  480. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  481. package/dist/filtering/ToolConstants.js +253 -214
  482. package/dist/filtering/ToolConstants.js.map +1 -1
  483. package/dist/filtering/ToolFilter.d.ts +2 -2
  484. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  485. package/dist/filtering/ToolFilter.js +47 -36
  486. package/dist/filtering/ToolFilter.js.map +1 -1
  487. package/dist/index.d.ts +9 -9
  488. package/dist/index.d.ts.map +1 -1
  489. package/dist/index.js +7 -7
  490. package/dist/index.js.map +1 -1
  491. package/dist/logging/McpLogging.d.ts +2 -2
  492. package/dist/logging/McpLogging.d.ts.map +1 -1
  493. package/dist/logging/McpLogging.js +16 -13
  494. package/dist/logging/McpLogging.js.map +1 -1
  495. package/dist/logging/index.d.ts +1 -1
  496. package/dist/logging/index.js +1 -1
  497. package/dist/pool/ConnectionPool.d.ts +3 -3
  498. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  499. package/dist/pool/ConnectionPool.js +30 -26
  500. package/dist/pool/ConnectionPool.js.map +1 -1
  501. package/dist/progress/ProgressReporter.d.ts +1 -1
  502. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  503. package/dist/progress/ProgressReporter.js +5 -5
  504. package/dist/progress/ProgressReporter.js.map +1 -1
  505. package/dist/progress/index.d.ts +1 -1
  506. package/dist/progress/index.d.ts.map +1 -1
  507. package/dist/progress/index.js +1 -1
  508. package/dist/progress/index.js.map +1 -1
  509. package/dist/server/McpServer.d.ts +3 -3
  510. package/dist/server/McpServer.d.ts.map +1 -1
  511. package/dist/server/McpServer.js +58 -53
  512. package/dist/server/McpServer.js.map +1 -1
  513. package/dist/transports/http.d.ts +3 -3
  514. package/dist/transports/http.d.ts.map +1 -1
  515. package/dist/transports/http.js +36 -33
  516. package/dist/transports/http.js.map +1 -1
  517. package/dist/transports/index.d.ts +1 -1
  518. package/dist/transports/index.d.ts.map +1 -1
  519. package/dist/transports/index.js +1 -1
  520. package/dist/transports/index.js.map +1 -1
  521. package/dist/types/index.d.ts +6 -6
  522. package/dist/types/index.d.ts.map +1 -1
  523. package/dist/types/index.js +1 -1
  524. package/dist/types/index.js.map +1 -1
  525. package/dist/types/modules/database.d.ts +1 -1
  526. package/dist/types/modules/database.d.ts.map +1 -1
  527. package/dist/types/modules/errors.d.ts.map +1 -1
  528. package/dist/types/modules/errors.js +15 -15
  529. package/dist/types/modules/errors.js.map +1 -1
  530. package/dist/types/modules/oauth.d.ts +1 -1
  531. package/dist/types/modules/oauth.d.ts.map +1 -1
  532. package/dist/types/modules/query.d.ts +8 -8
  533. package/dist/types/modules/query.d.ts.map +1 -1
  534. package/dist/types/modules/server.d.ts +5 -3
  535. package/dist/types/modules/server.d.ts.map +1 -1
  536. package/dist/types/modules/tools.d.ts +6 -6
  537. package/dist/types/modules/tools.d.ts.map +1 -1
  538. package/dist/utils/logger.d.ts +2 -2
  539. package/dist/utils/logger.d.ts.map +1 -1
  540. package/dist/utils/logger.js +58 -55
  541. package/dist/utils/logger.js.map +1 -1
  542. package/dist/utils/promptGenerator.d.ts +1 -1
  543. package/dist/utils/promptGenerator.d.ts.map +1 -1
  544. package/dist/utils/promptGenerator.js +24 -16
  545. package/dist/utils/promptGenerator.js.map +1 -1
  546. package/dist/utils/validators.d.ts +21 -2
  547. package/dist/utils/validators.d.ts.map +1 -1
  548. package/dist/utils/validators.js +101 -13
  549. package/dist/utils/validators.js.map +1 -1
  550. package/eslint.config.js +117 -81
  551. package/package.json +66 -64
  552. package/releases/release-notes.md +32 -26
  553. package/releases/v2.0.0-release-notes.md +99 -51
  554. package/releases/v2.1.0-release-notes.md +14 -5
  555. package/releases/v2.2.0-release-notes.md +239 -0
  556. package/releases/v2.3.0-release-notes.md +191 -0
  557. package/server.json +1 -1
  558. package/src/__tests__/cli.test.ts +302 -247
  559. package/src/__tests__/index.test.ts +21 -21
  560. package/src/__tests__/mocks/adapter.ts +204 -163
  561. package/src/__tests__/mocks/index.ts +30 -23
  562. package/src/__tests__/mocks/mysql.ts +94 -84
  563. package/src/__tests__/perf.test.ts +207 -203
  564. package/src/__tests__/performance.test.ts +173 -164
  565. package/src/__tests__/setup.ts +26 -21
  566. package/src/adapters/DatabaseAdapter.ts +386 -340
  567. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  568. package/src/adapters/mysql/MySQLAdapter.ts +560 -486
  569. package/src/adapters/mysql/SchemaManager.ts +251 -208
  570. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  571. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  572. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  573. package/src/adapters/mysql/index.ts +2 -2
  574. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  575. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  576. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  577. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  578. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  579. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  580. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  581. package/src/adapters/mysql/prompts/index.ts +202 -145
  582. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  583. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  584. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  585. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  586. package/src/adapters/mysql/prompts/routerSetup.ts +15 -10
  587. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  588. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  589. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +118 -47
  590. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  591. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  592. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  593. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  594. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  595. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  596. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  597. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  598. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  599. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  600. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  601. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  602. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  603. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  604. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  605. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  606. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  607. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  608. package/src/adapters/mysql/resources/capabilities.ts +61 -42
  609. package/src/adapters/mysql/resources/cluster.ts +58 -49
  610. package/src/adapters/mysql/resources/docstore.ts +46 -41
  611. package/src/adapters/mysql/resources/events.ts +37 -31
  612. package/src/adapters/mysql/resources/health.ts +98 -74
  613. package/src/adapters/mysql/resources/index.ts +55 -47
  614. package/src/adapters/mysql/resources/indexes.ts +66 -51
  615. package/src/adapters/mysql/resources/innodb.ts +98 -81
  616. package/src/adapters/mysql/resources/locks.ts +43 -40
  617. package/src/adapters/mysql/resources/performance.ts +80 -67
  618. package/src/adapters/mysql/resources/pool.ts +23 -20
  619. package/src/adapters/mysql/resources/processlist.ts +23 -18
  620. package/src/adapters/mysql/resources/replication.ts +124 -105
  621. package/src/adapters/mysql/resources/schema.ts +23 -18
  622. package/src/adapters/mysql/resources/spatial.ts +31 -26
  623. package/src/adapters/mysql/resources/status.ts +27 -22
  624. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  625. package/src/adapters/mysql/resources/tables.ts +23 -18
  626. package/src/adapters/mysql/resources/variables.ts +27 -22
  627. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  628. package/src/adapters/mysql/tools/__tests__/core.test.ts +701 -382
  629. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  630. package/src/adapters/mysql/tools/__tests__/events.test.ts +806 -486
  631. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  632. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  633. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +203 -128
  634. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  635. package/src/adapters/mysql/tools/__tests__/replication.test.ts +796 -390
  636. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  637. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  638. package/src/adapters/mysql/tools/__tests__/security.test.ts +746 -421
  639. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  640. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  641. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +443 -298
  642. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +535 -150
  643. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  644. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +452 -263
  645. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  646. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  647. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  648. package/src/adapters/mysql/tools/admin/backup.ts +339 -215
  649. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  650. package/src/adapters/mysql/tools/admin/maintenance.ts +180 -130
  651. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  652. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  653. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +399 -95
  654. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  655. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  656. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +413 -251
  657. package/src/adapters/mysql/tools/codemode/index.ts +249 -0
  658. package/src/adapters/mysql/tools/core.ts +425 -285
  659. package/src/adapters/mysql/tools/docstore.ts +478 -276
  660. package/src/adapters/mysql/tools/events.ts +441 -285
  661. package/src/adapters/mysql/tools/index.ts +31 -20
  662. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  663. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  664. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +195 -74
  665. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  666. package/src/adapters/mysql/tools/json/core.ts +368 -263
  667. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  668. package/src/adapters/mysql/tools/json/helpers.ts +205 -113
  669. package/src/adapters/mysql/tools/json/index.ts +46 -46
  670. package/src/adapters/mysql/tools/partitioning.ts +289 -140
  671. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +664 -249
  672. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +436 -179
  673. package/src/adapters/mysql/tools/performance/analysis.ts +319 -215
  674. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  675. package/src/adapters/mysql/tools/performance/optimization.ts +438 -183
  676. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  677. package/src/adapters/mysql/tools/replication.ts +233 -180
  678. package/src/adapters/mysql/tools/roles.ts +429 -171
  679. package/src/adapters/mysql/tools/router.ts +410 -292
  680. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  681. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  682. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  683. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  684. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  685. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  686. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  687. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  688. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  689. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  690. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  691. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  692. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  693. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  694. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  695. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  696. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  697. package/src/adapters/mysql/tools/security/data-protection.ts +342 -198
  698. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  699. package/src/adapters/mysql/tools/security/index.ts +26 -26
  700. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  701. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +183 -130
  702. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  703. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  704. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +260 -174
  705. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  706. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  707. package/src/adapters/mysql/tools/shell/common.ts +203 -153
  708. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  709. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  710. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  711. package/src/adapters/mysql/tools/shell/restore.ts +236 -121
  712. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  713. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  714. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +284 -148
  715. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  716. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  717. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  718. package/src/adapters/mysql/tools/spatial/operations.ts +254 -171
  719. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  720. package/src/adapters/mysql/tools/spatial/setup.ts +180 -73
  721. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  722. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  723. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  724. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  725. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  726. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  727. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  728. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +243 -104
  729. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  730. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  731. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  732. package/src/adapters/mysql/tools/sysschema/resources.ts +140 -99
  733. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  734. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  735. package/src/adapters/mysql/tools/text/fulltext.ts +327 -123
  736. package/src/adapters/mysql/tools/text/index.ts +32 -30
  737. package/src/adapters/mysql/tools/text/processing.ts +281 -212
  738. package/src/adapters/mysql/tools/transactions.ts +288 -197
  739. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  740. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  741. package/src/adapters/mysql/types/router-types.ts +36 -36
  742. package/src/adapters/mysql/types/shell-types.ts +280 -94
  743. package/src/adapters/mysql/types.ts +1475 -164
  744. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  745. package/src/auth/OAuthResourceServer.ts +67 -62
  746. package/src/auth/TokenValidator.ts +136 -119
  747. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  748. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  749. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  750. package/src/auth/__tests__/errors.test.ts +180 -175
  751. package/src/auth/__tests__/middleware.test.ts +281 -247
  752. package/src/auth/__tests__/scopes.test.ts +136 -134
  753. package/src/auth/errors.ts +56 -56
  754. package/src/auth/index.ts +23 -17
  755. package/src/auth/middleware.ts +161 -139
  756. package/src/auth/scopes.ts +134 -107
  757. package/src/auth/types.ts +155 -155
  758. package/src/cli/__tests__/args.test.ts +241 -216
  759. package/src/cli/__tests__/main.test.ts +191 -158
  760. package/src/cli/args.ts +285 -258
  761. package/src/cli.ts +150 -127
  762. package/src/codemode/api.ts +1224 -0
  763. package/src/codemode/index.ts +51 -0
  764. package/src/codemode/sandbox-factory.ts +146 -0
  765. package/src/codemode/sandbox.ts +450 -0
  766. package/src/codemode/security.ts +188 -0
  767. package/src/codemode/types.ts +194 -0
  768. package/src/codemode/worker-sandbox.ts +326 -0
  769. package/src/codemode/worker-script.ts +144 -0
  770. package/src/constants/ServerInstructions.ts +295 -70
  771. package/src/filtering/ToolConstants.ts +311 -272
  772. package/src/filtering/ToolFilter.ts +254 -220
  773. package/src/filtering/__tests__/ToolFilter.test.ts +469 -396
  774. package/src/index.ts +62 -57
  775. package/src/logging/McpLogging.ts +128 -119
  776. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  777. package/src/logging/index.ts +2 -2
  778. package/src/pool/ConnectionPool.ts +260 -246
  779. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  780. package/src/progress/ProgressReporter.ts +123 -123
  781. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  782. package/src/progress/index.ts +6 -2
  783. package/src/server/McpServer.ts +305 -285
  784. package/src/server/__tests__/McpServer.test.ts +333 -291
  785. package/src/transports/__tests__/http.test.ts +658 -527
  786. package/src/transports/http.ts +237 -203
  787. package/src/transports/index.ts +6 -2
  788. package/src/types/__tests__/types.test.ts +197 -193
  789. package/src/types/index.ts +49 -37
  790. package/src/types/modules/database.ts +65 -63
  791. package/src/types/modules/errors.ts +41 -37
  792. package/src/types/modules/oauth.ts +46 -46
  793. package/src/types/modules/query.ts +75 -75
  794. package/src/types/modules/server.ts +21 -18
  795. package/src/types/modules/tools.ts +182 -178
  796. package/src/utils/__tests__/logger.test.ts +424 -414
  797. package/src/utils/__tests__/validators.test.ts +250 -165
  798. package/src/utils/logger.ts +344 -330
  799. package/src/utils/promptGenerator.ts +58 -47
  800. package/src/utils/validators.ts +217 -91
  801. package/tsconfig.json +41 -50
  802. package/vitest.config.ts +23 -23
@@ -1,544 +1,618 @@
1
1
  /**
2
2
  * mysql-mcp - MySQL Adapter
3
- *
3
+ *
4
4
  * Main MySQL database adapter with connection pooling,
5
5
  * query execution, and tool registration.
6
6
  */
7
7
 
8
- import type { PoolConnection, FieldPacket } from 'mysql2/promise';
9
- import { DatabaseAdapter } from '../DatabaseAdapter.js';
10
- import { ConnectionPool } from '../../pool/ConnectionPool.js';
8
+ import type { PoolConnection, FieldPacket } from "mysql2/promise";
9
+ import { DatabaseAdapter } from "../DatabaseAdapter.js";
10
+ import { ConnectionPool } from "../../pool/ConnectionPool.js";
11
11
  import type {
12
- DatabaseConfig,
13
- QueryResult,
14
- SchemaInfo,
15
- TableInfo,
16
- IndexInfo,
17
- HealthStatus,
18
- AdapterCapabilities,
19
- ToolDefinition,
20
- ResourceDefinition,
21
- PromptDefinition,
22
- ToolGroup
23
- } from '../../types/index.js';
24
- import { ConnectionError, QueryError, TransactionError } from '../../types/index.js';
25
- import { logger } from '../../utils/logger.js';
12
+ DatabaseConfig,
13
+ QueryResult,
14
+ SchemaInfo,
15
+ TableInfo,
16
+ IndexInfo,
17
+ HealthStatus,
18
+ AdapterCapabilities,
19
+ ToolDefinition,
20
+ ResourceDefinition,
21
+ PromptDefinition,
22
+ ToolGroup,
23
+ } from "../../types/index.js";
24
+ import {
25
+ ConnectionError,
26
+ QueryError,
27
+ TransactionError,
28
+ } from "../../types/index.js";
29
+ import { logger } from "../../utils/logger.js";
26
30
 
27
31
  // Import tool modules
28
- import { getCoreTools } from './tools/core.js';
29
- import { getTransactionTools } from './tools/transactions.js';
30
- import { getJsonTools, getJsonHelperTools, getJsonEnhancedTools } from './tools/json/index.js';
31
- import { getTextTools, getFulltextTools } from './tools/text/index.js';
32
- import { getPerformanceTools, getOptimizationTools } from './tools/performance/index.js';
33
- import { getAdminTools, getMonitoringTools, getBackupTools } from './tools/admin/index.js';
34
- import { getReplicationTools } from './tools/replication.js';
35
- import { getPartitioningTools } from './tools/partitioning.js';
36
- import { getRouterTools } from './tools/router.js';
37
- import { getProxySQLTools } from './tools/proxysql.js';
38
- import { getShellTools } from './tools/shell/index.js';
32
+ import { getCoreTools } from "./tools/core.js";
33
+ import { getTransactionTools } from "./tools/transactions.js";
34
+ import {
35
+ getJsonTools,
36
+ getJsonHelperTools,
37
+ getJsonEnhancedTools,
38
+ } from "./tools/json/index.js";
39
+ import { getTextTools, getFulltextTools } from "./tools/text/index.js";
40
+ import {
41
+ getPerformanceTools,
42
+ getOptimizationTools,
43
+ } from "./tools/performance/index.js";
44
+ import {
45
+ getAdminTools,
46
+ getMonitoringTools,
47
+ getBackupTools,
48
+ } from "./tools/admin/index.js";
49
+ import { getReplicationTools } from "./tools/replication.js";
50
+ import { getPartitioningTools } from "./tools/partitioning.js";
51
+ import { getRouterTools } from "./tools/router.js";
52
+ import { getProxySQLTools } from "./tools/proxysql.js";
53
+ import { getShellTools } from "./tools/shell/index.js";
39
54
  // New tool modules (9 new groups)
40
- import { getSchemaTools } from './tools/schema/index.js';
41
- import { getEventTools } from './tools/events.js';
42
- import { getSysSchemaTools } from './tools/sysschema/index.js';
43
- import { getStatsTools } from './tools/stats/index.js';
44
- import { getSpatialTools } from './tools/spatial/index.js';
45
- import { getSecurityTools } from './tools/security/index.js';
46
- import { getClusterTools } from './tools/cluster/index.js';
47
- import { getRoleTools } from './tools/roles.js';
48
- import { getDocStoreTools } from './tools/docstore.js';
49
- import { getMySQLResources } from './resources/index.js';
50
- import { getMySQLPrompts } from './prompts/index.js';
51
- import { SchemaManager } from './SchemaManager.js';
55
+ import { getSchemaTools } from "./tools/schema/index.js";
56
+ import { getEventTools } from "./tools/events.js";
57
+ import { getSysSchemaTools } from "./tools/sysschema/index.js";
58
+ import { getStatsTools } from "./tools/stats/index.js";
59
+ import { getSpatialTools } from "./tools/spatial/index.js";
60
+ import { getSecurityTools } from "./tools/security/index.js";
61
+ import { getClusterTools } from "./tools/cluster/index.js";
62
+ import { getRoleTools } from "./tools/roles.js";
63
+ import { getDocStoreTools } from "./tools/docstore.js";
64
+ import { getCodeModeTools } from "./tools/codemode/index.js";
65
+ import { getMySQLResources } from "./resources/index.js";
66
+ import { getMySQLPrompts } from "./prompts/index.js";
67
+ import { SchemaManager } from "./SchemaManager.js";
52
68
 
53
69
  /**
54
70
  * MySQL Database Adapter
55
71
  */
56
72
  export class MySQLAdapter extends DatabaseAdapter {
57
- readonly type = 'mysql' as const;
58
- readonly name = 'MySQL Adapter';
59
- readonly version = '0.1.0';
60
-
61
- private pool: ConnectionPool | null = null;
62
- private activeTransactions = new Map<string, PoolConnection>();
63
- private cachedToolDefinitions: ToolDefinition[] | null = null;
64
- private schemaManager = new SchemaManager(this);
65
-
66
- // =========================================================================
67
- // Connection Lifecycle
68
- // =========================================================================
69
-
70
- async connect(config: DatabaseConfig): Promise<void> {
71
- if (this.connected) {
72
- logger.warn('Already connected');
73
- return;
74
- }
75
-
76
- // Build pool configuration
77
- const poolConfig = {
78
- host: config.host ?? 'localhost',
79
- port: config.port ?? 3306,
80
- user: config.username ?? 'root',
81
- password: config.password ?? '',
82
- database: config.database ?? '',
83
- pool: config.pool,
84
- ssl: config.options?.ssl as boolean | undefined,
85
- charset: config.options?.charset ?? 'utf8mb4',
86
- timezone: config.options?.timezone ?? 'local',
87
- connectTimeout: config.options?.connectTimeout ?? 10000
88
- };
89
-
90
- this.pool = new ConnectionPool(poolConfig);
91
-
92
- try {
93
- await this.pool.initialize();
94
- this.connected = true;
95
- logger.info('MySQL adapter connected', {
96
- host: poolConfig.host,
97
- port: poolConfig.port,
98
- database: poolConfig.database
99
- });
100
- } catch (error) {
101
- this.pool = null;
102
- throw new ConnectionError(`Failed to connect: ${String(error)}`);
103
- }
104
- }
105
-
106
- async disconnect(): Promise<void> {
107
- if (!this.connected || !this.pool) {
108
- return;
109
- }
110
-
111
- // Close any active transactions
112
- for (const [id, conn] of this.activeTransactions) {
113
- try {
114
- await conn.rollback();
115
- logger.warn(`Rolled back orphaned transaction: ${id}`);
116
- } catch (error) {
117
- logger.warn(`Failed to rollback orphaned transaction ${id}: ${String(error)}`);
118
- } finally {
119
- try {
120
- conn.release();
121
- } catch {
122
- // Ignore release errors
123
- }
124
- }
125
- }
126
- this.activeTransactions.clear();
127
-
128
- await this.pool.shutdown();
129
- this.pool = null;
130
- this.connected = false;
131
- logger.info('MySQL adapter disconnected');
132
- }
133
-
134
- async getHealth(): Promise<HealthStatus> {
135
- if (!this.pool) {
136
- return {
137
- connected: false,
138
- error: 'Not connected'
139
- };
140
- }
141
-
142
- return this.pool.checkHealth();
73
+ readonly type = "mysql" as const;
74
+ readonly name = "MySQL Adapter";
75
+ readonly version = "0.1.0";
76
+
77
+ private pool: ConnectionPool | null = null;
78
+ private activeTransactions = new Map<string, PoolConnection>();
79
+ private cachedToolDefinitions: ToolDefinition[] | null = null;
80
+ private cachedResourceDefinitions: ResourceDefinition[] | null = null;
81
+ private cachedPromptDefinitions: PromptDefinition[] | null = null;
82
+ private schemaManager = new SchemaManager(this);
83
+
84
+ /**
85
+ * MySQL type number to name mapping (hoisted for performance)
86
+ */
87
+ private static readonly TYPE_NAMES: Record<number, string> = {
88
+ 0: "DECIMAL",
89
+ 1: "TINYINT",
90
+ 2: "SMALLINT",
91
+ 3: "INT",
92
+ 4: "FLOAT",
93
+ 5: "DOUBLE",
94
+ 6: "NULL",
95
+ 7: "TIMESTAMP",
96
+ 8: "BIGINT",
97
+ 9: "MEDIUMINT",
98
+ 10: "DATE",
99
+ 11: "TIME",
100
+ 12: "DATETIME",
101
+ 13: "YEAR",
102
+ 14: "NEWDATE",
103
+ 15: "VARCHAR",
104
+ 16: "BIT",
105
+ 245: "JSON",
106
+ 246: "NEWDECIMAL",
107
+ 247: "ENUM",
108
+ 248: "SET",
109
+ 249: "TINYBLOB",
110
+ 250: "MEDIUMBLOB",
111
+ 251: "LONGBLOB",
112
+ 252: "BLOB",
113
+ 253: "VARCHAR",
114
+ 254: "CHAR",
115
+ 255: "GEOMETRY",
116
+ };
117
+
118
+ // =========================================================================
119
+ // Connection Lifecycle
120
+ // =========================================================================
121
+
122
+ async connect(config: DatabaseConfig): Promise<void> {
123
+ if (this.connected) {
124
+ logger.warn("Already connected");
125
+ return;
143
126
  }
144
127
 
145
- // =========================================================================
146
- // Query Execution
147
- // =========================================================================
148
-
149
- async executeReadQuery(sql: string, params?: unknown[], transactionId?: string): Promise<QueryResult> {
150
- this.validateQuery(sql, true);
151
- return this.executeQuery(sql, params, transactionId);
128
+ // Build pool configuration
129
+ const poolConfig = {
130
+ host: config.host ?? "localhost",
131
+ port: config.port ?? 3306,
132
+ user: config.username ?? "root",
133
+ password: config.password ?? "",
134
+ database: config.database ?? "",
135
+ pool: config.pool,
136
+ ssl: config.options?.ssl as boolean | undefined,
137
+ charset: config.options?.charset ?? "utf8mb4",
138
+ timezone: config.options?.timezone ?? "local",
139
+ connectTimeout: config.options?.connectTimeout ?? 10000,
140
+ };
141
+
142
+ this.pool = new ConnectionPool(poolConfig);
143
+
144
+ try {
145
+ await this.pool.initialize();
146
+ this.connected = true;
147
+ logger.info("MySQL adapter connected", {
148
+ host: poolConfig.host,
149
+ port: poolConfig.port,
150
+ database: poolConfig.database,
151
+ });
152
+ } catch (error) {
153
+ this.pool = null;
154
+ throw new ConnectionError(`Failed to connect: ${String(error)}`);
152
155
  }
156
+ }
153
157
 
154
- async executeWriteQuery(sql: string, params?: unknown[], transactionId?: string): Promise<QueryResult> {
155
- this.validateQuery(sql, false);
156
- return this.executeQuery(sql, params, transactionId);
158
+ async disconnect(): Promise<void> {
159
+ if (!this.connected || !this.pool) {
160
+ return;
157
161
  }
158
162
 
159
- async executeQuery(sql: string, params?: unknown[], transactionId?: string): Promise<QueryResult> {
160
- if (!this.pool) {
161
- throw new ConnectionError('Not connected to database');
162
- }
163
-
164
- if (transactionId) {
165
- const conn = this.getTransactionConnection(transactionId);
166
- if (!conn) {
167
- throw new TransactionError(`Invalid transaction ID: ${transactionId}`);
168
- }
169
- return this.executeOnConnection(conn, sql, params);
170
- }
171
-
172
- const startTime = Date.now();
173
-
163
+ // Close any active transactions
164
+ for (const [id, conn] of this.activeTransactions) {
165
+ try {
166
+ await conn.rollback();
167
+ logger.warn(`Rolled back orphaned transaction: ${id}`);
168
+ } catch (error) {
169
+ logger.warn(
170
+ `Failed to rollback orphaned transaction ${id}: ${String(error)}`,
171
+ );
172
+ } finally {
174
173
  try {
175
- const [results, fields] = await this.pool.execute(sql, params);
176
- return this.processExecutionResult(results, fields, startTime);
177
- } catch (error) {
178
- if (this.isUnsupportedPreparedStatementError(error)) {
179
- // Fallback to text protocol for statements not supported in prepared mode
180
- try {
181
- const [results, fields] = await this.pool.query(sql, params);
182
- return this.processExecutionResult(results, fields, startTime);
183
- } catch (fallbackError) {
184
- const err = fallbackError as Error;
185
- throw new QueryError(`Query fallback failed: ${err.message}`, { sql });
186
- }
187
- }
188
- const err = error as Error;
189
- throw new QueryError(`Query failed: ${err.message}`, { sql });
174
+ conn.release();
175
+ } catch {
176
+ // Ignore release errors
190
177
  }
178
+ }
191
179
  }
192
-
193
- /**
194
- * Execute a query on a specific connection (for transactions)
195
- */
196
- async executeOnConnection(
197
- connection: PoolConnection,
198
- sql: string,
199
- params?: unknown[]
200
- ): Promise<QueryResult> {
201
- const startTime = Date.now();
202
-
203
- try {
204
- const [results, fields] = await connection.execute(sql, params);
205
- return this.processExecutionResult(results, fields, startTime);
206
- } catch (error) {
207
- if (this.isUnsupportedPreparedStatementError(error)) {
208
- // Fallback to text protocol
209
- try {
210
- const [results, fields] = await connection.query(sql, params);
211
- return this.processExecutionResult(results, fields, startTime);
212
- } catch (fallbackError) {
213
- const err = fallbackError as Error;
214
- throw new QueryError(`Query fallback failed: ${err.message}`, { sql });
215
- }
216
- }
217
- const err = error as Error;
218
- throw new QueryError(`Query failed: ${err.message}`, { sql });
219
- }
180
+ this.activeTransactions.clear();
181
+
182
+ await this.pool.shutdown();
183
+ this.pool = null;
184
+ this.connected = false;
185
+ logger.info("MySQL adapter disconnected");
186
+ }
187
+
188
+ async getHealth(): Promise<HealthStatus> {
189
+ if (!this.pool) {
190
+ return {
191
+ connected: false,
192
+ error: "Not connected",
193
+ };
220
194
  }
221
195
 
222
- /**
223
- * Execute raw SQL using query() instead of execute()
224
- * Use this for commands not supported in prepared statement protocol:
225
- * - CHECK TABLE, SAVEPOINT, RELEASE SAVEPOINT, ROLLBACK TO SAVEPOINT
226
- * - SHOW commands with LIKE patterns
227
- */
228
- async rawQuery(sql: string): Promise<QueryResult> {
229
- if (!this.pool) {
230
- throw new ConnectionError('Not connected');
231
- }
232
-
233
- const startTime = Date.now();
234
-
235
- try {
236
- // Use query() which doesn't use prepared statements
237
- // Unlike execute(), query() is required for certain MySQL commands
238
- const [results, fields] = await this.pool.query(sql);
239
- return this.processExecutionResult(results, fields, startTime);
240
- } catch (error) {
241
- const err = error as Error;
242
- throw new QueryError(`Raw query failed: ${err.message}`, { sql });
243
- }
196
+ return this.pool.checkHealth();
197
+ }
198
+
199
+ // =========================================================================
200
+ // Query Execution
201
+ // =========================================================================
202
+
203
+ async executeReadQuery(
204
+ sql: string,
205
+ params?: unknown[],
206
+ transactionId?: string,
207
+ ): Promise<QueryResult> {
208
+ this.validateQuery(sql, true);
209
+ return this.executeQuery(sql, params, transactionId);
210
+ }
211
+
212
+ async executeWriteQuery(
213
+ sql: string,
214
+ params?: unknown[],
215
+ transactionId?: string,
216
+ ): Promise<QueryResult> {
217
+ this.validateQuery(sql, false);
218
+ return this.executeQuery(sql, params, transactionId);
219
+ }
220
+
221
+ async executeQuery(
222
+ sql: string,
223
+ params?: unknown[],
224
+ transactionId?: string,
225
+ ): Promise<QueryResult> {
226
+ if (!this.pool) {
227
+ throw new ConnectionError("Not connected to database");
244
228
  }
245
229
 
246
- // =========================================================================
247
- // Transaction Support
248
- // =========================================================================
249
-
250
- /**
251
- * Begin a transaction
252
- */
253
- async beginTransaction(isolationLevel?: string): Promise<string> {
254
- if (!this.pool) {
255
- throw new ConnectionError('Not connected');
256
- }
257
-
258
- const connection = await this.pool.getConnection();
259
- const transactionId = crypto.randomUUID();
260
-
261
- try {
262
- if (isolationLevel) {
263
- await connection.execute(`SET TRANSACTION ISOLATION LEVEL ${isolationLevel}`);
264
- }
265
- await connection.beginTransaction();
266
- this.activeTransactions.set(transactionId, connection);
267
- return transactionId;
268
- } catch (error) {
269
- connection.release();
270
- throw new TransactionError(`Failed to begin transaction: ${String(error)}`);
271
- }
230
+ if (transactionId) {
231
+ const conn = this.getTransactionConnection(transactionId);
232
+ if (!conn) {
233
+ throw new TransactionError(`Invalid transaction ID: ${transactionId}`);
234
+ }
235
+ return this.executeOnConnection(conn, sql, params);
272
236
  }
273
237
 
274
- /**
275
- * Commit a transaction
276
- */
277
- async commitTransaction(transactionId: string): Promise<void> {
278
- const connection = this.activeTransactions.get(transactionId);
279
- if (!connection) {
280
- throw new TransactionError(`Transaction not found: ${transactionId}`);
281
- }
238
+ const startTime = Date.now();
282
239
 
240
+ try {
241
+ const [results, fields] = await this.pool.execute(sql, params);
242
+ return this.processExecutionResult(results, fields, startTime);
243
+ } catch (error) {
244
+ if (this.isUnsupportedPreparedStatementError(error)) {
245
+ // Fallback to text protocol for statements not supported in prepared mode
283
246
  try {
284
- await connection.commit();
285
- } finally {
286
- connection.release();
287
- this.activeTransactions.delete(transactionId);
247
+ const [results, fields] = await this.pool.query(sql, params);
248
+ return this.processExecutionResult(results, fields, startTime);
249
+ } catch (fallbackError) {
250
+ const err = fallbackError as Error;
251
+ throw new QueryError(`Query fallback failed: ${err.message}`, {
252
+ sql,
253
+ });
288
254
  }
255
+ }
256
+ const err = error as Error;
257
+ throw new QueryError(`Query failed: ${err.message}`, { sql });
289
258
  }
290
-
291
- /**
292
- * Rollback a transaction
293
- */
294
- async rollbackTransaction(transactionId: string): Promise<void> {
295
- const connection = this.activeTransactions.get(transactionId);
296
- if (!connection) {
297
- throw new TransactionError(`Transaction not found: ${transactionId}`);
298
- }
299
-
259
+ }
260
+
261
+ /**
262
+ * Execute a query on a specific connection (for transactions)
263
+ */
264
+ async executeOnConnection(
265
+ connection: PoolConnection,
266
+ sql: string,
267
+ params?: unknown[],
268
+ ): Promise<QueryResult> {
269
+ const startTime = Date.now();
270
+
271
+ try {
272
+ const [results, fields] = await connection.execute(sql, params);
273
+ return this.processExecutionResult(results, fields, startTime);
274
+ } catch (error) {
275
+ if (this.isUnsupportedPreparedStatementError(error)) {
276
+ // Fallback to text protocol
300
277
  try {
301
- await connection.rollback();
302
- } finally {
303
- connection.release();
304
- this.activeTransactions.delete(transactionId);
278
+ const [results, fields] = await connection.query(sql, params);
279
+ return this.processExecutionResult(results, fields, startTime);
280
+ } catch (fallbackError) {
281
+ const err = fallbackError as Error;
282
+ throw new QueryError(`Query fallback failed: ${err.message}`, {
283
+ sql,
284
+ });
305
285
  }
286
+ }
287
+ const err = error as Error;
288
+ throw new QueryError(`Query failed: ${err.message}`, { sql });
306
289
  }
307
-
308
- /**
309
- * Get connection for a transaction
310
- */
311
- getTransactionConnection(transactionId: string): PoolConnection | undefined {
312
- return this.activeTransactions.get(transactionId);
313
- }
314
-
315
- // =========================================================================
316
- // Schema Operations
317
- // =========================================================================
318
-
319
- async getSchema(): Promise<SchemaInfo> {
320
- return this.schemaManager.getSchema();
290
+ }
291
+
292
+ /**
293
+ * Execute raw SQL using query() instead of execute()
294
+ * Use this for commands not supported in prepared statement protocol:
295
+ * - CHECK TABLE, SAVEPOINT, RELEASE SAVEPOINT, ROLLBACK TO SAVEPOINT
296
+ * - SHOW commands with LIKE patterns
297
+ */
298
+ async rawQuery(sql: string): Promise<QueryResult> {
299
+ if (!this.pool) {
300
+ throw new ConnectionError("Not connected");
321
301
  }
322
302
 
323
- async listTables(databaseName?: string): Promise<TableInfo[]> {
324
- return this.schemaManager.listTables(databaseName);
325
- }
303
+ const startTime = Date.now();
326
304
 
327
- async describeTable(tableName: string): Promise<TableInfo> {
328
- return this.schemaManager.describeTable(tableName);
305
+ try {
306
+ // Use query() which doesn't use prepared statements
307
+ // Unlike execute(), query() is required for certain MySQL commands
308
+ const [results, fields] = await this.pool.query(sql);
309
+ return this.processExecutionResult(results, fields, startTime);
310
+ } catch (error) {
311
+ const err = error as Error;
312
+ throw new QueryError(`Raw query failed: ${err.message}`, { sql });
329
313
  }
330
-
331
- async listSchemas(): Promise<string[]> {
332
- return this.schemaManager.listSchemas();
314
+ }
315
+
316
+ // =========================================================================
317
+ // Transaction Support
318
+ // =========================================================================
319
+
320
+ /**
321
+ * Begin a transaction
322
+ */
323
+ async beginTransaction(isolationLevel?: string): Promise<string> {
324
+ if (!this.pool) {
325
+ throw new ConnectionError("Not connected");
333
326
  }
334
327
 
335
- /**
336
- * Get indexes for a table
337
- */
338
- async getTableIndexes(tableName: string): Promise<IndexInfo[]> {
339
- return this.schemaManager.getTableIndexes(tableName);
328
+ // Validate isolation level against allowlist before interpolation
329
+ const VALID_ISOLATION_LEVELS = [
330
+ "READ UNCOMMITTED",
331
+ "READ COMMITTED",
332
+ "REPEATABLE READ",
333
+ "SERIALIZABLE",
334
+ ];
335
+ if (
336
+ isolationLevel &&
337
+ !VALID_ISOLATION_LEVELS.includes(isolationLevel.toUpperCase())
338
+ ) {
339
+ throw new TransactionError(
340
+ `Invalid isolation level: ${isolationLevel}. Must be one of: ${VALID_ISOLATION_LEVELS.join(", ")}`,
341
+ );
340
342
  }
341
343
 
342
- // =========================================================================
343
- // Capabilities
344
- // =========================================================================
345
-
346
- getCapabilities(): AdapterCapabilities {
347
- return {
348
- json: true,
349
- fullTextSearch: true,
350
- vector: false, // MySQL doesn't have native vector support
351
- geospatial: true,
352
- transactions: true,
353
- preparedStatements: true,
354
- connectionPooling: true,
355
- partitioning: true,
356
- replication: true
357
- };
358
- }
344
+ const connection = await this.pool.getConnection();
345
+ const transactionId = crypto.randomUUID();
359
346
 
360
- getSupportedToolGroups(): ToolGroup[] {
361
- return [
362
- 'core',
363
- 'json',
364
- 'text',
365
- 'fulltext',
366
- 'performance',
367
- 'optimization',
368
- 'admin',
369
- 'monitoring',
370
- 'backup',
371
- 'replication',
372
- 'partitioning',
373
- 'transactions',
374
- 'router',
375
- 'proxysql',
376
- 'shell',
377
- // New groups (9)
378
- 'schema',
379
- 'events',
380
- 'sysschema',
381
- 'stats',
382
- 'spatial',
383
- 'security',
384
- 'cluster',
385
- 'roles',
386
- 'docstore'
387
- ];
347
+ try {
348
+ if (isolationLevel) {
349
+ await connection.execute(
350
+ `SET TRANSACTION ISOLATION LEVEL ${isolationLevel}`,
351
+ );
352
+ }
353
+ await connection.beginTransaction();
354
+ this.activeTransactions.set(transactionId, connection);
355
+ return transactionId;
356
+ } catch (error) {
357
+ connection.release();
358
+ throw new TransactionError(
359
+ `Failed to begin transaction: ${String(error)}`,
360
+ );
388
361
  }
389
-
390
- // =========================================================================
391
- // Tool/Resource/Prompt Registration
392
- // =========================================================================
393
-
394
- getToolDefinitions(): ToolDefinition[] {
395
- if (this.cachedToolDefinitions) {
396
- return this.cachedToolDefinitions;
397
- }
398
-
399
- this.cachedToolDefinitions = [
400
- ...getCoreTools(this),
401
- ...getTransactionTools(this),
402
- ...getJsonTools(this),
403
- ...getJsonHelperTools(this),
404
- ...getJsonEnhancedTools(this),
405
- ...getTextTools(this),
406
- ...getFulltextTools(this),
407
- ...getPerformanceTools(this),
408
- ...getOptimizationTools(this),
409
- ...getAdminTools(this),
410
- ...getMonitoringTools(this),
411
- ...getBackupTools(this),
412
- ...getReplicationTools(this),
413
- ...getPartitioningTools(this),
414
- ...getRouterTools(this),
415
- ...getProxySQLTools(this),
416
- ...getShellTools(this),
417
- // New tool groups (9 groups, 80 tools)
418
- ...getSchemaTools(this),
419
- ...getEventTools(this),
420
- ...getSysSchemaTools(this),
421
- ...getStatsTools(this),
422
- ...getSpatialTools(this),
423
- ...getSecurityTools(this),
424
- ...getClusterTools(this),
425
- ...getRoleTools(this),
426
- ...getDocStoreTools(this)
427
- ];
428
-
429
- return this.cachedToolDefinitions;
362
+ }
363
+
364
+ /**
365
+ * Commit a transaction
366
+ */
367
+ async commitTransaction(transactionId: string): Promise<void> {
368
+ const connection = this.activeTransactions.get(transactionId);
369
+ if (!connection) {
370
+ throw new TransactionError(`Transaction not found: ${transactionId}`);
430
371
  }
431
372
 
432
- getResourceDefinitions(): ResourceDefinition[] {
433
- return getMySQLResources(this);
373
+ try {
374
+ await connection.commit();
375
+ } finally {
376
+ connection.release();
377
+ this.activeTransactions.delete(transactionId);
434
378
  }
435
-
436
- getPromptDefinitions(): PromptDefinition[] {
437
- return getMySQLPrompts(this);
379
+ }
380
+
381
+ /**
382
+ * Rollback a transaction
383
+ */
384
+ async rollbackTransaction(transactionId: string): Promise<void> {
385
+ const connection = this.activeTransactions.get(transactionId);
386
+ if (!connection) {
387
+ throw new TransactionError(`Transaction not found: ${transactionId}`);
438
388
  }
439
389
 
440
- // =========================================================================
441
- // Helpers
442
- // =========================================================================
443
-
444
- /**
445
- * Get the connection pool (for monitoring tools)
446
- */
447
- getPool(): ConnectionPool | null {
448
- return this.pool;
390
+ try {
391
+ await connection.rollback();
392
+ } finally {
393
+ connection.release();
394
+ this.activeTransactions.delete(transactionId);
449
395
  }
450
-
451
- /**
452
- * Check if error is due to unsupported prepared statement
453
- */
454
- private isUnsupportedPreparedStatementError(error: unknown): boolean {
455
- const err = error as { code?: string; message?: string };
456
- const code = err?.code;
457
- const message = typeof err?.message === 'string' ? err.message : '';
458
-
459
- // Message is e.g.: "Execute failed: This command is not supported..."
460
- // No debug throw needed now
461
-
462
- return (
463
- code === 'ER_UNSUPPORTED_PS' ||
464
- message.toLowerCase().includes('not supported') ||
465
- message.includes('ER_UNSUPPORTED_PS')
466
- );
396
+ }
397
+
398
+ /**
399
+ * Get connection for a transaction
400
+ */
401
+ getTransactionConnection(transactionId: string): PoolConnection | undefined {
402
+ return this.activeTransactions.get(transactionId);
403
+ }
404
+
405
+ // =========================================================================
406
+ // Schema Operations
407
+ // =========================================================================
408
+
409
+ async getSchema(): Promise<SchemaInfo> {
410
+ return this.schemaManager.getSchema();
411
+ }
412
+
413
+ async listTables(databaseName?: string): Promise<TableInfo[]> {
414
+ return this.schemaManager.listTables(databaseName);
415
+ }
416
+
417
+ async describeTable(tableName: string): Promise<TableInfo> {
418
+ return this.schemaManager.describeTable(tableName);
419
+ }
420
+
421
+ async listSchemas(): Promise<string[]> {
422
+ return this.schemaManager.listSchemas();
423
+ }
424
+
425
+ /**
426
+ * Get indexes for a table
427
+ */
428
+ async getTableIndexes(tableName: string): Promise<IndexInfo[]> {
429
+ return this.schemaManager.getTableIndexes(tableName);
430
+ }
431
+
432
+ // =========================================================================
433
+ // Capabilities
434
+ // =========================================================================
435
+
436
+ getCapabilities(): AdapterCapabilities {
437
+ return {
438
+ json: true,
439
+ fullTextSearch: true,
440
+ vector: false, // MySQL doesn't have native vector support
441
+ geospatial: true,
442
+ transactions: true,
443
+ preparedStatements: true,
444
+ connectionPooling: true,
445
+ partitioning: true,
446
+ replication: true,
447
+ };
448
+ }
449
+
450
+ getSupportedToolGroups(): ToolGroup[] {
451
+ return [
452
+ "core",
453
+ "json",
454
+ "text",
455
+ "fulltext",
456
+ "performance",
457
+ "optimization",
458
+ "admin",
459
+ "monitoring",
460
+ "backup",
461
+ "replication",
462
+ "partitioning",
463
+ "transactions",
464
+ "router",
465
+ "proxysql",
466
+ "shell",
467
+ // New groups (9)
468
+ "schema",
469
+ "events",
470
+ "sysschema",
471
+ "stats",
472
+ "spatial",
473
+ "security",
474
+ "cluster",
475
+ "roles",
476
+ "docstore",
477
+ "codemode",
478
+ ];
479
+ }
480
+
481
+ // =========================================================================
482
+ // Tool/Resource/Prompt Registration
483
+ // =========================================================================
484
+
485
+ getToolDefinitions(): ToolDefinition[] {
486
+ if (this.cachedToolDefinitions) {
487
+ return this.cachedToolDefinitions;
467
488
  }
468
489
 
469
- /**
470
- * Process execution results into QueryResult
471
- */
472
- /**
473
- * Process execution results into QueryResult
474
- */
475
- private processExecutionResult(
476
- results: unknown,
477
- fields: FieldPacket[] | undefined,
478
- startTime: number
479
- ): QueryResult {
480
- const executionTimeMs = Date.now() - startTime;
481
-
482
- if (Array.isArray(results)) {
483
- return {
484
- rows: results as Record<string, unknown>[],
485
- executionTimeMs,
486
- columns: Array.isArray(fields) ? fields.map(f => ({
487
- name: f.name,
488
- type: this.getTypeName(f.type ?? 0)
489
- })) : undefined
490
- };
491
- }
492
-
493
- const resultInfo = results as {
494
- affectedRows?: number;
495
- insertId?: number | bigint;
496
- warningStatus?: number;
497
- };
498
-
499
- return {
500
- rowsAffected: resultInfo.affectedRows,
501
- lastInsertId: resultInfo.insertId,
502
- warningCount: resultInfo.warningStatus,
503
- executionTimeMs
504
- };
490
+ this.cachedToolDefinitions = [
491
+ ...getCoreTools(this),
492
+ ...getTransactionTools(this),
493
+ ...getJsonTools(this),
494
+ ...getJsonHelperTools(this),
495
+ ...getJsonEnhancedTools(this),
496
+ ...getTextTools(this),
497
+ ...getFulltextTools(this),
498
+ ...getPerformanceTools(this),
499
+ ...getOptimizationTools(this),
500
+ ...getAdminTools(this),
501
+ ...getMonitoringTools(this),
502
+ ...getBackupTools(this),
503
+ ...getReplicationTools(this),
504
+ ...getPartitioningTools(this),
505
+ ...getRouterTools(this),
506
+ ...getProxySQLTools(this),
507
+ ...getShellTools(this),
508
+ // New tool groups (9 groups, 80 tools)
509
+ ...getSchemaTools(this),
510
+ ...getEventTools(this),
511
+ ...getSysSchemaTools(this),
512
+ ...getStatsTools(this),
513
+ ...getSpatialTools(this),
514
+ ...getSecurityTools(this),
515
+ ...getClusterTools(this),
516
+ ...getRoleTools(this),
517
+ ...getDocStoreTools(this),
518
+ ...getCodeModeTools(this),
519
+ ];
520
+
521
+ return this.cachedToolDefinitions;
522
+ }
523
+
524
+ getResourceDefinitions(): ResourceDefinition[] {
525
+ if (this.cachedResourceDefinitions) return this.cachedResourceDefinitions;
526
+ this.cachedResourceDefinitions = getMySQLResources(this);
527
+ return this.cachedResourceDefinitions;
528
+ }
529
+
530
+ getPromptDefinitions(): PromptDefinition[] {
531
+ if (this.cachedPromptDefinitions) return this.cachedPromptDefinitions;
532
+ this.cachedPromptDefinitions = getMySQLPrompts(this);
533
+ return this.cachedPromptDefinitions;
534
+ }
535
+
536
+ // =========================================================================
537
+ // Helpers
538
+ // =========================================================================
539
+
540
+ /**
541
+ * Get the connection pool (for monitoring tools)
542
+ */
543
+ getPool(): ConnectionPool | null {
544
+ return this.pool;
545
+ }
546
+
547
+ /**
548
+ * Get IDs of all active transactions (for Code Mode cleanup)
549
+ */
550
+ getActiveTransactionIds(): string[] {
551
+ return Array.from(this.activeTransactions.keys());
552
+ }
553
+
554
+ /**
555
+ * Check if error is due to unsupported prepared statement
556
+ */
557
+ private isUnsupportedPreparedStatementError(error: unknown): boolean {
558
+ const err = error as { code?: string; message?: string };
559
+ const code = err?.code;
560
+ const message = typeof err?.message === "string" ? err.message : "";
561
+
562
+ // Message is e.g.: "Execute failed: This command is not supported..."
563
+ // No debug throw needed now
564
+
565
+ return (
566
+ code === "ER_UNSUPPORTED_PS" ||
567
+ message.toLowerCase().includes("not supported") ||
568
+ message.includes("ER_UNSUPPORTED_PS")
569
+ );
570
+ }
571
+
572
+ /**
573
+ * Process execution results into QueryResult
574
+ */
575
+ /**
576
+ * Process execution results into QueryResult
577
+ */
578
+ private processExecutionResult(
579
+ results: unknown,
580
+ fields: FieldPacket[] | undefined,
581
+ startTime: number,
582
+ ): QueryResult {
583
+ const executionTimeMs = Date.now() - startTime;
584
+
585
+ if (Array.isArray(results)) {
586
+ return {
587
+ rows: results as Record<string, unknown>[],
588
+ executionTimeMs,
589
+ columns: Array.isArray(fields)
590
+ ? fields.map((f) => ({
591
+ name: f.name,
592
+ type: this.getTypeName(f.type ?? 0),
593
+ }))
594
+ : undefined,
595
+ };
505
596
  }
506
597
 
507
- /**
508
- * Convert MySQL type number to name
509
- */
510
- private getTypeName(typeNum: number): string {
511
- // MySQL type constants
512
- const types: Record<number, string> = {
513
- 0: 'DECIMAL',
514
- 1: 'TINYINT',
515
- 2: 'SMALLINT',
516
- 3: 'INT',
517
- 4: 'FLOAT',
518
- 5: 'DOUBLE',
519
- 6: 'NULL',
520
- 7: 'TIMESTAMP',
521
- 8: 'BIGINT',
522
- 9: 'MEDIUMINT',
523
- 10: 'DATE',
524
- 11: 'TIME',
525
- 12: 'DATETIME',
526
- 13: 'YEAR',
527
- 14: 'NEWDATE',
528
- 15: 'VARCHAR',
529
- 16: 'BIT',
530
- 245: 'JSON',
531
- 246: 'NEWDECIMAL',
532
- 247: 'ENUM',
533
- 248: 'SET',
534
- 249: 'TINYBLOB',
535
- 250: 'MEDIUMBLOB',
536
- 251: 'LONGBLOB',
537
- 252: 'BLOB',
538
- 253: 'VARCHAR',
539
- 254: 'CHAR',
540
- 255: 'GEOMETRY'
541
- };
542
- return types[typeNum] ?? `UNKNOWN(${typeNum})`;
543
- }
598
+ const resultInfo = results as {
599
+ affectedRows?: number;
600
+ insertId?: number | bigint;
601
+ warningStatus?: number;
602
+ };
603
+
604
+ return {
605
+ rowsAffected: resultInfo.affectedRows,
606
+ lastInsertId: resultInfo.insertId,
607
+ warningCount: resultInfo.warningStatus,
608
+ executionTimeMs,
609
+ };
610
+ }
611
+
612
+ /**
613
+ * Convert MySQL type number to name
614
+ */
615
+ private getTypeName(typeNum: number): string {
616
+ return MySQLAdapter.TYPE_NAMES[typeNum] ?? `UNKNOWN(${typeNum})`;
617
+ }
544
618
  }