diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs index 3590bcd6..8e971d1f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs @@ -164,6 +164,10 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts /// File type for execution plan. This will be the file type of the editor when the user opens the graph file /// public string GraphFileType { get; set; } + /// + /// Index of the execution plan in the file content + /// + public int PlanIndexInFile { get; set; } } public class Badge diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs index e11f2da3..55c2920e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs @@ -19,14 +19,15 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan public static List CreateShowPlanGraph(string xml, string fileName) { ShowPlanGraph[] graphs = ShowPlanGraph.ParseShowPlanXML(xml, ShowPlan.ShowPlanType.Unknown); - return graphs.Select(g => new ExecutionPlanGraph + return graphs.Select((g, index) => new ExecutionPlanGraph { Root = ConvertShowPlanTreeToExecutionPlanTree(g.Root), Query = g.Statement, GraphFile = new ExecutionPlanGraphInfo { GraphFileContent = xml, - GraphFileType = "xml" + GraphFileType = "xml", + PlanIndexInFile = index }, Recommendations = ParseRecommendations(g, fileName) }).ToList(); diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanService.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanService.cs index 3f939513..68467724 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanService.cs @@ -78,10 +78,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan { try { - var firstGraphSet = ShowPlanGraph.ParseShowPlanXML(requestParams.FirstExecutionPlanGraphInfo.GraphFileContent, ShowPlanType.Unknown); + var nodeBuilder = new XmlPlanNodeBuilder(ShowPlanType.Unknown); + var firstPlanXml = nodeBuilder.GetSingleStatementXml(requestParams.FirstExecutionPlanGraphInfo.GraphFileContent, requestParams.FirstExecutionPlanGraphInfo.PlanIndexInFile); + var firstGraphSet = ShowPlanGraph.ParseShowPlanXML(firstPlanXml, ShowPlanType.Unknown); var firstRootNode = firstGraphSet?[0]?.Root; - var secondGraphSet = ShowPlanGraph.ParseShowPlanXML(requestParams.SecondExecutionPlanGraphInfo.GraphFileContent, ShowPlanType.Unknown); + var secondPlanXml = nodeBuilder.GetSingleStatementXml(requestParams.SecondExecutionPlanGraphInfo.GraphFileContent, requestParams.SecondExecutionPlanGraphInfo.PlanIndexInFile); + var secondGraphSet = ShowPlanGraph.ParseShowPlanXML(secondPlanXml, ShowPlanType.Unknown); var secondRootNode = secondGraphSet?[0]?.Root; var manager = new SkeletonManager();