diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs
index 8e971d1f..dab76ca8 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/Contracts/ExecutionPlanGraph.cs
@@ -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
///
///
public string DisplayValue { get; set; }
+ ///
+ /// Indicates what kind of value is better amongst 2 values of the same property
+ ///
+ public BetterValue BetterValue { get; set; }
+ ///
+ /// Indicates the data type of the property
+ ///
+ 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
}
}
\ No newline at end of file
diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs
index 55c2920e..d9c16867 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ExecutionPlanGraphUtils.cs
@@ -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
});
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/Attributes.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/Attributes.cs
index 244466e6..8a2015a6 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/Attributes.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/Attributes.cs
@@ -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
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyFactory.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyFactory.cs
index 53fda3a4..8838f08c 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyFactory.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyFactory.cs
@@ -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
diff --git a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyValue.cs b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyValue.cs
index b1a22c5d..550b8abe 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyValue.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ExecutionPlan/ShowPlan/PropertyValue.cs
@@ -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