@neverinfamous/postgres-mcp 2.0.0 → 2.2.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 (518) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +119 -46
  3. package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
  4. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
  5. package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
  6. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
  7. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
  8. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
  9. package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
  10. package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
  11. package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
  12. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
  13. package/dist/__tests__/benchmarks/schema-parsing.bench.js +5 -5
  14. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
  15. package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
  16. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +2 -1
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/adapters/DatabaseAdapter.d.ts +6 -5
  21. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  22. package/dist/adapters/DatabaseAdapter.js +11 -20
  23. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  24. package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -26
  25. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  26. package/dist/adapters/postgresql/PostgresAdapter.js +31 -526
  27. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  28. package/dist/adapters/postgresql/prompts/index.js +1 -1
  29. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  30. package/dist/adapters/postgresql/resources/index.d.ts +1 -1
  31. package/dist/adapters/postgresql/resources/index.js +3 -3
  32. package/dist/adapters/postgresql/resources/index.js.map +1 -1
  33. package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
  34. package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
  35. package/dist/adapters/postgresql/schema-operations.js +561 -0
  36. package/dist/adapters/postgresql/schema-operations.js.map +1 -0
  37. package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
  38. package/dist/adapters/postgresql/schemas/admin.js +4 -4
  39. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  40. package/dist/adapters/postgresql/schemas/backup.d.ts +2 -2
  41. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/schemas/backup.js +1 -3
  43. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  44. package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
  45. package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
  46. package/dist/adapters/postgresql/schemas/core/index.js +6 -0
  47. package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
  48. package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +16 -171
  49. package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
  50. package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
  51. package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
  52. package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
  53. package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
  54. package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
  55. package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
  56. package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
  57. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.js +38 -10
  59. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  60. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
  61. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
  62. package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
  63. package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
  64. package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
  65. package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
  66. package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
  67. package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
  68. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
  69. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
  70. package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
  71. package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
  72. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
  73. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
  74. package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
  75. package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
  76. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
  77. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
  78. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
  79. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
  80. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
  81. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
  82. package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
  83. package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
  84. package/dist/adapters/postgresql/schemas/index.d.ts +6 -6
  85. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  86. package/dist/adapters/postgresql/schemas/index.js +8 -8
  87. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  88. package/dist/adapters/postgresql/schemas/introspection.d.ts +19 -42
  89. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/schemas/introspection.js +72 -27
  91. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
  92. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
  93. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
  94. package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
  95. package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
  96. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
  97. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
  98. package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
  99. package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
  100. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
  101. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
  102. package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
  103. package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
  104. package/dist/adapters/postgresql/schemas/monitoring.d.ts +4 -4
  105. package/dist/adapters/postgresql/schemas/monitoring.js +2 -2
  106. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  107. package/dist/adapters/postgresql/schemas/partitioning.d.ts +14 -14
  108. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/schemas/partitioning.js +64 -46
  110. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  111. package/dist/adapters/postgresql/schemas/partman.d.ts +16 -14
  112. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  113. package/dist/adapters/postgresql/schemas/partman.js +9 -9
  114. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  115. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
  116. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
  117. package/dist/adapters/postgresql/schemas/postgis/advanced.js +495 -0
  118. package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
  119. package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
  120. package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
  121. package/dist/adapters/postgresql/schemas/{postgis.js → postgis/basic.js} +1 -486
  122. package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
  123. package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
  124. package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
  125. package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
  126. package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
  127. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -25
  128. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  129. package/dist/adapters/postgresql/schemas/schema-mgmt.js +57 -19
  130. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  131. package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
  132. package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
  133. package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
  134. package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
  135. package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
  136. package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
  137. package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
  138. package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
  139. package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
  140. package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
  141. package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
  142. package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
  143. package/dist/adapters/postgresql/schemas/text-search.d.ts +18 -18
  144. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/schemas/text-search.js +12 -27
  146. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  147. package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
  148. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  149. package/dist/adapters/postgresql/schemas/vector.js +9 -15
  150. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  151. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  152. package/dist/adapters/postgresql/tools/backup/dump.js +95 -76
  153. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  154. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  155. package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
  156. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  157. package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
  158. package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
  159. package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +50 -232
  160. package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
  161. package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
  162. package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
  163. package/dist/adapters/postgresql/tools/citext/index.js +23 -0
  164. package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
  165. package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
  166. package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
  167. package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
  168. package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
  169. package/dist/adapters/postgresql/tools/codemode/index.js +1 -1
  170. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
  172. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  173. package/dist/adapters/postgresql/tools/core/convenience.js +100 -210
  174. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  175. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
  176. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
  177. package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
  178. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
  179. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  180. package/dist/adapters/postgresql/tools/core/health.js +124 -114
  181. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  182. package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
  183. package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/core/index.js +3 -2
  185. package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/core/indexes.js +151 -127
  188. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/core/objects.js +186 -161
  191. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/core/query.js +37 -25
  194. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
  196. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  197. package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
  198. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  199. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  200. package/dist/adapters/postgresql/tools/core/tables.js +156 -129
  201. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  202. package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
  203. package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
  204. package/dist/adapters/postgresql/tools/core/utility.js +174 -0
  205. package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
  206. package/dist/adapters/postgresql/tools/cron.js +90 -43
  207. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  208. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
  209. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
  210. package/dist/adapters/postgresql/tools/introspection/analysis.js +605 -0
  211. package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
  212. package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
  213. package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
  214. package/dist/adapters/postgresql/tools/introspection/graph.js +621 -0
  215. package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
  216. package/dist/adapters/postgresql/tools/introspection/index.d.ts +21 -0
  217. package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
  218. package/dist/adapters/postgresql/tools/introspection/index.js +31 -0
  219. package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
  220. package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
  221. package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
  222. package/dist/adapters/postgresql/tools/introspection/migration.js +575 -0
  223. package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
  224. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
  225. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
  226. package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
  227. package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
  228. package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
  229. package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
  230. package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
  231. package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
  232. package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
  233. package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
  234. package/dist/adapters/postgresql/tools/jsonb/{basic.js → read.js} +41 -482
  235. package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
  236. package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
  237. package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
  238. package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +26 -357
  239. package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
  240. package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
  241. package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
  242. package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
  243. package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
  244. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  245. package/dist/adapters/postgresql/tools/kcache.js +116 -51
  246. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  247. package/dist/adapters/postgresql/tools/ltree.js +346 -260
  248. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  249. package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
  250. package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
  251. package/dist/adapters/postgresql/tools/migration/index.js +23 -0
  252. package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
  253. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
  254. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
  255. package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +24 -359
  256. package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
  257. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
  258. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
  259. package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
  260. package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
  261. package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
  262. package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
  263. package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
  264. package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
  265. package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
  266. package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
  267. package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
  268. package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
  269. package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
  270. package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
  271. package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
  272. package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
  273. package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
  274. package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
  275. package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
  276. package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
  277. package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
  278. package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
  279. package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
  280. package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
  281. package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
  282. package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
  283. package/dist/adapters/postgresql/tools/partman/index.js +4 -2
  284. package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
  285. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
  286. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
  287. package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
  288. package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
  289. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  290. package/dist/adapters/postgresql/tools/partman/management.js +438 -383
  291. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  292. package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
  293. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  294. package/dist/adapters/postgresql/tools/partman/operations.js +171 -652
  295. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  296. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  297. package/dist/adapters/postgresql/tools/performance/analysis.js +69 -42
  298. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  299. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
  300. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
  301. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
  302. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
  303. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
  304. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
  305. package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
  306. package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
  307. package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
  308. package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
  309. package/dist/adapters/postgresql/tools/performance/index.js +7 -1
  310. package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
  311. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  312. package/dist/adapters/postgresql/tools/performance/monitoring.js +80 -55
  313. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  314. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  315. package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
  316. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  317. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  318. package/dist/adapters/postgresql/tools/performance/stats.js +439 -318
  319. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  320. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  321. package/dist/adapters/postgresql/tools/pgcrypto.js +45 -77
  322. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  323. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  324. package/dist/adapters/postgresql/tools/postgis/basic.js +121 -93
  325. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  326. package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
  327. package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
  328. package/dist/adapters/postgresql/tools/schema/index.js +32 -0
  329. package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
  330. package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
  331. package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
  332. package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
  333. package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
  334. package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
  335. package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
  336. package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +64 -386
  337. package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
  338. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  339. package/dist/adapters/postgresql/tools/stats/advanced.js +1 -218
  340. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  341. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
  342. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
  343. package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
  344. package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
  345. package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
  346. package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
  347. package/dist/adapters/postgresql/tools/text/index.js +33 -0
  348. package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
  349. package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
  350. package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
  351. package/dist/adapters/postgresql/tools/text/matching.js +565 -0
  352. package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
  353. package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
  354. package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
  355. package/dist/adapters/postgresql/tools/text/search.js +653 -0
  356. package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
  357. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  358. package/dist/adapters/postgresql/tools/transactions.js +11 -27
  359. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  360. package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
  361. package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
  362. package/dist/adapters/postgresql/tools/vector/data.js +540 -0
  363. package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
  364. package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
  365. package/dist/adapters/postgresql/tools/vector/index.js +6 -2
  366. package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
  367. package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
  368. package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
  369. package/dist/adapters/postgresql/tools/vector/management.js +425 -0
  370. package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
  371. package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
  372. package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
  373. package/dist/adapters/postgresql/tools/vector/query.js +767 -0
  374. package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
  375. package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
  376. package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
  377. package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
  378. package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
  379. package/dist/auth/scopes.d.ts.map +1 -1
  380. package/dist/auth/scopes.js +3 -1
  381. package/dist/auth/scopes.js.map +1 -1
  382. package/dist/cli/args.d.ts +3 -2
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js +4 -3
  385. package/dist/cli/args.js.map +1 -1
  386. package/dist/cli.js +16 -4
  387. package/dist/cli.js.map +1 -1
  388. package/dist/codemode/api/aliases.d.ts +14 -0
  389. package/dist/codemode/api/aliases.d.ts.map +1 -0
  390. package/dist/codemode/api/aliases.js +503 -0
  391. package/dist/codemode/api/aliases.js.map +1 -0
  392. package/dist/codemode/api/group-api.d.ts +23 -0
  393. package/dist/codemode/api/group-api.d.ts.map +1 -0
  394. package/dist/codemode/api/group-api.js +179 -0
  395. package/dist/codemode/api/group-api.js.map +1 -0
  396. package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
  397. package/dist/codemode/api/index.d.ts.map +1 -0
  398. package/dist/codemode/api/index.js +195 -0
  399. package/dist/codemode/api/index.js.map +1 -0
  400. package/dist/codemode/api/maps.d.ts +47 -0
  401. package/dist/codemode/api/maps.d.ts.map +1 -0
  402. package/dist/codemode/api/maps.js +529 -0
  403. package/dist/codemode/api/maps.js.map +1 -0
  404. package/dist/codemode/api/normalize.d.ts +13 -0
  405. package/dist/codemode/api/normalize.d.ts.map +1 -0
  406. package/dist/codemode/api/normalize.js +120 -0
  407. package/dist/codemode/api/normalize.js.map +1 -0
  408. package/dist/codemode/index.d.ts +1 -1
  409. package/dist/codemode/index.d.ts.map +1 -1
  410. package/dist/codemode/index.js +1 -1
  411. package/dist/codemode/index.js.map +1 -1
  412. package/dist/codemode/sandbox.d.ts.map +1 -1
  413. package/dist/codemode/sandbox.js +8 -25
  414. package/dist/codemode/sandbox.js.map +1 -1
  415. package/dist/filtering/ToolConstants.d.ts +11 -11
  416. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  417. package/dist/filtering/ToolConstants.js +28 -15
  418. package/dist/filtering/ToolConstants.js.map +1 -1
  419. package/dist/filtering/ToolFilter.d.ts +0 -32
  420. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  421. package/dist/filtering/ToolFilter.js +0 -43
  422. package/dist/filtering/ToolFilter.js.map +1 -1
  423. package/dist/server/McpServer.d.ts +1 -1
  424. package/dist/server/McpServer.d.ts.map +1 -1
  425. package/dist/server/McpServer.js +1 -2
  426. package/dist/server/McpServer.js.map +1 -1
  427. package/dist/transports/http.d.ts +55 -10
  428. package/dist/transports/http.d.ts.map +1 -1
  429. package/dist/transports/http.js +301 -50
  430. package/dist/transports/http.js.map +1 -1
  431. package/dist/types/filtering.d.ts +1 -1
  432. package/dist/types/filtering.d.ts.map +1 -1
  433. package/dist/types/index.d.ts +2 -2
  434. package/dist/types/index.d.ts.map +1 -1
  435. package/dist/types/index.js.map +1 -1
  436. package/dist/types/mcp.d.ts +0 -21
  437. package/dist/types/mcp.d.ts.map +1 -1
  438. package/dist/types/schema.d.ts +0 -79
  439. package/dist/types/schema.d.ts.map +1 -1
  440. package/dist/utils/fts-config.d.ts +0 -6
  441. package/dist/utils/fts-config.d.ts.map +1 -1
  442. package/dist/utils/fts-config.js +1 -1
  443. package/dist/utils/fts-config.js.map +1 -1
  444. package/dist/utils/icons.d.ts.map +1 -1
  445. package/dist/utils/icons.js +5 -0
  446. package/dist/utils/icons.js.map +1 -1
  447. package/dist/utils/identifiers.d.ts.map +1 -1
  448. package/dist/utils/identifiers.js +6 -6
  449. package/dist/utils/identifiers.js.map +1 -1
  450. package/dist/utils/logger.d.ts +6 -6
  451. package/dist/utils/logger.d.ts.map +1 -1
  452. package/dist/utils/logger.js +18 -15
  453. package/dist/utils/logger.js.map +1 -1
  454. package/dist/utils/progress-utils.d.ts +3 -14
  455. package/dist/utils/progress-utils.d.ts.map +1 -1
  456. package/dist/utils/progress-utils.js +2 -21
  457. package/dist/utils/progress-utils.js.map +1 -1
  458. package/dist/utils/version.d.ts +9 -0
  459. package/dist/utils/version.d.ts.map +1 -0
  460. package/dist/utils/version.js +12 -0
  461. package/dist/utils/version.js.map +1 -0
  462. package/dist/utils/where-clause.d.ts +4 -0
  463. package/dist/utils/where-clause.d.ts.map +1 -1
  464. package/dist/utils/where-clause.js +16 -0
  465. package/dist/utils/where-clause.js.map +1 -1
  466. package/package.json +6 -4
  467. package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
  468. package/dist/adapters/postgresql/schemas/core.js.map +0 -1
  469. package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -852
  470. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
  471. package/dist/adapters/postgresql/schemas/extensions.js +0 -1202
  472. package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
  473. package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -541
  474. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
  475. package/dist/adapters/postgresql/schemas/jsonb.js +0 -814
  476. package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
  477. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
  478. package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
  479. package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
  480. package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
  481. package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
  482. package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
  483. package/dist/adapters/postgresql/tools/citext.js.map +0 -1
  484. package/dist/adapters/postgresql/tools/introspection.d.ts +0 -15
  485. package/dist/adapters/postgresql/tools/introspection.d.ts.map +0 -1
  486. package/dist/adapters/postgresql/tools/introspection.js +0 -1682
  487. package/dist/adapters/postgresql/tools/introspection.js.map +0 -1
  488. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
  489. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
  490. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
  491. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
  492. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
  493. package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
  494. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
  495. package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
  496. package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
  497. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
  498. package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
  499. package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
  500. package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
  501. package/dist/adapters/postgresql/tools/schema.js.map +0 -1
  502. package/dist/adapters/postgresql/tools/text.d.ts +0 -13
  503. package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
  504. package/dist/adapters/postgresql/tools/text.js +0 -1082
  505. package/dist/adapters/postgresql/tools/text.js.map +0 -1
  506. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
  507. package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
  508. package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
  509. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
  510. package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
  511. package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
  512. package/dist/codemode/api.d.ts.map +0 -1
  513. package/dist/codemode/api.js +0 -1544
  514. package/dist/codemode/api.js.map +0 -1
  515. package/dist/utils/promptGenerator.d.ts +0 -20
  516. package/dist/utils/promptGenerator.d.ts.map +0 -1
  517. package/dist/utils/promptGenerator.js +0 -81
  518. package/dist/utils/promptGenerator.js.map +0 -1
