@neverinfamous/postgres-mcp 1.2.0 → 1.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 (180) hide show
  1. package/README.md +68 -62
  2. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  3. package/dist/adapters/postgresql/PostgresAdapter.js +53 -3
  4. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  5. package/dist/adapters/postgresql/prompts/ltree.js +2 -2
  6. package/dist/adapters/postgresql/prompts/ltree.js.map +1 -1
  7. package/dist/adapters/postgresql/schemas/admin.d.ts +10 -5
  8. package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -1
  9. package/dist/adapters/postgresql/schemas/admin.js +10 -5
  10. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  11. package/dist/adapters/postgresql/schemas/backup.d.ts +8 -4
  12. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  13. package/dist/adapters/postgresql/schemas/backup.js +11 -4
  14. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  15. package/dist/adapters/postgresql/schemas/core.d.ts +53 -19
  16. package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -1
  17. package/dist/adapters/postgresql/schemas/core.js +61 -17
  18. package/dist/adapters/postgresql/schemas/core.js.map +1 -1
  19. package/dist/adapters/postgresql/schemas/cron.d.ts +51 -32
  20. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  21. package/dist/adapters/postgresql/schemas/cron.js +64 -44
  22. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  23. package/dist/adapters/postgresql/schemas/extensions.d.ts +168 -73
  24. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
  25. package/dist/adapters/postgresql/schemas/extensions.js +177 -60
  26. package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
  27. package/dist/adapters/postgresql/schemas/index.d.ts +5 -5
  28. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  29. package/dist/adapters/postgresql/schemas/index.js +9 -7
  30. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  31. package/dist/adapters/postgresql/schemas/jsonb.d.ts +94 -42
  32. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
  33. package/dist/adapters/postgresql/schemas/jsonb.js +101 -30
  34. package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
  35. package/dist/adapters/postgresql/schemas/monitoring.d.ts +28 -11
  36. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  37. package/dist/adapters/postgresql/schemas/monitoring.js +49 -24
  38. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  39. package/dist/adapters/postgresql/schemas/partitioning.d.ts +5 -4
  40. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  41. package/dist/adapters/postgresql/schemas/partitioning.js +5 -4
  42. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  43. package/dist/adapters/postgresql/schemas/performance.d.ts +60 -30
  44. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  45. package/dist/adapters/postgresql/schemas/performance.js +85 -22
  46. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  47. package/dist/adapters/postgresql/schemas/postgis.d.ts +20 -0
  48. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
  49. package/dist/adapters/postgresql/schemas/postgis.js +20 -0
  50. package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
  51. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -23
  52. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  53. package/dist/adapters/postgresql/schemas/schema-mgmt.js +69 -26
  54. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  55. package/dist/adapters/postgresql/schemas/stats.d.ts +33 -20
  56. package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -1
  57. package/dist/adapters/postgresql/schemas/stats.js +36 -20
  58. package/dist/adapters/postgresql/schemas/stats.js.map +1 -1
  59. package/dist/adapters/postgresql/schemas/text-search.d.ts +8 -5
  60. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  61. package/dist/adapters/postgresql/schemas/text-search.js +11 -4
  62. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  63. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  64. package/dist/adapters/postgresql/tools/admin.js +211 -140
  65. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  66. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  67. package/dist/adapters/postgresql/tools/backup/dump.js +360 -337
  68. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  69. package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -1
  70. package/dist/adapters/postgresql/tools/citext.js +221 -163
  71. package/dist/adapters/postgresql/tools/citext.js.map +1 -1
  72. package/dist/adapters/postgresql/tools/core/convenience.d.ts +9 -1
  73. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  74. package/dist/adapters/postgresql/tools/core/convenience.js +78 -11
  75. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  76. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +48 -0
  77. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -0
  78. package/dist/adapters/postgresql/tools/core/error-helpers.js +256 -0
  79. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -0
  80. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  81. package/dist/adapters/postgresql/tools/core/health.js +18 -4
  82. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  83. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  84. package/dist/adapters/postgresql/tools/core/indexes.js +45 -4
  85. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  86. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  87. package/dist/adapters/postgresql/tools/core/objects.js +104 -85
  88. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  89. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/tools/core/query.js +100 -42
  91. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  92. package/dist/adapters/postgresql/tools/core/schemas.d.ts +51 -25
  93. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  94. package/dist/adapters/postgresql/tools/core/schemas.js +51 -25
  95. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  96. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  97. package/dist/adapters/postgresql/tools/core/tables.js +68 -28
  98. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  99. package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -1
  100. package/dist/adapters/postgresql/tools/cron.js +274 -179
  101. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  102. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
  103. package/dist/adapters/postgresql/tools/jsonb/advanced.js +372 -284
  104. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
  105. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
  106. package/dist/adapters/postgresql/tools/jsonb/basic.js +617 -398
  107. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
  108. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/tools/kcache.js +278 -246
  110. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  111. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  112. package/dist/adapters/postgresql/tools/ltree.js +121 -35
  113. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  114. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -1
  115. package/dist/adapters/postgresql/tools/monitoring.js +54 -34
  116. package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
  117. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -1
  118. package/dist/adapters/postgresql/tools/partitioning.js +79 -15
  119. package/dist/adapters/postgresql/tools/partitioning.js.map +1 -1
  120. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  121. package/dist/adapters/postgresql/tools/partman/management.js +11 -4
  122. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  123. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  124. package/dist/adapters/postgresql/tools/partman/operations.js +132 -19
  125. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  126. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  127. package/dist/adapters/postgresql/tools/performance/analysis.js +264 -160
  128. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  129. package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -1
  130. package/dist/adapters/postgresql/tools/performance/explain.js +61 -21
  131. package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -1
  132. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  133. package/dist/adapters/postgresql/tools/performance/monitoring.js +44 -7
  134. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  135. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  136. package/dist/adapters/postgresql/tools/performance/optimization.js +92 -81
  137. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  138. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  139. package/dist/adapters/postgresql/tools/performance/stats.js +124 -36
  140. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  141. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  142. package/dist/adapters/postgresql/tools/pgcrypto.js +244 -89
  143. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  144. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/tools/postgis/advanced.js +285 -222
  146. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  147. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  148. package/dist/adapters/postgresql/tools/postgis/basic.js +359 -249
  149. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  150. package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -1
  151. package/dist/adapters/postgresql/tools/postgis/standalone.js +135 -51
  152. package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -1
  153. package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -1
  154. package/dist/adapters/postgresql/tools/schema.js +504 -231
  155. package/dist/adapters/postgresql/tools/schema.js.map +1 -1
  156. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  157. package/dist/adapters/postgresql/tools/stats/advanced.js +515 -476
  158. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  159. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  160. package/dist/adapters/postgresql/tools/stats/basic.js +302 -293
  161. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  162. package/dist/adapters/postgresql/tools/text.d.ts.map +1 -1
  163. package/dist/adapters/postgresql/tools/text.js +392 -218
  164. package/dist/adapters/postgresql/tools/text.js.map +1 -1
  165. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  166. package/dist/adapters/postgresql/tools/transactions.js +157 -50
  167. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  168. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -1
  169. package/dist/adapters/postgresql/tools/vector/advanced.js +18 -0
  170. package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -1
  172. package/dist/adapters/postgresql/tools/vector/basic.js +100 -53
  173. package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -1
  174. package/dist/codemode/api.js +1 -1
  175. package/dist/codemode/api.js.map +1 -1
  176. package/dist/constants/ServerInstructions.d.ts +1 -1
  177. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  178. package/dist/constants/ServerInstructions.js +45 -7
  179. package/dist/constants/ServerInstructions.js.map +1 -1
  180. package/package.json +9 -5
