From 848e2434b65c90789261f16ddcfbd0241d2101fb Mon Sep 17 00:00:00 2001 From: Brett Saviano Date: Tue, 9 Dec 2025 08:34:37 -0500 Subject: [PATCH] Fix `Show Plan` for IRIS 2026.1+ --- src/commands/showPlanPanel.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/commands/showPlanPanel.ts b/src/commands/showPlanPanel.ts index 18353779..d8b9de3d 100644 --- a/src/commands/showPlanPanel.ts +++ b/src/commands/showPlanPanel.ts @@ -111,7 +111,7 @@ export async function showPlanWebview(args: { const planXML: string = await api .actionQuery("SELECT %SYSTEM.QUERY_PLAN(?,,,,,?) XML", [ args.sqlQuery.trimEnd(), - `{"selectmode":"${args.selectMode}"${args.imports.length ? `,"packages":"$LFS(\\"${[...new Set(args.imports)].join(",")}\\")"` : ""}${args.includes.length ? `,"includeFiles":"$LFS(\\"${[...new Set(args.includes)].join(",")}\\")"` : ""}}`, + `{${!lt(api.config.serverVersion, "2026.1.0") ? '"format":"LINEAR-XML",' : ""}"selectmode":"${args.selectMode}"${args.imports.length ? `,"packages":"$LFS(\\"${[...new Set(args.imports)].join(",")}\\")"` : ""}${args.includes.length ? `,"includeFiles":"$LFS(\\"${[...new Set(args.includes)].join(",")}\\")"` : ""}}`, ]) .then((data) => data?.result?.content[0]?.XML) .catch((error) => { @@ -134,8 +134,8 @@ export async function showPlanWebview(args: { switch (planChild.nodeName) { case "sql": planHTML += '

Statement Text

\n
\n'; - for (const line of planChild.textContent.trim().split(/\r?\n/)) { - planHTML += `${htmlEncode(line.trim())}\n`; + for (const line of args.sqlQuery.trimEnd().split(/\r?\n/)) { + planHTML += `${htmlEncode(line.trimEnd())}\n`; } planHTML += `
\n
\n`; break; @@ -145,18 +145,15 @@ export async function showPlanWebview(args: { case "info": planHTML += `

Information

\n${formatTextBlock(planChild.textContent)}
\n`; break; - case "cost": + case "cost": { planHTML += `

Relative Cost `; // The plan might not have a cost - planHTML += - planChild.attributes.length && - planChild.attributes.item(0).nodeName == "value" && - +planChild.attributes.item(0).value - ? `= ${planChild.attributes.item(0).value}` - : "Unavailable"; + const cost = planChild.attributes.getNamedItem("value")?.value; + planHTML += +cost ? `= ${cost}` : "Unavailable"; planHTML += "

\n"; capturePlan = true; break; + } case "#text": if (capturePlan) { planText += planChild.textContent;