@@ -10,38 +10,40 @@ import { ConnectionError, QueryError, TransactionError, } from "../../types/inde
10
10
  import { logger } from "../../utils/logger.js";
11
11
  import { quoteIdentifier } from "../../utils/identifiers.js";
12
12
  import { parsePostgresError } from "./tools/core/error-helpers.js";
13
- // Import tool modules (will be created next)
13
+ import { VERSION } from "../../utils/version.js";
14
+ import { getSchemaInfo, queryAllIndexes, queryListTables, queryDescribeTable, queryListSchemas, queryTableIndexes, queryIsExtensionAvailable, } from "./schema-operations.js";
14
15
  import { getCoreTools } from "./tools/core/index.js";
15
16
  import { getTransactionTools } from "./tools/transactions.js";
16
17
  import { getJsonbTools } from "./tools/jsonb/index.js";
17
- import { getTextTools } from "./tools/text.js";
18
+ import { getTextTools } from "./tools/text/index.js";
18
19
  import { getPerformanceTools } from "./tools/performance/index.js";
19
20
  import { getAdminTools } from "./tools/admin.js";
20
- import { getMonitoringTools } from "./tools/monitoring.js";
21
+ import { getMonitoringTools } from "./tools/monitoring/index.js";
21
22
  import { getBackupTools } from "./tools/backup/index.js";
