Adding property type and rules to compare properties in Execution Plans (#1522)

* Adding plan index in file info

* Adding basic framework for prop comparison

* Remoing none and and fixing some better values

* Fixing file formatting

* Fixing some formatting

* Fixing casing

* Fixing compilation

* fixing compilation error
This commit is contained in:
Aasim Khan
2022-05-31 17:15:43 -07:00
committed by GitHub
parent 0c37dc50f9
commit fed1cef7bf
5 changed files with 159 additions and 52 deletions

View File

@@ -4,6 +4,7 @@
//
using System.Collections.Generic;
using Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan;
namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts
{
@@ -103,6 +104,14 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts
/// </summary>
/// <value></value>
public string DisplayValue { get; set; }
/// <summary>
/// Indicates what kind of value is better amongst 2 values of the same property
/// </summary>
public BetterValue BetterValue { get; set; }
/// <summary>
/// Indicates the data type of the property
/// </summary>
public PropertyValueDataType DataType { get; set; }
}
public class NestedExecutionPlanGraphProperty : ExecutionPlanGraphPropertyBase
@@ -185,8 +194,16 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.Contracts
public enum BadgeType
{
WARNING = 0,
CRITICALWARNING = 1,
PARALLELISM = 2
Warning = 0,
CriticalWarning = 1,
Parallelism = 2
}
public enum PropertyValueDataType
{
Number = 0,
String = 1,
Boolean = 2,
Nested = 3
}
}

View File

@@ -63,7 +63,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
{
overlays.Add(new Badge
{
Type = BadgeType.CRITICALWARNING,
Type = BadgeType.CriticalWarning,
Tooltip = SR.WarningOverlayTooltip
});
}
@@ -71,7 +71,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
{
overlays.Add(new Badge
{
Type = BadgeType.WARNING,
Type = BadgeType.Warning,
Tooltip = SR.WarningOverlayTooltip
});
}
@@ -80,7 +80,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
{
overlays.Add(new Badge
{
Type = BadgeType.PARALLELISM,
Type = BadgeType.Parallelism,
Tooltip = SR.ParallelismOverlayTooltip
});
}
@@ -105,7 +105,32 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
var complexProperty = prop.Value as ExpandableObjectWrapper;
if (complexProperty == null)
{
if(!prop.IsBrowsable)
{
continue;
}
var propertyValue = prop.DisplayValue;
var propertyDataType = PropertyValueDataType.String;
switch (prop.Value)
{
case string stringValue:
propertyDataType = PropertyValueDataType.String;
break;
case int integerValue:
case long longIntegerValue:
case uint unsignedIntegerValue:
case ulong unsignedLongValue:
case float floatValue:
case double doubleValue:
propertyDataType = PropertyValueDataType.Number;
break;
case bool booleanValue:
propertyDataType = PropertyValueDataType.Boolean;
break;
default:
propertyDataType = PropertyValueDataType.String;
break;
}
propsList.Add(new ExecutionPlanGraphProperty()
{
Name = prop.DisplayName,
@@ -113,7 +138,9 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
ShowInTooltip = prop.ShowInTooltip,
DisplayOrder = prop.DisplayOrder,
PositionAtBottom = prop.IsLongString,
DisplayValue = GetPropertyDisplayValue(prop)
DisplayValue = GetPropertyDisplayValue(prop),
BetterValue = prop.BetterValue,
DataType = propertyDataType
});
}
else
@@ -126,7 +153,9 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan
ShowInTooltip = prop.ShowInTooltip,
DisplayOrder = prop.DisplayOrder,
PositionAtBottom = prop.IsLongString,
DisplayValue = GetPropertyDisplayValue(prop)
DisplayValue = GetPropertyDisplayValue(prop),
BetterValue = prop.BetterValue,
DataType = PropertyValueDataType.Nested
});
}

View File

@@ -283,5 +283,33 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
private bool longString = false;
}
public sealed class BetterValueAttribute : Attribute
{
public BetterValueAttribute()
{
this.value = BetterValue.None;
}
public BetterValueAttribute(BetterValue value)
{
this.value = value;
}
public BetterValue Value
{
get { return this.value; }
}
private BetterValue value;
}
public enum BetterValue
{
LowerNumber = 0,
HigherNumber = 1,
True = 2,
False = 3,
None = 4
}
#endregion
}