@@ -4,11 +4,44 @@
4
4
  import { z } from "zod";
5
5
  import { readOnly } from "../../../../utils/annotations.js";
6
6
  import { getToolIcons } from "../../../../utils/icons.js";
7
+ import { formatPostgresError } from "../core/error-helpers.js";
7
8
  import { SeqScanTablesOutputSchema, IndexRecommendationsOutputSchema, QueryPlanCompareOutputSchema, } from "../../schemas/index.js";
8
9
  // Helper to coerce string numbers to JavaScript numbers (PostgreSQL returns BIGINT as strings)
9
10
  const toNum = (val) => val === null || val === undefined ? null : Number(val);
11
+ /**
12
+ * P154: Validate that a schema exists before executing performance queries.
13
+ */
14
+ async function validatePerformanceSchemaExists(adapter, schema) {
15
+ if (!schema)
16
+ return null;
17
+ const schemaResult = await adapter.executeQuery(`SELECT 1 FROM information_schema.schemata WHERE schema_name = $1`, [schema]);
18
+ if (!schemaResult.rows || schemaResult.rows.length === 0) {
19
+ return `Schema '${schema}' does not exist. Use pg_list_objects with type 'table' to see available schemas.`;
20
+ }
21
+ return null;
22
+ }
23
+ /**
24
+ * P154: Validate that a table exists before executing performance queries.
25
+ */
26
+ async function validatePerformanceTableExists(adapter, table, schema) {
27
+ if (!table && !schema)
28
+ return null;
29
+ if (schema) {
30
+ const schemaError = await validatePerformanceSchemaExists(adapter, schema);
31
+ if (schemaError !== null)
32
+ return schemaError;
33
+ }
34
+ if (table) {
35
+ const targetSchema = schema ?? "public";
36
+ const tableResult = await adapter.executeQuery(`SELECT 1 FROM information_schema.tables WHERE table_schema = $1 AND table_name = $2`, [targetSchema, table]);
37
+ if (!tableResult.rows || tableResult.rows.length === 0) {
38
+ return `Table '${targetSchema}.${table}' not found. Use pg_list_tables to see available tables.`;
39
+ }
40
+ }
41
+ return null;
42
+ }
10
43
  export function createSeqScanTablesTool(adapter) {
11
- const SeqScanTablesSchema = z.preprocess((input) => input ?? {}, z.object({
44
+ const SeqScanTablesSchemaBase = z.object({
12
45
  minScans: z
13
46
  .number()
14
47
  .optional()
@@ -18,12 +51,13 @@ export function createSeqScanTablesTool(adapter) {
18
51
  .number()
19
52
  .optional()
20
53
  .describe("Max rows to return (default: 50, use 0 for all)"),
21
- }));
54
+ });
55
+ const SeqScanTablesSchema = z.preprocess((input) => input ?? {}, SeqScanTablesSchemaBase);
22
56
  return {
23
57
  name: "pg_seq_scan_tables",
24
58
  description: "Find tables with high sequential scan counts (potential missing indexes). Default minScans=10; use higher values (e.g., 100+) for production databases.",
25
59
  group: "performance",
26
- inputSchema: SeqScanTablesSchema,
60
+ inputSchema: SeqScanTablesSchemaBase,
27
61
  outputSchema: SeqScanTablesOutputSchema,
28
62
  annotations: readOnly("Sequential Scan Tables"),
29
63
  icons: getToolIcons("performance", readOnly("Sequential Scan Tables")),
@@ -35,6 +69,11 @@ export function createSeqScanTablesTool(adapter) {
35
69
  if (parsed.schema !== undefined) {
36
70
  whereClause += ` AND schemaname = '${parsed.schema}'`;
37
71
  }
72
+ // P154: Validate schema existence when filtering by schema
73
+ const schemaError = await validatePerformanceSchemaExists(adapter, parsed.schema);
74
+ if (schemaError !== null) {
75
+ return { success: false, error: schemaError };
76
+ }
38
77
  const sql = `SELECT schemaname, relname as table_name,
39
78
  seq_scan, seq_tup_read,
40
79
  idx_scan, idx_tup_fetch,
@@ -154,110 +193,116 @@ export function createIndexRecommendationsTool(adapter) {
154
193
  annotations: readOnly("Index Recommendations"),
155
194
  icons: getToolIcons("performance", readOnly("Index Recommendations")),
156
195
  handler: async (params, _context) => {
157
- const parsed = IndexRecommendationsSchema.parse(params);
158
- const schemaName = parsed.schema ?? "public";
159
- const queryParams = parsed.params ?? [];
160
- // If SQL query provided, perform query-specific analysis
161
- if (parsed.sql !== undefined && parsed.sql.trim() !== "") {
162
- const hypopgAvailable = await checkHypoPG();
163
- // Get baseline EXPLAIN plan (with parameter binding support)
164
- const baselineResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
165
- const baselinePlanRow = baselineResult.rows?.[0];
166
- const baselinePlan = baselinePlanRow?.["QUERY PLAN"]?.[0];
167
- const baselineCost = extractCost(baselinePlan?.Plan);
168
- // Extract Seq Scan candidates
169
- const candidates = extractSeqScanCandidates(baselinePlan?.Plan);
170
- // If no candidates or no baseline cost, return basic analysis
171
- if (candidates.length === 0 || baselineCost === null) {
172
- return {
173
- queryAnalysis: true,
174
- hypopgAvailable,
175
- baselineCost,
176
- recommendations: [],
177
- hint: "Query appears well-indexed. No sequential scans with filterable columns detected.",
178
- };
179
- }
180
- // If HypoPG is available, create hypothetical indexes and measure improvement
181
- if (hypopgAvailable) {
182
- const recommendations = [];
183
- try {
184
- // Reset any existing hypothetical indexes
185
- await adapter.executeQuery("SELECT hypopg_reset()");
186
- // Test each candidate index
187
- for (const candidate of candidates) {
188
- try {
189
- // Create hypothetical index
190
- await adapter.executeQuery(`SELECT hypopg_create_index('${candidate.indexDDL.replace(/'/g, "''")}')`);
191
- // Re-run EXPLAIN with hypothetical index (with parameter binding)
192
- const improvedResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
193
- const improvedPlanRow = improvedResult.rows?.[0];
194
- const improvedPlan = improvedPlanRow?.["QUERY PLAN"]?.[0];
195
- const improvedCost = extractCost(improvedPlan?.Plan);
196
- if (improvedCost !== null && improvedCost < baselineCost) {
197
- const improvementPct = ((baselineCost - improvedCost) / baselineCost) * 100;
198
- recommendations.push({
199
- table: candidate.table,
200
- column: candidate.column,
201
- suggestedIndex: candidate.indexDDL,
202
- baselineCost,
203
- improvedCost,
204
- improvement: `${improvementPct.toFixed(1)}% cost reduction`,
196
+ try {
197
+ const parsed = IndexRecommendationsSchema.parse(params);
198
+ const schemaName = parsed.schema ?? "public";
199
+ const queryParams = parsed.params ?? [];
200
+ // If SQL query provided, perform query-specific analysis
201
+ if (parsed.sql !== undefined && parsed.sql.trim() !== "") {
202
+ const hypopgAvailable = await checkHypoPG();
203
+ // Get baseline EXPLAIN plan (with parameter binding support)
204
+ const baselineResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
205
+ const baselinePlanRow = baselineResult.rows?.[0];
206
+ const baselinePlan = baselinePlanRow?.["QUERY PLAN"]?.[0];
207
+ const baselineCost = extractCost(baselinePlan?.Plan);
208
+ // Extract Seq Scan candidates
209
+ const candidates = extractSeqScanCandidates(baselinePlan?.Plan);
210
+ // If no candidates or no baseline cost, return basic analysis
211
+ if (candidates.length === 0 || baselineCost === null) {
212
+ return {
213
+ queryAnalysis: true,
214
+ hypopgAvailable,
215
+ baselineCost,
216
+ recommendations: [],
217
+ hint: "Query appears well-indexed. No sequential scans with filterable columns detected.",
218
+ };
219
+ }
220
+ // If HypoPG is available, create hypothetical indexes and measure improvement
221
+ if (hypopgAvailable) {
222
+ const recommendations = [];
223
+ try {
224
+ // Reset any existing hypothetical indexes
225
+ await adapter.executeQuery("SELECT hypopg_reset()");
226
+ // Test each candidate index
227
+ for (const candidate of candidates) {
228
+ try {
229
+ // Create hypothetical index
230
+ await adapter.executeQuery(`SELECT hypopg_create_index('${candidate.indexDDL.replace(/'/g, "''")}')`);
231
+ // Re-run EXPLAIN with hypothetical index (with parameter binding)
232
+ const improvedResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
233
+ const improvedPlanRow = improvedResult.rows?.[0];
234
+ const improvedPlan = improvedPlanRow?.["QUERY PLAN"]?.[0];
235
+ const improvedCost = extractCost(improvedPlan?.Plan);
236
+ if (improvedCost !== null && improvedCost < baselineCost) {
237
+ const improvementPct = ((baselineCost - improvedCost) / baselineCost) * 100;
238
+ recommendations.push({
239
+ table: candidate.table,
240
+ column: candidate.column,
241
+ suggestedIndex: candidate.indexDDL,
242
+ baselineCost,
243
+ improvedCost,
244
+ improvement: `${improvementPct.toFixed(1)}% cost reduction`,
245
+ });
246
+ }
247
+ // Reset for next candidate
248
+ await adapter.executeQuery("SELECT hypopg_reset()");
249
+ }
250
+ catch {
251
+ // Skip this candidate if it fails
252
+ await adapter
253
+ .executeQuery("SELECT hypopg_reset()")
254
+ .catch(() => {
255
+ /* ignore */
205
256
  });
206
257
  }
207
- // Reset for next candidate
208
- await adapter.executeQuery("SELECT hypopg_reset()");
209
- }
210
- catch {
211
- // Skip this candidate if it fails
212
- await adapter
213
- .executeQuery("SELECT hypopg_reset()")
214
- .catch(() => {
215
- /* ignore */
216
- });
217
258
  }
218
259
  }
219
- }
220
- finally {
221
- // Ensure cleanup
222
- await adapter.executeQuery("SELECT hypopg_reset()").catch(() => {
223
- /* ignore */
260
+ finally {
261
+ // Ensure cleanup
262
+ await adapter.executeQuery("SELECT hypopg_reset()").catch(() => {
263
+ /* ignore */
264
+ });
265
+ }
266
+ // Sort by improvement
267
+ recommendations.sort((a, b) => {
268
+ const aImprv = parseFloat(a.improvement);
269
+ const bImprv = parseFloat(b.improvement);
270
+ return bImprv - aImprv;
224
271
  });
272
+ return {
273
+ queryAnalysis: true,
274
+ hypopgAvailable: true,
275
+ baselineCost,
276
+ recommendations,
277
+ hint: recommendations.length > 0
278
+ ? `Found ${String(recommendations.length)} index(es) that would improve query performance. Review and create indexes as needed.`
279
+ : "No indexes found that would significantly improve this query.",
280
+ };
225
281
  }
226
- // Sort by improvement
227
- recommendations.sort((a, b) => {
228
- const aImprv = parseFloat(a.improvement);
229
- const bImprv = parseFloat(b.improvement);
230
- return bImprv - aImprv;
231
- });
282
+ // HypoPG not available - return basic recommendations without cost analysis
283
+ const basicRecommendations = candidates.map((c) => ({
284
+ table: c.table,
285
+ column: c.column,
286
+ suggestedIndex: c.indexDDL,
287
+ recommendation: "Sequential scan detected - consider adding this index",
288
+ }));
232
289
  return {
233
290
  queryAnalysis: true,
234
- hypopgAvailable: true,
291
+ hypopgAvailable: false,
235
292
  baselineCost,
236
- recommendations,
237
- hint: recommendations.length > 0
238
- ? `Found ${String(recommendations.length)} index(es) that would improve query performance. Review and create indexes as needed.`
239
- : "No indexes found that would significantly improve this query.",
293
+ recommendations: basicRecommendations,
294
+ hint: "Install HypoPG extension for precise cost improvement analysis. Basic recommendations provided based on EXPLAIN output.",
240
295
  };
241
296
  }
242
- // HypoPG not available - return basic recommendations without cost analysis
243
- const basicRecommendations = candidates.map((c) => ({
244
- table: c.table,
245
- column: c.column,
246
- suggestedIndex: c.indexDDL,
247
- recommendation: "Sequential scan detected - consider adding this index",
248
- }));
249
- return {
250
- queryAnalysis: true,
251
- hypopgAvailable: false,
252
- baselineCost,
253
- recommendations: basicRecommendations,
254
- hint: "Install HypoPG extension for precise cost improvement analysis. Basic recommendations provided based on EXPLAIN output.",
255
- };
256
- }
257
- // Fall back to table statistics-based recommendations
258
- const tableClause = parsed.table !== undefined ? `AND relname = '${parsed.table}'` : "";
259
- const schemaClause = `AND schemaname = '${schemaName}'`;
260
- const sql = `SELECT schemaname, relname as table_name,
297
+ // Fall back to table statistics-based recommendations
298
+ const tableClause = parsed.table !== undefined ? `AND relname = '${parsed.table}'` : "";
299
+ const schemaClause = `AND schemaname = '${schemaName}'`;
300
+ // P154: Validate table/schema existence in table-stats path
301
+ const validationError = await validatePerformanceTableExists(adapter, parsed.table, parsed.schema ?? "public");
302
+ if (validationError !== null) {
303
+ return { success: false, error: validationError };
304
+ }
305
+ const sql = `SELECT schemaname, relname as table_name,
261
306
  seq_scan, idx_scan,
262
307
  n_live_tup as row_count,
263
308
  pg_size_pretty(pg_table_size(relid)) as size,
@@ -270,22 +315,68 @@ export function createIndexRecommendationsTool(adapter) {
270
315
  WHERE seq_scan > 50 ${schemaClause} ${tableClause}
271
316
  ORDER BY seq_scan DESC
272
317
  LIMIT 20`;
273
- const result = await adapter.executeQuery(sql);
274
- // Coerce numeric fields to JavaScript numbers
275
- const recommendations = (result.rows ?? []).map((row) => ({
276
- ...row,
277
- seq_scan: toNum(row["seq_scan"]),
278
- idx_scan: toNum(row["idx_scan"]),
279
- row_count: toNum(row["row_count"]),
280
- }));
281
- return {
282
- queryAnalysis: false,
283
- recommendations,
284
- hint: "Based on table statistics. Provide a SQL query for query-specific recommendations.",
285
- };
318
+ const result = await adapter.executeQuery(sql);
319
+ // Coerce numeric fields to JavaScript numbers
320
+ const recommendations = (result.rows ?? []).map((row) => ({
321
+ ...row,
322
+ seq_scan: toNum(row["seq_scan"]),
323
+ idx_scan: toNum(row["idx_scan"]),
324
+ row_count: toNum(row["row_count"]),
325
+ }));
326
+ return {
327
+ queryAnalysis: false,
328
+ recommendations,
329
+ hint: "Based on table statistics. Provide a SQL query for query-specific recommendations.",
330
+ };
331
+ }
332
+ catch (error) {
333
+ return {
334
+ success: false,
335
+ error: formatPostgresError(error, {
336
+ tool: "pg_index_recommendations",
337
+ }),
338
+ };
339
+ }
286
340
  },
287
341
  };
288
342
  }
343
+ /**
344
+ * Recursively strip zero-value block stats, empty Triggers arrays,
345
+ * and empty Planning objects from EXPLAIN plan output to reduce payload noise.
346
+ */
347
+ function stripZeroValuePlanFields(obj) {
348
+ if (obj === null || obj === undefined)
349
+ return obj;
350
+ if (Array.isArray(obj)) {
351
+ const filtered = obj
352
+ .map(stripZeroValuePlanFields)
353
+ .filter((v) => v !== undefined);
354
+ return filtered.length > 0 ? filtered : undefined;
355
+ }
356
+ if (typeof obj === "object") {
357
+ const result = {};
358
+ for (const [key, value] of Object.entries(obj)) {
359
+ // Strip zero-value block stats
360
+ if (typeof value === "number" && value === 0 && key.includes("Blocks"))
361
+ continue;
362
+ // Strip empty Triggers arrays
363
+ if (key === "Triggers" && Array.isArray(value) && value.length === 0)
364
+ continue;
365
+ // Strip empty Planning objects
366
+ if (key === "Planning" &&
367
+ typeof value === "object" &&
368
+ value !== null &&
369
+ Object.keys(value).length === 0)
370
+ continue;
371
+ const cleaned = stripZeroValuePlanFields(value);
372
+ if (cleaned !== undefined) {
373
+ result[key] = cleaned;
374
+ }
375
+ }
376
+ return Object.keys(result).length > 0 ? result : undefined;
377
+ }
378
+ return obj;
379
+ }
289
380
  export function createQueryPlanCompareTool(adapter) {
290
381
  // Base schema for MCP visibility (no preprocess)
291
382
  const QueryPlanCompareSchemaBase = z.object({
@@ -328,59 +419,72 @@ export function createQueryPlanCompareTool(adapter) {
328
419
  annotations: readOnly("Query Plan Compare"),
329
420
  icons: getToolIcons("performance", readOnly("Query Plan Compare")),
330
421
  handler: async (params, _context) => {
331
- const parsed = QueryPlanCompareSchema.parse(params);
332
- const explainType = parsed.analyze === true
333
- ? "EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)"
334
- : "EXPLAIN (FORMAT JSON)";
335
- const [result1, result2] = await Promise.all([
336
- adapter.executeQuery(`${explainType} ${parsed.query1}`, parsed.params1 ?? []),
337
- adapter.executeQuery(`${explainType} ${parsed.query2}`, parsed.params2 ?? []),
338
- ]);
339
- const row1 = result1.rows?.[0];
340
- const row2 = result2.rows?.[0];
341
- const queryPlan1 = row1?.["QUERY PLAN"];
342
- const queryPlan2 = row2?.["QUERY PLAN"];
343
- const plan1 = queryPlan1?.[0];
344
- const plan2 = queryPlan2?.[0];
345
- const comparison = {
346
- query1: {
347
- planningTime: plan1?.["Planning Time"],
348
- executionTime: plan1?.["Execution Time"],
349
- totalCost: plan1?.["Plan"]?.["Total Cost"],
350
- sharedBuffersHit: plan1?.["Shared Hit Blocks"],
351
- sharedBuffersRead: plan1?.["Shared Read Blocks"],
352
- },
353
- query2: {
354
- planningTime: plan2?.["Planning Time"],
355
- executionTime: plan2?.["Execution Time"],
356
- totalCost: plan2?.["Plan"]?.["Total Cost"],
357
- sharedBuffersHit: plan2?.["Shared Hit Blocks"],
358
- sharedBuffersRead: plan2?.["Shared Read Blocks"],
359
- },
360
- analysis: {
361
- costDifference: plan1 && plan2
362
- ? Number(plan1["Plan"]?.["Total Cost"]) -
363
- Number(plan2["Plan"]?.["Total Cost"])
364
- : null,
365
- recommendation: "",
366
- },
367
- fullPlans: { plan1, plan2 },
368
- };
369
- if (comparison.analysis.costDifference !== null) {
370
- if (comparison.analysis.costDifference > 0) {
371
- comparison.analysis.recommendation =
372
- "Query 2 has lower estimated cost";
373
- }
374
- else if (comparison.analysis.costDifference < 0) {
375
- comparison.analysis.recommendation =
376
- "Query 1 has lower estimated cost";
377
- }
378
- else {
379
- comparison.analysis.recommendation =
380
- "Both queries have similar estimated cost";
422
+ try {
423
+ const parsed = QueryPlanCompareSchema.parse(params);
424
+ const explainType = parsed.analyze === true
425
+ ? "EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)"
426
+ : "EXPLAIN (FORMAT JSON)";
427
+ const [result1, result2] = await Promise.all([
428
+ adapter.executeQuery(`${explainType} ${parsed.query1}`, parsed.params1 ?? []),
429
+ adapter.executeQuery(`${explainType} ${parsed.query2}`, parsed.params2 ?? []),
430
+ ]);
431
+ const row1 = result1.rows?.[0];
432
+ const row2 = result2.rows?.[0];
433
+ const queryPlan1 = row1?.["QUERY PLAN"];
434
+ const queryPlan2 = row2?.["QUERY PLAN"];
435
+ const plan1 = queryPlan1?.[0];
436
+ const plan2 = queryPlan2?.[0];
437
+ const comparison = {
438
+ query1: {
439
+ planningTime: plan1?.["Planning Time"],
440
+ executionTime: plan1?.["Execution Time"],
441
+ totalCost: plan1?.["Plan"]?.["Total Cost"],
442
+ sharedBuffersHit: plan1?.["Shared Hit Blocks"],
443
+ sharedBuffersRead: plan1?.["Shared Read Blocks"],
444
+ },
445
+ query2: {
446
+ planningTime: plan2?.["Planning Time"],
447
+ executionTime: plan2?.["Execution Time"],
448
+ totalCost: plan2?.["Plan"]?.["Total Cost"],
449
+ sharedBuffersHit: plan2?.["Shared Hit Blocks"],
450
+ sharedBuffersRead: plan2?.["Shared Read Blocks"],
451
+ },
452
+ analysis: {
453
+ costDifference: plan1 && plan2
454
+ ? Number(plan1["Plan"]?.["Total Cost"]) -
455
+ Number(plan2["Plan"]?.["Total Cost"])
456
+ : null,
457
+ recommendation: "",
458
+ },
459
+ fullPlans: {
460
+ plan1: stripZeroValuePlanFields(plan1),
461
+ plan2: stripZeroValuePlanFields(plan2),
462
+ },
463
+ };
464
+ if (comparison.analysis.costDifference !== null) {
465
+ if (comparison.analysis.costDifference > 0) {
466
+ comparison.analysis.recommendation =
467
+ "Query 2 has lower estimated cost";
468
+ }
469
+ else if (comparison.analysis.costDifference < 0) {
470
+ comparison.analysis.recommendation =
471
+ "Query 1 has lower estimated cost";
472
+ }
473
+ else {
474
+ comparison.analysis.recommendation =
475
+ "Both queries have similar estimated cost";
476
+ }
381
477
  }
478
+ return comparison;
479
+ }
480
+ catch (error) {
481
+ return {
482
+ success: false,
483
+ error: formatPostgresError(error, {
484
+ tool: "pg_query_plan_compare",
485
+ }),
486
+ };
382
487
  }
383
- return comparison;
384
488
  },
385
489
  };
386
490
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/analysis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,+FAA+F;AAC/F,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAC5C,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEzD;;GAEG;AACH,KAAK,UAAU,+BAA+B,CAC5C,OAAwB,EACxB,MAAe;IAEf,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,CAC7C,kEAAkE,EAClE,CAAC,MAAM,CAAC,CACT,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,WAAW,MAAM,mFAAmF,CAAC;IAC9G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,8BAA8B,CAC3C,OAAwB,EACxB,KAAc,EACd,MAAe;IAEf,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3E,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,YAAY,GAAG,MAAM,IAAI,QAAQ,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAC5C,qFAAqF,EACrF,CAAC,YAAY,EAAE,KAAK,CAAC,CACtB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,UAAU,YAAY,IAAI,KAAK,0DAA0D,CAAC;QACnG,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAwB;IAExB,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;QACvC,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1D,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;KAC/D,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,EACtB,uBAAuB,CACxB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,yJAAyJ;QAC3J,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,QAAQ,CAAC,wBAAwB,CAAC;QAC/C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,8CAA8C;YACtF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAE/D,IAAI,WAAW,GAAG,cAAc,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,WAAW,IAAI,sBAAsB,MAAM,CAAC,MAAM,GAAG,CAAC;YACxD,CAAC;YAED,2DAA2D;YAC3D,MAAM,WAAW,GAAG,MAAM,+BAA+B,CACvD,OAAO,EACP,MAAM,CAAC,MAAM,CACd,CAAC;YACF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChD,CAAC;YAED,MAAM,GAAG,GAAG;;;;;gCAKc,WAAW;;0BAEjB,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,8CAA8C;YAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CACpC,CAAC,GAA4B,EAAE,EAAE,CAAC,CAAC;gBACjC,GAAG,GAAG;gBACN,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC1C,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aACzC,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,GAA4B;gBACxC,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,QAAQ;gBACR,IAAI,EAAE,qEAAqE;aAC5E,CAAC;YAEF,yCAAyC;YACzC,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,2DAA2D,WAAW,EAAE,CAAC;gBAC1F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzD,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAwB;IAExB,iDAAiD;IACjD,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC9D,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;QACnD,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACxE,CAAC,CAAC;IAEH,yDAAyD;IACzD,MAAM,0BAA0B,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACjC,qBAAqB;QACrB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAEnC,mDAAmD;IACnD,MAAM,WAAW,GAAG,KAAK,IAAsB,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CACvC,qDAAqD,CACtD,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,WAAW,GAAG,CAClB,IAAyC,EAC1B,EAAE;QACjB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC,CAAC;IASF,0DAA0D;IAC1D,MAAM,wBAAwB,GAAG,CAC/B,IAAyC,EACzC,KAAK,GAAG,CAAC,EACS,EAAE;QACpB,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,EAAE,CAAC;QAEhD,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAuB,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAuB,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;QAEpD,IACE,QAAQ,KAAK,UAAU;YACvB,YAAY,KAAK,SAAS;YAC1B,MAAM,KAAK,SAAS,EACpB,CAAC;YACD,8FAA8F;YAC9F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACnB,QAAQ,EAAE,mBAAmB,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAA0C,CAAC;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,+LAA+L;QACjM,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,8BAA8B,EAAE,iCAAiC;QAC9E,YAAY,EAAE,gCAAgC;QAC9C,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC;QAC9C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;gBAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;gBAExC,yDAAyD;gBACzD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACzD,MAAM,eAAe,GAAG,MAAM,WAAW,EAAE,CAAC;oBAE5C,6DAA6D;oBAC7D,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,CAC/C,yBAAyB,MAAM,CAAC,GAAG,EAAE,EACrC,WAAW,CACZ,CAAC;oBACF,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAElC,CAAC;oBACd,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAE3C,CAAC;oBACd,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAErD,8BAA8B;oBAC9B,MAAM,UAAU,GAAG,wBAAwB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAEhE,8DAA8D;oBAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;wBACrD,OAAO;4BACL,aAAa,EAAE,IAAI;4BACnB,eAAe;4BACf,YAAY;4BACZ,eAAe,EAAE,EAAE;4BACnB,IAAI,EAAE,mFAAmF;yBAC1F,CAAC;oBACJ,CAAC;oBAED,8EAA8E;oBAC9E,IAAI,eAAe,EAAE,CAAC;wBACpB,MAAM,eAAe,GAOf,EAAE,CAAC;wBAET,IAAI,CAAC;4BACH,0CAA0C;4BAC1C,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;4BAEpD,4BAA4B;4BAC5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gCACnC,IAAI,CAAC;oCACH,4BAA4B;oCAC5B,MAAM,OAAO,CAAC,YAAY,CACxB,+BAA+B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAC1E,CAAC;oCAEF,kEAAkE;oCAClE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,CAC/C,yBAAyB,MAAM,CAAC,GAAG,EAAE,EACrC,WAAW,CACZ,CAAC;oCACF,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAElC,CAAC;oCACd,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAE3C,CAAC;oCACd,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oCAErD,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;wCACzD,MAAM,cAAc,GAClB,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC;wCACvD,eAAe,CAAC,IAAI,CAAC;4CACnB,KAAK,EAAE,SAAS,CAAC,KAAK;4CACtB,MAAM,EAAE,SAAS,CAAC,MAAM;4CACxB,cAAc,EAAE,SAAS,CAAC,QAAQ;4CAClC,YAAY;4CACZ,YAAY;4CACZ,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;yCAC5D,CAAC,CAAC;oCACL,CAAC;oCAED,2BAA2B;oCAC3B,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;gCACtD,CAAC;gCAAC,MAAM,CAAC;oCACP,kCAAkC;oCAClC,MAAM,OAAO;yCACV,YAAY,CAAC,uBAAuB,CAAC;yCACrC,KAAK,CAAC,GAAG,EAAE;wCACV,YAAY;oCACd,CAAC,CAAC,CAAC;gCACP,CAAC;4BACH,CAAC;wBACH,CAAC;gCAAS,CAAC;4BACT,iBAAiB;4BACjB,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCAC7D,YAAY;4BACd,CAAC,CAAC,CAAC;wBACL,CAAC;wBAED,sBAAsB;wBACtB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;4BACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;4BACzC,OAAO,MAAM,GAAG,MAAM,CAAC;wBACzB,CAAC,CAAC,CAAC;wBAEH,OAAO;4BACL,aAAa,EAAE,IAAI;4BACnB,eAAe,EAAE,IAAI;4BACrB,YAAY;4BACZ,eAAe;4BACf,IAAI,EACF,eAAe,CAAC,MAAM,GAAG,CAAC;gCACxB,CAAC,CAAC,SAAS,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,uFAAuF;gCAChI,CAAC,CAAC,+DAA+D;yBACtE,CAAC;oBACJ,CAAC;oBAED,4EAA4E;oBAC5E,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClD,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,cAAc,EAAE,CAAC,CAAC,QAAQ;wBAC1B,cAAc,EACZ,uDAAuD;qBAC1D,CAAC,CAAC,CAAC;oBAEJ,OAAO;wBACL,aAAa,EAAE,IAAI;wBACnB,eAAe,EAAE,KAAK;wBACtB,YAAY;wBACZ,eAAe,EAAE,oBAAoB;wBACrC,IAAI,EAAE,yHAAyH;qBAChI,CAAC;gBACJ,CAAC;gBAED,sDAAsD;gBACtD,MAAM,WAAW,GACf,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,YAAY,GAAG,qBAAqB,UAAU,GAAG,CAAC;gBAExD,4DAA4D;gBAC5D,MAAM,eAAe,GAAG,MAAM,8BAA8B,CAC1D,OAAO,EACP,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,IAAI,QAAQ,CAC1B,CAAC;gBACF,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;oBAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;gBACpD,CAAC;gBAED,MAAM,GAAG,GAAG;;;;;;;;;;8CAU0B,YAAY,IAAI,WAAW;;iCAExC,CAAC;gBAE1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC/C,8CAA8C;gBAC9C,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAC7C,CAAC,GAA4B,EAAE,EAAE,CAAC,CAAC;oBACjC,GAAG,GAAG;oBACN,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAChC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAChC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;iBACnC,CAAC,CACH,CAAC;gBACF,OAAO;oBACL,aAAa,EAAE,KAAK;oBACpB,eAAe;oBACf,IAAI,EAAE,oFAAoF;iBAC3F,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;wBAChC,IAAI,EAAE,0BAA0B;qBACjC,CAAC;iBACH,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,GAAY;IAC5C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,GAAG;aACjB,GAAG,CAAC,wBAAwB,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAClC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YAC1E,+BAA+B;YAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACpE,SAAS;YACX,8BAA8B;YAC9B,IAAI,GAAG,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAClE,SAAS;YACX,+BAA+B;YAC/B,IACE,GAAG,KAAK,UAAU;gBAClB,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAE/B,SAAS;YACX,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAwB;IAExB,iDAAiD;IACjD,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/C,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,sBAAsB,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QAC1B,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,0BAA0B,CAAC,CAAC;IAE/B,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,iFAAiF;QACnF,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,0BAA0B,EAAE,iCAAiC;QAC1E,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC;QAC3C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,WAAW,GACf,MAAM,CAAC,OAAO,KAAK,IAAI;oBACrB,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,uBAAuB,CAAC;gBAE9B,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC3C,OAAO,CAAC,YAAY,CAClB,GAAG,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,EACjC,MAAM,CAAC,OAAO,IAAI,EAAE,CACrB;oBACD,OAAO,CAAC,YAAY,CAClB,GAAG,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,EACjC,MAAM,CAAC,OAAO,IAAI,EAAE,CACrB;iBACF,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC,YAAY,CAA0B,CAAC;gBACjE,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC,YAAY,CAA0B,CAAC;gBACjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAwC,CAAC;gBACrE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAwC,CAAC;gBAErE,MAAM,UAAU,GAAG;oBACjB,MAAM,EAAE;wBACN,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;wBACtC,aAAa,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACxC,SAAS,EACP,KAAK,EAAE,CAAC,MAAM,CACf,EAAE,CAAC,YAAY,CAAC;wBACjB,gBAAgB,EAAE,KAAK,EAAE,CAAC,mBAAmB,CAAC;wBAC9C,iBAAiB,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC;qBACjD;oBACD,MAAM,EAAE;wBACN,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;wBACtC,aAAa,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACxC,SAAS,EACP,KAAK,EAAE,CAAC,MAAM,CACf,EAAE,CAAC,YAAY,CAAC;wBACjB,gBAAgB,EAAE,KAAK,EAAE,CAAC,mBAAmB,CAAC;wBAC9C,iBAAiB,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC;qBACjD;oBACD,QAAQ,EAAE;wBACR,cAAc,EACZ,KAAK,IAAI,KAAK;4BACZ,CAAC,CAAC,MAAM,CACH,KAAK,CAAC,MAAM,CAA6B,EAAE,CAAC,YAAY,CAAC,CAC3D;gCACD,MAAM,CACH,KAAK,CAAC,MAAM,CAA6B,EAAE,CAAC,YAAY,CAAC,CAC3D;4BACH,CAAC,CAAC,IAAI;wBACV,cAAc,EAAE,EAAE;qBACnB;oBACD,SAAS,EAAE;wBACT,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;wBACtC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;qBACvC;iBACF,CAAC;gBAEF,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;oBAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;wBAC3C,UAAU,CAAC,QAAQ,CAAC,cAAc;4BAChC,kCAAkC,CAAC;oBACvC,CAAC;yBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;wBAClD,UAAU,CAAC,QAAQ,CAAC,cAAc;4BAChC,kCAAkC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,QAAQ,CAAC,cAAc;4BAChC,0CAA0C,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAED,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;wBAChC,IAAI,EAAE,uBAAuB;qBAC9B,CAAC;iBACH,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/explain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AASpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAqB1E;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAqBhB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAqBhB"}
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/explain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAUpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAwC1E;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwChB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwChB"}