22
- import { getSchemaTools } from "./tools/schema.js";
23
+ import { getSchemaTools } from "./tools/schema/index.js";
23
24
  import { getVectorTools } from "./tools/vector/index.js";
24
25
  import { getPostgisTools } from "./tools/postgis/index.js";
25
- import { getPartitioningTools } from "./tools/partitioning.js";
26
+ import { getPartitioningTools } from "./tools/partitioning/index.js";
26
27
  import { getStatsTools } from "./tools/stats/index.js";
27
28
  import { getCronTools } from "./tools/cron.js";
28
29
  import { getPartmanTools } from "./tools/partman/index.js";
29
30
  import { getKcacheTools } from "./tools/kcache.js";
30
- import { getCitextTools } from "./tools/citext.js";
31
+ import { getCitextTools } from "./tools/citext/index.js";
31
32
  import { getLtreeTools } from "./tools/ltree.js";
32
33
  import { getPgcryptoTools } from "./tools/pgcrypto.js";
33
- import { getIntrospectionTools } from "./tools/introspection.js";
34
+ import { getIntrospectionTools } from "./tools/introspection/index.js";
35
+ import { getMigrationTools } from "./tools/migration/index.js";
34
36
  import { getCodeModeTools } from "./tools/codemode/index.js";
35
37
  import { getPostgresResources } from "./resources/index.js";