View File

@@ -62,45 +62,44 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[TypeConverter(typeof(DataSizeTypeConverter))]
public int AvgRowSize { get { return 0; } }
[ShowInToolTip, DisplayOrder(7), DisplayNameDescription(SR.Keys.CachedPlanSize, SR.Keys.CachedPlanSizeDescription)]
[ShowInToolTip, DisplayOrder(7), DisplayNameDescription(SR.Keys.CachedPlanSize, SR.Keys.CachedPlanSizeDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(KBSizeTypeConverter))]
public int CachedPlanSize { get { return 0; } }
[ShowInToolTip, DisplayOrder(7), DisplayNameDescription(SR.Keys.UsePlan)]
[ShowInToolTip, DisplayOrder(7), DisplayNameDescription(SR.Keys.UsePlan), BetterValue(BetterValue.True)]
public bool UsePlan { get { return false; } }
[ShowInToolTip, DisplayOrder(7), DisplayNameDescription(SR.Keys.ContainsInlineScalarTsqlUdfs)]
public bool ContainsInlineScalarTsqlUdfs { get { return false; } }
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.EstimatedIoCost, SR.Keys.EstimatedIoCostDescription)]
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.EstimatedIoCost, SR.Keys.EstimatedIoCostDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateIO { get { return 0; } }
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.DegreeOfParallelism, SR.Keys.DegreeOfParallelismDescription)]
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.DegreeOfParallelism, SR.Keys.DegreeOfParallelismDescription), BetterValue(BetterValue.HigherNumber)]
public int DegreeOfParallelism { get { return 0; } }
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.EffectiveDegreeOfParallelism, SR.Keys.EffectiveDegreeOfParallelismDescription)]
[ShowInToolTip, DisplayOrder(8), DisplayNameDescription(SR.Keys.EffectiveDegreeOfParallelism, SR.Keys.EffectiveDegreeOfParallelismDescription), BetterValue(BetterValue.HigherNumber)]
public int EffectiveDegreeOfParallelism { get { return 0; } }
[ShowInToolTip, DisplayOrder(9), DisplayNameDescription(SR.Keys.EstimatedCpuCost, SR.Keys.EstimatedCpuCostDescription)]
[ShowInToolTip, DisplayOrder(9), DisplayNameDescription(SR.Keys.EstimatedCpuCost, SR.Keys.EstimatedCpuCostDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateCPU { get { return 0; } }
[ShowInToolTip, DisplayOrder(9), DisplayNameDescription(SR.Keys.MemoryGrant, SR.Keys.MemoryGrantDescription)]
[ShowInToolTip, DisplayOrder(9), DisplayNameDescription(SR.Keys.MemoryGrant, SR.Keys.MemoryGrantDescription), BetterValue(BetterValue.HigherNumber)]
[TypeConverter(typeof(KBSizeTypeConverter))]
public ulong MemoryGrant { get { return 0; } }
[DisplayOrder(10), DisplayNameDescription(SR.Keys.ParameterList, SR.Keys.ParameterListDescription)]
public object ParameterList { get { return null; } }
[ShowInToolTip, DisplayOrder(10), DisplayNameDescription(SR.Keys.NumberOfExecutions, SR.Keys.NumberOfExecutionsDescription)]
[ShowInToolTip, DisplayOrder(10), DisplayNameDescription(SR.Keys.NumberOfExecutions, SR.Keys.NumberOfExecutionsDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double ActualExecutions { get { return 0; } }
[ShowInToolTip, DisplayOrder(10), DisplayNameDescription(SR.Keys.EstimatedNumberOfExecutions, SR.Keys.EstimatedNumberOfExecutionsDescription)]
[ShowInToolTip, DisplayOrder(10), DisplayNameDescription(SR.Keys.EstimatedNumberOfExecutions, SR.Keys.EstimatedNumberOfExecutionsDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateExecutions { get { return 0; } }
[ShowInToolTip(LongString = true), DisplayOrder(12), DisplayNameDescription(SR.Keys.ObjectShort, SR.Keys.ObjectDescription)]
@@ -112,83 +111,83 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[DisplayOrder(12), DisplayNameDescription(SR.Keys.OperationArgumentShort, SR.Keys.OperationArgumentDescription)]
public string Argument { get { return null; } }
[ShowInToolTip, DisplayOrder(111), DisplayNameDescription(SR.Keys.ActualRebinds, SR.Keys.ActualRebindsDescription)]
[ShowInToolTip, DisplayOrder(111), DisplayNameDescription(SR.Keys.ActualRebinds, SR.Keys.ActualRebindsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualRebinds { get { return null; } }
[ShowInToolTip, DisplayOrder(112), DisplayNameDescription(SR.Keys.ActualRewinds, SR.Keys.ActualRewindsDescription)]
[ShowInToolTip, DisplayOrder(112), DisplayNameDescription(SR.Keys.ActualRewinds, SR.Keys.ActualRewindsDescription), BetterValue(BetterValue.HigherNumber)]
public object ActualRewinds { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLocallyAggregatedRows, SR.Keys.ActualLocallyAggregatedRowsDescription)]
public object ActualLocallyAggregatedRows { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualElapsedms, SR.Keys.ActualElapsedmsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualElapsedms, SR.Keys.ActualElapsedmsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualElapsedms { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualCPUms, SR.Keys.ActualCPUmsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualCPUms, SR.Keys.ActualCPUmsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualCPUms { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualScans, SR.Keys.ActualScansDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualScans, SR.Keys.ActualScansDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualScans { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLogicalReads, SR.Keys.ActualLogicalReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLogicalReads, SR.Keys.ActualLogicalReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualLogicalReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPhysicalReads, SR.Keys.ActualPhysicalReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPhysicalReads, SR.Keys.ActualPhysicalReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualPhysicalReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPageServerReads, SR.Keys.ActualPageServerReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPageServerReads, SR.Keys.ActualPageServerReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualPageServerReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualReadAheads, SR.Keys.ActualReadAheadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualReadAheads, SR.Keys.ActualReadAheadsDescription), BetterValue(BetterValue.HigherNumber)]
public object ActualReadAheads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPageServerReadAheads, SR.Keys.ActualPageServerReadAheadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualPageServerReadAheads, SR.Keys.ActualPageServerReadAheadsDescription), BetterValue(BetterValue.HigherNumber)]
public object ActualPageServerReadAheads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobLogicalReads, SR.Keys.ActualLobLogicalReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobLogicalReads, SR.Keys.ActualLobLogicalReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualLobLogicalReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPhysicalReads, SR.Keys.ActualLobPhysicalReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPhysicalReads, SR.Keys.ActualLobPhysicalReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualLobPhysicalReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPageServerReads, SR.Keys.ActualLobPageServerReadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPageServerReads, SR.Keys.ActualLobPageServerReadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualLobPageServerReads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobReadAheads, SR.Keys.ActualLobReadAheadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobReadAheads, SR.Keys.ActualLobReadAheadsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualLobReadAheads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPageServerReadAheads, SR.Keys.ActualLobPageServerReadAheadsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualLobPageServerReadAheads, SR.Keys.ActualLobPageServerReadAheadsDescription), BetterValue(BetterValue.HigherNumber)]
public object ActualLobPageServerReadAheads { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualIOStatistics, SR.Keys.ActualIOStatisticsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualIOStatistics, SR.Keys.ActualIOStatisticsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualIOStatistics { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualTimeStatistics, SR.Keys.ActualTimeStatisticsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualTimeStatistics, SR.Keys.ActualTimeStatisticsDescription), BetterValue(BetterValue.LowerNumber)]
public object ActualTimeStatistics { get { return null; } }
[DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualMemoryGrantStats, SR.Keys.ActualMemoryGrantStats)]
[DisplayOrder(221), DisplayNameDescription(SR.Keys.ActualMemoryGrantStats, SR.Keys.ActualMemoryGrantStats), BetterValue(BetterValue.HigherNumber)]
public object ActualMemoryGrantStats { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcRowCount, SR.Keys.HpcRowCountDescription)]
public object HpcRowCount { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcKernelElapsedUs, SR.Keys.HpcKernelElapsedUsDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcKernelElapsedUs, SR.Keys.HpcKernelElapsedUsDescription), BetterValue(BetterValue.LowerNumber)]
public object HpcKernelElapsedUs { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcHostToDeviceBytes, SR.Keys.HpcHostToDeviceBytesDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcHostToDeviceBytes, SR.Keys.HpcHostToDeviceBytesDescription), BetterValue(BetterValue.LowerNumber)]
public object HpcHostToDeviceBytes { get { return null; } }
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcDeviceToHostBytes, SR.Keys.HpcDeviceToHostBytesDescription)]
[ShowInToolTip, DisplayOrder(221), DisplayNameDescription(SR.Keys.HpcDeviceToHostBytes, SR.Keys.HpcDeviceToHostBytesDescription), BetterValue(BetterValue.LowerNumber)]
public object HpcDeviceToHostBytes { get { return null; } }
[DisplayOrder(221), DisplayNameDescription(SR.Keys.InputMemoryGrant, SR.Keys.InputMemoryGrant)]
[DisplayOrder(221), DisplayNameDescription(SR.Keys.InputMemoryGrant, SR.Keys.InputMemoryGrant), BetterValue(BetterValue.LowerNumber)]
public object InputMemoryGrant { get { return null; } }
[DisplayOrder(221), DisplayNameDescription(SR.Keys.OutputMemoryGrant, SR.Keys.OutputMemoryGrant)]
[DisplayOrder(221), DisplayNameDescription(SR.Keys.OutputMemoryGrant, SR.Keys.OutputMemoryGrant), BetterValue(BetterValue.LowerNumber)]
public object OutputMemoryGrant { get { return null; } }
[DisplayOrder(221), DisplayNameDescription(SR.Keys.UsedMemoryGrant, SR.Keys.UsedMemoryGrant)]
[DisplayOrder(221), DisplayNameDescription(SR.Keys.UsedMemoryGrant, SR.Keys.UsedMemoryGrant), BetterValue(BetterValue.LowerNumber)]
public object UsedMemoryGrant { get { return null; } }
[ShowInToolTip, DisplayOrder(2), DisplayNameDescription(SR.Keys.IsGraphDBTransitiveClosure, SR.Keys.IsGraphDBTransitiveClosureDescription)]
@@ -218,23 +217,23 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[TypeConverter(typeof(FloatTypeConverter))]
public double StatementEstRows { get { return 0; } }
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedNumberOfRowsForAllExecutions, SR.Keys.EstimatedNumberOfRowsForAllExecutionsDescription)]
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedNumberOfRowsForAllExecutions, SR.Keys.EstimatedNumberOfRowsForAllExecutionsDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateRowsAllExecs { get { return 0; } }
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedNumberOfRowsForAllExecutions, SR.Keys.EstimatedNumberOfRowsForAllExecutionsDescription)]
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedNumberOfRowsForAllExecutions, SR.Keys.EstimatedNumberOfRowsForAllExecutionsDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double StatementEstRowsAllExecs { get { return 0; } }
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedRowsRead, SR.Keys.EstimatedRowsReadDescription)]
[ShowInToolTip, DisplayOrder(100), DisplayNameDescription(SR.Keys.EstimatedRowsRead, SR.Keys.EstimatedRowsReadDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimatedRowsRead { get { return 0; } }
[DisplayOrder(101), DisplayNameDescription(SR.Keys.EstimatedRebinds, SR.Keys.EstimatedRebindsDescription)]
[DisplayOrder(101), DisplayNameDescription(SR.Keys.EstimatedRebinds, SR.Keys.EstimatedRebindsDescription), BetterValue(BetterValue.LowerNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateRebinds { get { return 0; } }
[DisplayOrder(102), DisplayNameDescription(SR.Keys.EstimatedRewinds, SR.Keys.EstimatedRewindsDescription)]
[DisplayOrder(102), DisplayNameDescription(SR.Keys.EstimatedRewinds, SR.Keys.EstimatedRewindsDescription), BetterValue(BetterValue.HigherNumber)]
[TypeConverter(typeof(FloatTypeConverter))]
public double EstimateRewinds { get { return 0; } }
@@ -247,7 +246,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[ShowInToolTip(LongString = true), DisplayOrder(202), DisplayNameDescription(SR.Keys.Warnings, SR.Keys.WarningsDescription)]
public object Warnings { get { return null; } }
[DisplayOrder(203), DisplayNameDescription(SR.Keys.Parallel, SR.Keys.ParallelDescription)]
[DisplayOrder(203), DisplayNameDescription(SR.Keys.Parallel, SR.Keys.ParallelDescription), BetterValue(BetterValue.True)]
public bool Parallel { get { return false; } }
[DisplayOrder(204), DisplayNameDescription(SR.Keys.SetOptions, SR.Keys.SetOptionsDescription)]
@@ -259,7 +258,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[DisplayOrder(206), DisplayNameDescription(SR.Keys.StatementOptmEarlyAbortReason)]
public string StatementOptmEarlyAbortReason { get { return null; } }
[DisplayOrder(211), DisplayNameDescription(SR.Keys.MemoryFractions, SR.Keys.MemoryFractionsDescription)]
[DisplayOrder(211), DisplayNameDescription(SR.Keys.MemoryFractions, SR.Keys.MemoryFractionsDescription), BetterValue(BetterValue.LowerNumber)]
public object MemoryFractions { get { return null; } }
[DisplayOrder(211), DisplayNameDescription(SR.Keys.MemoryFractionsInput, SR.Keys.MemoryFractionsInputDescription)]
@@ -370,10 +369,10 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[ShowInToolTip, DisplayOrder(150), DisplayNameDescription(SR.Keys.Partitioned, SR.Keys.PartitionedDescription)]
public object Partitioned { get { return null; } }
[DisplayOrder(156), DisplayNameDescription(SR.Keys.PartitionsAccessed)]
[DisplayOrder(156), DisplayNameDescription(SR.Keys.PartitionsAccessed), BetterValue(BetterValue.LowerNumber)]
public object PartitionsAccessed { get { return null; } }
[ShowInToolTip, DisplayOrder(152), DisplayNameDescription(SR.Keys.PartitionCount)]
[ShowInToolTip, DisplayOrder(152), DisplayNameDescription(SR.Keys.PartitionCount), BetterValue(BetterValue.LowerNumber)]
public object PartitionCount { get { return null; } }
[ShowInToolTip(LongString = true), DisplayOrder(203), DisplayNameDescription(SR.Keys.TieColumns, SR.Keys.TieColumnsDescription)]
@@ -442,7 +441,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[ShowInToolTip, DisplayOrder(203), DisplayNameDescription(SR.Keys.RowCount)]
public bool RowCount { get { return false; } }
[DisplayOrder(6), DisplayNameDescription(SR.Keys.Optimized)]
[DisplayOrder(6), DisplayNameDescription(SR.Keys.Optimized), BetterValue(BetterValue.True)]
public bool Optimized { get { return false; } }
[DisplayOrder(6), DisplayNameDescription(SR.Keys.WithPrefetch)]
@@ -570,16 +569,30 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
[DisplayOrder(201), DisplayNameDescription(SR.Keys.FragmentIdColumn)]
public object FragmentIdColumn { get { return null; } }
public string CardinalityEstimationModelVersion { get { return null; } }
[BetterValue(BetterValue.LowerNumber)]
public string CompileCPU { get { return null; } }
[BetterValue(BetterValue.LowerNumber)]
public string CompileMemory { get { return null; } }
[BetterValue(BetterValue.LowerNumber)]
public string CompileTime { get { return null; } }
public string NonParallelPlanReason { get { return null; } }
public string QueryHash { get { return null; } }
public string QueryPlanHash { get { return null; } }
public bool RetrievedFromCache { get { return false; } }
public bool SecurityPolicyApplied { get { return false; } }
public bool NoExpandHint { get { return false; } }
public double TableCardinality { get { return 0; } }
#endregion

View File

@@ -66,6 +66,15 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
}
}
public BetterValue BetterValue
{
get
{
InitializeDisplayAttributesIfNecessary();
return this.betterValue;
}
}
public void SetDisplayNameAndDescription(string newDisplayName, string newDescription)
{
this.displayName = newDisplayName;
@@ -202,6 +211,16 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
{
this.showInTooltip = false;
}
BetterValueAttribute betterValueAttribute =
Attributes[typeof(BetterValueAttribute)] as BetterValueAttribute;
if (betterValueAttribute != null)
{
this.betterValue = betterValueAttribute.Value;
} else
{
this.betterValue = BetterValue.None;
}
}
#region Private members
@@ -216,6 +235,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ExecutionPlan.ShowPlan
private bool isLongString;
private bool initialized;
private bool showInTooltip;
private BetterValue betterValue;
#endregion