From 83fc64444a4856fda49b7b1bffe3d3267685463b Mon Sep 17 00:00:00 2001 From: Lewis Sanchez <87730006+lewis-sanchez@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:26:02 -0700 Subject: [PATCH] Fix missing index include column list (#2220) --- .../ExecutionPlan/ExecutionPlanGraphUtils.cs | 8 ++++++-- .../ExecutionPlan/ShowPlan/XmlPlanNodeBuilder.cs | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs index cc8be65e..e79f3dac 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs @@ -442,12 +442,14 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan private static List ParseRecommendations(ShowPlanGraph g, string fileName) { - return g.Description.MissingIndices.Select(mi => new ExecutionPlanRecommendation + var recommendations = g.Description.MissingIndices.Select(mi => new ExecutionPlanRecommendation { DisplayString = mi.MissingIndexCaption, Query = mi.MissingIndexQueryText, QueryWithDescription = ParseMissingIndexQueryText(fileName, mi.MissingIndexImpact, mi.MissingIndexDatabase, mi.MissingIndexQueryText) }).ToList(); + + return recommendations; } /// @@ -460,7 +462,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan /// private static string ParseMissingIndexQueryText(string fileName, string impact, string database, string query) { - return $@"{SR.MissingIndexDetailsTitle(fileName, impact)} + var missingIndexQueryText = $@"{SR.MissingIndexDetailsTitle(fileName, impact)} /* {string.Format("USE {0}", database)} @@ -469,6 +471,8 @@ GO GO */ "; + + return missingIndexQueryText; } private static string GetPropertyDisplayValue(PropertyValue? property) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/XmlPlanNodeBuilder.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/XmlPlanNodeBuilder.cs index 7f9588f9..b504285d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/XmlPlanNodeBuilder.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/XmlPlanNodeBuilder.cs @@ -429,7 +429,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan string includeColumns = string.Empty; // populate index columns and include columns - XmlNodeList columnGroups = missingIndex.SelectNodes("shp:ColumnGroup", nsMgr); + XmlNodeList columnGroups = missingIndex.SelectNodes("descendant::shp:ColumnGroup", nsMgr); foreach (XmlNode columnGroup in columnGroups) { foreach (XmlNode column in columnGroup.ChildNodes) @@ -447,13 +447,14 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan if (includeColumns == string.Empty) includeColumns = columnName; else - includeColumns = $"{indexColumns},{columnName}"; + includeColumns = $"{includeColumns},{columnName}"; } } } // for memory optimized we just alter the existing index where as for non optimized tables we create a new one. - string queryText = string.Format((memoryOptimzed) ? addIndexTemplate : createIndexTemplate, schemaName, tableName, indexColumns); + var template = (memoryOptimzed) ? addIndexTemplate : createIndexTemplate; + string queryText = string.Format(template, schemaName, tableName, indexColumns); if (!string.IsNullOrEmpty(includeColumns)) { queryText += string.Format(includeTemplate, includeColumns);