36
38
  import { getPostgresPrompts } from "./prompts/index.js";
37
39
  /**
38
- * Default cache TTL in milliseconds (configurable via CACHE_TTL_MS env var)
40
+ * Default cache TTL in milliseconds (configurable via METADATA_CACHE_TTL_MS env var)
39
41
  */
40
42
  const DEFAULT_CACHE_TTL_MS = parseInt(process.env["METADATA_CACHE_TTL_MS"] ?? "30000", 10);
41
43
  export class PostgresAdapter extends DatabaseAdapter {
42
44
  type = "postgresql";
43
45
  name = "PostgreSQL Adapter";
44
- version = "0.1.0";
46
+ version = VERSION;
45
47
  pool = null;
46
48
  activeTransactions = new Map();
47
49
  // Performance optimization: cache tool definitions (immutable after creation)
@@ -68,12 +70,6 @@ export class PostgresAdapter extends DatabaseAdapter {
68
70
  setCache(key, data) {
69
71
  this.metadataCache.set(key, { data, timestamp: Date.now() });
70
72
  }
71
- /**
72
- * Clear all cached metadata (useful after schema changes)
73
- */
74
- clearMetadataCache() {
75
- this.metadataCache.clear();
76
- }
77
73
  // =========================================================================
78
74
  // Connection Lifecycle
79
75
  // =========================================================================
@@ -387,543 +383,50 @@ export class PostgresAdapter extends DatabaseAdapter {
387
383
  }
388
384
  }
389
385
  // =========================================================================
390
- // Schema Operations
386
+ // Schema Operations (delegated to schema-operations.ts)
391
387
  // =========================================================================
392
- async getSchema() {
393
- const tables = await this.listTables();
394
- const views = tables.filter((t) => t.type === "view");
395
- const materializedViews = tables.filter((t) => t.type === "materialized_view");
396
- const realTables = tables.filter((t) => t.type === "table" || t.type === "partitioned_table");
397
- // Performance optimization: fetch all indexes in a single query instead of N+1
398
- const indexes = await this.getAllIndexes();
388
+ /**
389
+ * Cache helpers object for schema operation functions
390
+ */
391
+ get cacheHelpers() {
399
392
  return {
400
- tables: realTables,
401
- views,
402
- materializedViews,
403
- indexes,
393
+ getCached: (key) => this.getCached(key),
394
+ setCache: (key, data) => {
395
+ this.setCache(key, data);
396
+ },
404
397
  };
405
398
  }
399
+ async getSchema() {
400
+ return getSchemaInfo((sql, params) => this.executeQuery(sql, params), this.cacheHelpers);
401
+ }
406
402
  /**
407
403
  * Get all indexes across all user tables in a single query
408
404
  * Performance optimization: eliminates N+1 query pattern
409
405
  * Public so it can be used by pg_get_indexes when no table is specified
410
406
  */
411
407
  async getAllIndexes() {
412
- // Check cache first
413
- const cached = this.getCached("all_indexes");
414
- if (cached)
415
- return cached;
416
- const result = await this.executeQuery(`
417
- SELECT
418
- i.relname as name,
419
- t.relname as table_name,
420
- n.nspname as schema_name,
421
- am.amname as type,
422
- ix.indisunique as is_unique,
423
- pg_get_indexdef(ix.indexrelid) as definition,
424
- array_agg(a.attname ORDER BY x.ordinality) as columns,
425
- pg_relation_size(i.oid) as size_bytes,
426
- COALESCE(pg_stat_get_numscans(i.oid), 0) as num_scans,
427
- COALESCE(pg_stat_get_tuples_returned(i.oid), 0) as tuples_read,
428
- COALESCE(pg_stat_get_tuples_fetched(i.oid), 0) as tuples_fetched
429
- FROM pg_index ix
430
- JOIN pg_class t ON t.oid = ix.indrelid
431
- JOIN pg_class i ON i.oid = ix.indexrelid
432
- JOIN pg_namespace n ON n.oid = t.relnamespace
433
- JOIN pg_am am ON am.oid = i.relam
434
- CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS x(attnum, ordinality)
435
- LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = x.attnum
436
- WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
437
- AND n.nspname !~ '^pg_toast'
438
- GROUP BY i.relname, t.relname, n.nspname, am.amname, ix.indisunique, ix.indexrelid, i.oid
439
- ORDER BY n.nspname, t.relname, i.relname
440
- `);
441
- const indexes = (result.rows ?? []).map((row) => {
442
- const rawColumns = this.parseColumnsArray(row["columns"]);
443
- const definition = row["definition"];
444
- const indexType = row["type"];
445
- return {
446
- name: row["name"],
447
- tableName: row["table_name"],
448
- schemaName: row["schema_name"],
449
- columns: this.extractIndexColumns(rawColumns, definition),
450
- unique: row["is_unique"],
451
- type: indexType,
452
- sizeBytes: Number(row["size_bytes"]) || undefined,
453
- numberOfScans: Number(row["num_scans"]) || undefined,
454
- tuplesRead: Number(row["tuples_read"]) || undefined,
455
- tuplesFetched: Number(row["tuples_fetched"]) || undefined,
456
- };
457
- });
458
- this.setCache("all_indexes", indexes);
459
- return indexes;
460
- }
461
- /**
462
- * Parse columns from PostgreSQL array format
463
- * Handles both native arrays and string representations like "{col1,col2}"
464
- */
465
- parseColumnsArray(columns) {
466
- if (Array.isArray(columns)) {
467
- return columns;
468
- }
469
- if (typeof columns === "string") {
470
- // Handle PostgreSQL array string format: "{col1,col2}"
471
- const trimmed = columns.replace(/^{|}$/g, "");
472
- if (trimmed === "")
473
- return [];
474
- return trimmed.split(",").map((c) => c.trim().replace(/^"|"$/g, ""));
475
- }
476
- return [];
477
- }
478
- /**
479
- * Extract expression columns from index definition when column names are NULL.
480
- * Expression indexes (like LOWER(name)) have attnum=0 which returns NULL from pg_attribute.
481
- * This method parses the index definition to extract the actual expressions.
482
- */
483
- extractIndexColumns(columns, definition) {
484
- // If no NULL columns, return as-is
485
- if (!columns.some((c) => c === null || c === "NULL" || c === "")) {
486
- return columns;
487
- }
488
- // Find the expression portion with balanced parentheses
489
- // Format: CREATE [UNIQUE] INDEX name ON table USING method (col1, expr1, ...) [WHERE ...]
490
- const exprPart = this.extractIndexExpressionPart(definition);
491
- if (!exprPart) {
492
- return columns;
493
- }
494
- // Parse the column expressions, handling nested parentheses
495
- const exprs = this.parseIndexExpressions(exprPart);
496
- // If counts don't match, something is off - return original
497
- if (exprs.length !== columns.length) {
498
- return columns;
499
- }
500
- // Replace NULL columns with the parsed expressions
501
- return columns.map((col, i) => {
502
- if (col === null || col === "NULL" || col === "") {
503
- return exprs[i]?.trim() ?? col;
504
- }
505
- return col;
506
- });
507
- }
508
- /**
509
- * Extract the column expression part from an index definition, handling nested parentheses.
510
- * E.g., "CREATE INDEX idx ON tbl USING btree (lower(name))" → "lower(name)"
511
- */
512
- extractIndexExpressionPart(definition) {
513
- // Find "USING method (" or just the first "(" after ON
514
- const usingMatch = /USING\s+\w+\s*\(/i.exec(definition);
515
- if (!usingMatch) {
516
- return null;
517
- }
518
- const startIdx = usingMatch.index + usingMatch[0].length - 1; // Position of opening paren
519
- let depth = 0;
520
- let endIdx = -1;
521
- for (let i = startIdx; i < definition.length; i++) {
522
- if (definition[i] === "(") {
523
- depth++;
524
- }
525
- else if (definition[i] === ")") {
526
- depth--;
527
- if (depth === 0) {
528
- endIdx = i;
529
- break;
530
- }
531
- }
532
- }
533
- if (endIdx === -1) {
534
- return null;
535
- }
536
- return definition.substring(startIdx + 1, endIdx);
537
- }
538
- /**
539
- * Parse index expressions from the column list, handling nested parentheses.
540
- * E.g., "LOWER(name), id, UPPER(TRIM(email))" → ["LOWER(name)", "id", "UPPER(TRIM(email))"]
541
- */
542
- parseIndexExpressions(columnList) {
543
- const result = [];
544
- let current = "";
545
- let depth = 0;
546
- for (const char of columnList) {
547
- if (char === "(") {
548
- depth++;
549
- current += char;
550
- }
551
- else if (char === ")") {
552
- depth--;
553
- current += char;
554
- }
555
- else if (char === "," && depth === 0) {
556
- result.push(current.trim());
557
- current = "";
558
- }
559
- else {
560
- current += char;
561
- }
562
- }
563
- if (current.trim()) {
564
- result.push(current.trim());
565
- }
566
- return result;
408
+ return queryAllIndexes((sql, params) => this.executeQuery(sql, params), this.cacheHelpers);
567
409
  }
568
410
  async listTables() {
569
- // Performance optimization: return cached result if within TTL
570
- const cached = this.getCached("list_tables");
571
- if (cached)
572
- return cached;
573
- const result = await this.executeQuery(`
574
- SELECT
575
- c.relname as name,
576
- n.nspname as schema,
577
- CASE c.relkind
578
- WHEN 'r' THEN 'table'
579
- WHEN 'v' THEN 'view'
580
- WHEN 'm' THEN 'materialized_view'
581
- WHEN 'f' THEN 'foreign_table'
582
- WHEN 'p' THEN 'partitioned_table'
583
- END as type,
584
- pg_catalog.pg_get_userbyid(c.relowner) as owner,
585
- CASE WHEN c.reltuples = -1 THEN NULL ELSE c.reltuples END::bigint as row_count,
586
- COALESCE(s.n_live_tup, 0)::bigint as live_row_estimate,
587
- (c.reltuples = -1) as stats_stale,
588
- pg_catalog.pg_table_size(c.oid) as size_bytes,
589
- pg_catalog.pg_total_relation_size(c.oid) as total_size_bytes,
590
- obj_description(c.oid, 'pg_class') as comment
591
- FROM pg_catalog.pg_class c
592
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
593
- LEFT JOIN pg_stat_user_tables s ON s.relid = c.oid
594
- WHERE c.relkind IN ('r', 'v', 'm', 'f', 'p')
595
- AND n.nspname NOT IN ('pg_catalog', 'information_schema')
596
- AND n.nspname !~ '^pg_toast'
597
- ORDER BY n.nspname, c.relname
598
- `);
599
- const tables = (result.rows ?? []).map((row) => {
600
- const rowCount = row["row_count"];
601
- const liveRowEstimate = Number(row["live_row_estimate"]) || 0;
602
- const statsStale = row["stats_stale"] === true;
603
- // Use live_row_estimate as fallback when stats are stale
604
- const effectiveRowCount = rowCount !== null ? Number(rowCount) : liveRowEstimate;
605
- return {
606
- name: row["name"],
607
- schema: row["schema"],
608
- type: row["type"],
609
- owner: row["owner"],
610
- rowCount: effectiveRowCount,
611
- sizeBytes: Number(row["size_bytes"]) || undefined,
612
- totalSizeBytes: Number(row["total_size_bytes"]) || undefined,
613
- comment: row["comment"],
614
- statsStale,
615
- };
616
- });
617
- this.setCache("list_tables", tables);
618
- return tables;
411
+ return queryListTables((sql, params) => this.executeQuery(sql, params), this.cacheHelpers);
619
412
  }
620
413
  async describeTable(tableName, schemaName = "public") {
621
- // Performance optimization: return cached result if within TTL
622
- const cacheKey = `describe:${schemaName}.${tableName}`;
623
- const cached = this.getCached(cacheKey);
624
- if (cached)
625
- return cached;
626
- // Get column information including foreign key references
627
- const columnsResult = await this.executeQuery(`
628
- SELECT
629
- a.attname as name,
630
- pg_catalog.format_type(a.atttypid, a.atttypmod) as type,
631
- NOT a.attnotnull as nullable,
632
- COALESCE(
633
- (SELECT true FROM pg_constraint c
634
- WHERE c.conrelid = a.attrelid
635
- AND a.attnum = ANY(c.conkey)
636
- AND c.contype = 'p'),
637
- false
638
- ) as primary_key,
639
- pg_get_expr(d.adbin, d.adrelid) as default_value,
640
- a.attgenerated != '' as is_generated,
641
- pg_get_expr(d.adbin, d.adrelid) as generated_expression,
642
- col_description(a.attrelid, a.attnum) as comment,
643
- -- Foreign key reference for this column
644
- (SELECT json_build_object(
645
- 'table', ref_t.relname,
646
- 'schema', ref_n.nspname,
647
- 'column', ref_a.attname
648
- )
649
- FROM pg_constraint c
650
- JOIN pg_class ref_t ON ref_t.oid = c.confrelid
651
- JOIN pg_namespace ref_n ON ref_n.oid = ref_t.relnamespace
652
- JOIN pg_attribute ref_a ON ref_a.attrelid = ref_t.oid
653
- AND ref_a.attnum = c.confkey[array_position(c.conkey, a.attnum)]
654
- WHERE c.conrelid = a.attrelid
655
- AND a.attnum = ANY(c.conkey)
656
- AND c.contype = 'f'
657
- LIMIT 1
658
- ) as foreign_key
659
- FROM pg_catalog.pg_attribute a
660
- LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid, a.attnum) = (d.adrelid, d.adnum)
661
- WHERE a.attrelid = ($1 || '.' || $2)::regclass
662
- AND a.attnum > 0
663
- AND NOT a.attisdropped
664
- ORDER BY a.attnum
665
- `, [schemaName, tableName]);
666
- const columns = (columnsResult.rows ?? []).map((row) => {
667
- const isGenerated = row["is_generated"];
668
- const fkRef = row["foreign_key"];
669
- const nullable = row["nullable"];
670
- return {
671
- name: row["name"],
672
- type: row["type"],
673
- nullable,
674
- notNull: !nullable, // Alias for consistency with createTable API
675
- primaryKey: row["primary_key"],
676
- defaultValue: row["default_value"],
677
- isGenerated,
678
- // Only set generatedExpression for actual generated columns
679
- generatedExpression: isGenerated
680
- ? row["generated_expression"]
681
- : undefined,
682
- comment: row["comment"],
683
- // Include foreign key reference if present
684
- foreignKey: fkRef
685
- ? {
686
- table: fkRef.table,
687
- schema: fkRef.schema,
688
- column: fkRef.column,
689
- }
690
- : undefined,
691
- };
692
- });
693
- // Get table info
694
- const tableResult = await this.executeQuery(`
695
- SELECT
696
- CASE c.relkind
697
- WHEN 'r' THEN 'table'
698
- WHEN 'v' THEN 'view'
699
- WHEN 'm' THEN 'materialized_view'
700
- WHEN 'f' THEN 'foreign_table'
701
- WHEN 'p' THEN 'partitioned_table'
702
- END as type,
703
- pg_catalog.pg_get_userbyid(c.relowner) as owner,
704
- CASE WHEN c.reltuples = -1 THEN NULL ELSE c.reltuples END::bigint as row_count,
705
- COALESCE(s.n_live_tup, 0)::bigint as live_row_estimate,
706
- (c.reltuples = -1) as stats_stale,
707
- obj_description(c.oid, 'pg_class') as comment,
708
- c.relkind = 'p' as is_partitioned,
709
- pg_get_partkeydef(c.oid) as partition_key
710
- FROM pg_catalog.pg_class c
711
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
712
- LEFT JOIN pg_stat_user_tables s ON s.relid = c.oid
713
- WHERE c.relname = $1
714
- AND n.nspname = $2
715
- `, [tableName, schemaName]);
716
- const tableRow = tableResult.rows?.[0];
717
- // Get indexes for this table
718
- const indexesResult = await this.executeQuery(`
719
- SELECT
720
- i.relname as name,
721
- am.amname as type,
722
- ix.indisunique as is_unique,
723
- ix.indisprimary as is_primary,
724
- pg_get_indexdef(ix.indexrelid) as definition,
725
- array_agg(a.attname ORDER BY x.ordinality) as columns
726
- FROM pg_index ix
727
- JOIN pg_class t ON t.oid = ix.indrelid
728
- JOIN pg_class i ON i.oid = ix.indexrelid
729
- JOIN pg_namespace n ON n.oid = t.relnamespace
730
- JOIN pg_am am ON am.oid = i.relam
731
- CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS x(attnum, ordinality)
732
- LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = x.attnum
733
- WHERE t.relname = $1 AND n.nspname = $2
734
- GROUP BY i.relname, am.amname, ix.indisunique, ix.indisprimary, ix.indexrelid
735
- ORDER BY i.relname
736
- `, [tableName, schemaName]);
737
- const indexes = (indexesResult.rows ?? []).map((row) => {
738
- const rawColumns = this.parseColumnsArray(row["columns"]);
739
- const definition = row["definition"];
740
- return {
741
- name: row["name"],
742
- type: row["type"],
743
- isUnique: row["is_unique"],
744
- isPrimary: row["is_primary"],
745
- columns: this.extractIndexColumns(rawColumns, definition),
746
- definition,
747
- };
748
- });
749
- // Get constraints (CHECK, UNIQUE, PRIMARY KEY, EXCLUSION - FK handled separately)
750
- const constraintsResult = await this.executeQuery(`
751
- SELECT
752
- c.conname as name,
753
- CASE c.contype
754
- WHEN 'p' THEN 'primary_key'
755
- WHEN 'c' THEN 'check'
756
- WHEN 'u' THEN 'unique'
757
- WHEN 'x' THEN 'exclusion'
758
- END as type,
759
- pg_get_constraintdef(c.oid) as definition,
760
- array_agg(a.attname ORDER BY x.ordinality) FILTER (WHERE a.attname IS NOT NULL) as columns
761
- FROM pg_constraint c
762
- JOIN pg_class t ON t.oid = c.conrelid
763
- JOIN pg_namespace n ON n.oid = t.relnamespace
764
- LEFT JOIN LATERAL unnest(c.conkey) WITH ORDINALITY AS x(attnum, ordinality) ON true
765
- LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = x.attnum
766
- WHERE t.relname = $1
767
- AND n.nspname = $2
768
- AND c.contype IN ('p', 'c', 'u', 'x')
769
- GROUP BY c.conname, c.contype, c.oid
770
- ORDER BY
771
- CASE c.contype WHEN 'p' THEN 0 WHEN 'u' THEN 1 WHEN 'c' THEN 2 ELSE 3 END,
772
- c.conname
773
- `, [tableName, schemaName]);
774
- const constraints = (constraintsResult.rows ?? []).map((row) => ({
775
- name: row["name"],
776
- type: row["type"],
777
- definition: row["definition"],
778
- columns: this.parseColumnsArray(row["columns"]),
779
- }));
780
- // Add NOT NULL "constraints" from column info (synthetic constraint entries)
781
- const notNullConstraints = [];
782
- for (const col of columns) {
783
- if (!col.nullable && !col.primaryKey) {
784
- // Skip primary key columns as they have inherent NOT NULL
785
- notNullConstraints.push({
786
- name: `${col.name}_not_null`,
787
- type: "not_null",
788
- definition: `NOT NULL`,
789
- columns: [col.name],
790
- });
791
- }
792
- }
793
- // Get foreign keys
794
- const foreignKeysResult = await this.executeQuery(`
795
- SELECT
796
- c.conname as name,
797
- a.attname as column,
798
- ref_t.relname as referenced_table,
799
- ref_n.nspname as referenced_schema,
800
- ref_a.attname as referenced_column,
801
- CASE c.confupdtype
802
- WHEN 'a' THEN 'NO ACTION'
803
- WHEN 'r' THEN 'RESTRICT'
804
- WHEN 'c' THEN 'CASCADE'
805
- WHEN 'n' THEN 'SET NULL'
806
- WHEN 'd' THEN 'SET DEFAULT'
807
- END as on_update,
808
- CASE c.confdeltype
809
- WHEN 'a' THEN 'NO ACTION'
810
- WHEN 'r' THEN 'RESTRICT'
811
- WHEN 'c' THEN 'CASCADE'
812
- WHEN 'n' THEN 'SET NULL'
813
- WHEN 'd' THEN 'SET DEFAULT'
814
- END as on_delete
815
- FROM pg_constraint c
816
- JOIN pg_class t ON t.oid = c.conrelid
817
- JOIN pg_namespace n ON n.oid = t.relnamespace
818
- JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(c.conkey)
819
- JOIN pg_class ref_t ON ref_t.oid = c.confrelid
820
- JOIN pg_namespace ref_n ON ref_n.oid = ref_t.relnamespace
821
- JOIN pg_attribute ref_a ON ref_a.attrelid = ref_t.oid AND ref_a.attnum = ANY(c.confkey)
822
- WHERE t.relname = $1
823
- AND n.nspname = $2
824
- AND c.contype = 'f'
825
- ORDER BY c.conname
826
- `, [tableName, schemaName]);
827
- const foreignKeys = (foreignKeysResult.rows ?? []).map((row) => ({
828
- name: row["name"],
829
- column: row["column"],
830
- referencedTable: row["referenced_table"],
831
- referencedSchema: row["referenced_schema"],
832
- referencedColumn: row["referenced_column"],
833
- onUpdate: row["on_update"],
834
- onDelete: row["on_delete"],
835
- }));
836
- // Extract primary key columns from constraints for convenience
837
- const pkConstraint = constraints.find((c) => c.type === "primary_key");
838
- const primaryKey = pkConstraint?.columns ?? null;
839
- const tableInfo = {
840
- name: tableName,
841
- schema: schemaName,
842
- type: tableRow?.["type"] ?? "table",
843
- owner: tableRow?.["owner"],
844
- rowCount: (() => {
845
- const rc = tableRow?.["row_count"];
846
- const liveEst = Number(tableRow?.["live_row_estimate"]) || 0;
847
- return rc !== null && rc !== undefined ? Number(rc) : liveEst;
848
- })(),
849
- comment: tableRow?.["comment"],
850
- isPartitioned: tableRow?.["is_partitioned"],
851
- partitionKey: tableRow?.["partition_key"],
852
- columns,
853
- primaryKey,
854
- indexes,
855
- constraints: [...constraints, ...notNullConstraints],
856
- foreignKeys,
857
- };
858
- this.setCache(cacheKey, tableInfo);
859
- return tableInfo;
414
+ return queryDescribeTable((sql, params) => this.executeQuery(sql, params), this.cacheHelpers, tableName, schemaName);
860
415
  }
861
416
  async listSchemas() {
862
- const result = await this.executeQuery(`
863
- SELECT nspname
864
- FROM pg_catalog.pg_namespace
865
- WHERE nspname NOT IN ('pg_catalog', 'information_schema')
866
- AND nspname !~ '^pg_toast'
867
- AND nspname !~ '^pg_temp'
868
- ORDER BY nspname
869
- `);
870
- return (result.rows ?? []).map((row) => row["nspname"]);
417
+ return queryListSchemas((sql, params) => this.executeQuery(sql, params));
871
418
  }
872
419
  /**
873
420
  * Get indexes for a table
874
421
  */
875
422
  async getTableIndexes(tableName, schemaName = "public") {
876
- const result = await this.executeQuery(`
877
- SELECT
878
- i.relname as name,
879
- am.amname as type,
880
- ix.indisunique as is_unique,
881
- pg_get_indexdef(ix.indexrelid) as definition,
882
- array_agg(a.attname ORDER BY x.ordinality) as columns,
883
- pg_relation_size(i.oid) as size_bytes,
884
- COALESCE(pg_stat_get_numscans(i.oid), 0) as num_scans,
885
- COALESCE(pg_stat_get_tuples_returned(i.oid), 0) as tuples_read,
886
- COALESCE(pg_stat_get_tuples_fetched(i.oid), 0) as tuples_fetched
887
- FROM pg_index ix
888
- JOIN pg_class t ON t.oid = ix.indrelid
889
- JOIN pg_class i ON i.oid = ix.indexrelid
890
- JOIN pg_namespace n ON n.oid = t.relnamespace
891
- JOIN pg_am am ON am.oid = i.relam
892
- CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS x(attnum, ordinality)
893
- LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = x.attnum
894
- WHERE t.relname = $1
895
- AND n.nspname = $2
896
- GROUP BY i.relname, am.amname, ix.indisunique, ix.indexrelid, i.oid
897
- ORDER BY i.relname
898
- `, [tableName, schemaName]);
899
- return (result.rows ?? []).map((row) => {
900
- const rawColumns = this.parseColumnsArray(row["columns"]);
901
- const definition = row["definition"];
902
- const indexType = row["type"];
903
- return {
904
- name: row["name"],
905
- tableName,
906
- schemaName,
907
- columns: this.extractIndexColumns(rawColumns, definition),
908
- unique: row["is_unique"],
909
- type: indexType,
910
- sizeBytes: Number(row["size_bytes"]) || undefined,
911
- numberOfScans: Number(row["num_scans"]) || undefined,
912
- tuplesRead: Number(row["tuples_read"]) || undefined,
913
- tuplesFetched: Number(row["tuples_fetched"]) || undefined,
914
- };
915
- });
423
+ return queryTableIndexes((sql, params) => this.executeQuery(sql, params), tableName, schemaName);
916
424
  }
917
425
  /**
918
426
  * Check if an extension is available
919
427
  */
920
428
  async isExtensionAvailable(extensionName) {
921
- const result = await this.executeQuery(`
922
- SELECT EXISTS(
923
- SELECT 1 FROM pg_extension WHERE extname = $1
924
- ) as available
925
- `, [extensionName]);
926
- return result.rows?.[0]?.["available"] ?? false;
429
+ return queryIsExtensionAvailable((sql, params) => this.executeQuery(sql, params), extensionName);
927
430
  }
928
431
  // =========================================================================
929
432
  // Capabilities
@@ -965,6 +468,7 @@ export class PostgresAdapter extends DatabaseAdapter {
965
468
  "ltree",
966
469
  "pgcrypto",
967
470
  "introspection",
471
+ "migration",
968
472
  "codemode",
969
473
  ];
970
474
  }
@@ -997,6 +501,7 @@ export class PostgresAdapter extends DatabaseAdapter {
997
501
  ...getLtreeTools(this),
998
502
  ...getPgcryptoTools(this),
999
503
  ...getIntrospectionTools(this),
504
+ ...getMigrationTools(this),
1000
505
  ...getCodeModeTools(this),
1001
506
  ];
1002
507
  return this.cachedToolDefinitions;