Adding node overlays to execution plans (#1451)

* Adding node overlays to execution plans

* Adding critical warnings and parallelism

* adding critical warning, badge type enum

* Renaming badge type class

* Adding explicit values to Badge Type
This commit is contained in:
Aasim Khan
2022-04-08 15:20:54 -07:00
committed by GitHub
parent 1ce3647565
commit 454e4a4671
7 changed files with 104 additions and 2 deletions

View File

@@ -74,6 +74,10 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts
public string[] Subtext { get; set; }
public List<ExecutionPlanNode> Children { get; set; }
public List<ExecutionPlanEdges> Edges { get; set; }
/// <summary>
/// Add badge icon to nodes like warnings and parallelism
/// </summary>
public List<Badge> Badges { get; set; }
}
public class ExecutionPlanGraphPropertyBase
@@ -161,4 +165,24 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts
/// </summary>
public string GraphFileType { get; set; }
}
public class Badge
{
/// <summary>
/// Type of the node overlay. This determines the icon that is displayed for it
/// </summary>
public BadgeType Type { get; set; }
/// <summary>
/// Text to display for the overlay tooltip
/// </summary>
public string Tooltip { get; set; }
}
public enum BadgeType
{
WARNING = 0,
CRITICALWARNING = 1,
PARALLELISM = 2
}
}

View File

@@ -46,11 +46,46 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
Properties = GetProperties(currentNode.Properties),
Children = currentNode.Children.Select(x => ConvertShowPlanTreeToExecutionPlanTree(x)).ToList(),
Edges = currentNode.Edges.Select(x => ConvertShowPlanEdgeToExecutionPlanEdge(x)).ToList(),
Badges = GenerateNodeOverlay(currentNode),
Name = currentNode.DisplayName,
ElapsedTimeInMs = currentNode.ElapsedTimeInMs
};
}
public static List<Badge> GenerateNodeOverlay(Node currentNode)
{
List<Badge> overlays = new List<Badge>();
if (currentNode.HasWarnings)
{
if (currentNode.HasCriticalWarnings)
{
overlays.Add(new Badge
{
Type = BadgeType.CRITICALWARNING,
Tooltip = SR.WarningOverlayTooltip
});
}
else
{
overlays.Add(new Badge
{
Type = BadgeType.WARNING,
Tooltip = SR.WarningOverlayTooltip
});
}
}
if (currentNode.IsParallel)
{
overlays.Add(new Badge
{
Type = BadgeType.PARALLELISM,
Tooltip = SR.ParallelismOverlayTooltip
});
}
return overlays;
}
public static ExecutionPlanEdges ConvertShowPlanEdgeToExecutionPlanEdge(Edge edge)
{
return new ExecutionPlanEdges

View File

@@ -161,7 +161,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
/// <summary>
/// Gets the value that indicates whether the Node has critical warnings.
/// </summary>
private bool HasCriticalWarnings
public bool HasCriticalWarnings
{
get
{

View File

@@ -8445,6 +8445,22 @@ namespace Microsoft.SqlTools.ServiceLayer
}
}
public static string WarningOverlayTooltip
{
get
{
return Keys.GetString(Keys.WarningOverlayTooltip);
}
}
public static string ParallelismOverlayTooltip
{
get
{
return Keys.GetString(Keys.ParallelismOverlayTooltip);
}
}
public static string TableEditPathNotProvidedException
{
get
@@ -12664,6 +12680,12 @@ namespace Microsoft.SqlTools.ServiceLayer
public const string MissingIndexDetailsTitle = "MissingIndexDetailsTitle";
public const string WarningOverlayTooltip = "WarningOverlayTooltip";
public const string ParallelismOverlayTooltip = "ParallelismOverlayTooltip";
public const string TableNotInitializedException = "TableNotInitializedException";

View File

@@ -4619,6 +4619,14 @@ The Query Processor estimates that implementing the following index could improv
<comment>title of missing index details.
Parameters: 0 - fileName (string), 1 - impact (string) </comment>
</data>
<data name="WarningOverlayTooltip" xml:space="preserve">
<value>Warnings</value>
<comment>tooltip text for node warning overlay</comment>
</data>
<data name="ParallelismOverlayTooltip" xml:space="preserve">
<value>Parallel Execution</value>
<comment>tooltip text for node parallelism overlay</comment>
</data>
<data name="TableNotInitializedException" xml:space="preserve">
<value>Initialization is not properly done for table with id &apos;{0}&apos;</value>
<comment>.

View File

@@ -2223,7 +2223,10 @@ ActualOfEstimated(string actual, string estimated, decimal percent) = {0} of\n{1
MissingIndexFormat(string impact, string queryText) = Missing Index (Impact {0}): {1}
;title of missing index details
MissingIndexDetailsTitle(string fileName, string impact) = /*\r\nMissing Index Details from {0}\r\nThe Query Processor estimates that implementing the following index could improve the query cost by {1}%.\r\n*/
;tooltip text for node warning overlay
WarningOverlayTooltip = Warnings
;tooltip text for node parallelism overlay
ParallelismOverlayTooltip = Parallel Execution
############################################################################
# Table Designer

View File

@@ -5993,6 +5993,16 @@ The Query Processor estimates that implementing the following index could improv
<target state="new">New Clause</target>
<note></note>
</trans-unit>
<trans-unit id="WarningOverlayTooltip">
<source>Warnings</source>
<target state="new">Warnings</target>
<note>tooltip text for node warning overlay</note>
</trans-unit>
<trans-unit id="ParallelismOverlayTooltip">
<source>Parallel Execution</source>
<target state="new">Parallel Execution</target>
<note>tooltip text for node parallelism overlay</note>
</trans-unit>
</body>
</file>
</xliff>