Query execution settings support (#812)

* WIP

* WIP 3

* WIP 3

* Additional query settings updates

* Add settings tets

* Address code review feeback

* Updates from testing
This commit is contained in:
Karl Burtram
2019-05-16 15:21:17 -07:00
committed by GitHub
parent db70f421ae
commit 151a2de625
14 changed files with 1119 additions and 69 deletions

View File

@@ -4,13 +4,14 @@
//
using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts;
using Microsoft.SqlTools.Utility;
namespace Microsoft.SqlTools.ServiceLayer.SqlContext
{
/// <summary>
/// Collection of settings related to the execution of queries
/// </summary>
public class QueryExecutionSettings
public class QueryExecutionSettings : GeneralRequestDetails
{
#region Constants
@@ -34,7 +35,7 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// Default selection of returning an actual XML showplan with all batches
/// Do not return any execution plan by default
/// </summary>
private static readonly ExecutionPlanOptions DefaultExecutionPlanOptions = new ExecutionPlanOptions
private static ExecutionPlanOptions DefaultExecutionPlanOptions = new ExecutionPlanOptions
{
IncludeActualExecutionPlanXml = false,
IncludeEstimatedExecutionPlanXml = false
@@ -45,20 +46,128 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// </summary>
private const bool DefaultDisplayBitAsNumber = true;
/// <summary>
/// default row count
/// </summary>
private const int DefaultRowCount = 0;
/// <summary>
/// default text size
/// </summary>
private const int DefaultTextSize = 2147483647;
/// <summary>
/// default execution timeout
/// </summary>
private const int DefaultExecutionTimeout = 0;
/// <summary>
/// default no count
/// </summary>
private const bool DefaultNoCount = false;
/// <summary>
/// default no exec
/// </summary>
private const bool DefaultNoExec = false;
/// <summary>
/// default parse only
/// </summary>
private const bool DefaultParseOnly = false;
/// <summary>
/// default arith abort
/// </summary>
private const bool DefaultArithAbort = true;
/// <summary>
/// default concat null yields null
/// </summary>
private const bool DefaultConcatNullYieldsNull = true;
/// <summary>
/// default statistics time
/// </summary>
private const bool DefaultStatisticsTime = false;
/// <summary>
/// default statistics IO
/// </summary>
private const bool DefaultStatisticsIO = false;
/// <summary>
/// default transaction abort ON
/// </summary>
private const bool DefaultXactAbortOn = false;
/// <summary>
/// default ANSI padding
/// </summary>
private const bool DefaultAnsiPadding = true;
/// <summary>
/// default ANSI warnings
/// </summary>
private const bool DefaultAnsiWarnings = true;
/// <summary>
/// default ANSI Nulls
/// </summary>
private const bool DefaultAnsiNulls = true;
/// <summary>
/// default use ANSI defaults
/// </summary>
private const bool DefaultAnsiDefaults = false;
/// <summary>
/// default quoted identifier
/// </summary>
private const bool DefaultQuotedIdentifier = true;
/// <summary>
/// default ANSI NULL default ON
/// </summary>
private const bool DefaultAnsiNullDefaultOn = true;
/// <summary>
/// default implicit transactions
/// </summary>
private const bool DefaultImplicitTransactions = false;
/// <summary>
/// default cursor close on commit
/// </summary>
private const bool DefaultCursorCloseOnCommit = false;
/// <summary>
/// default transaction isolation level
/// </summary>
private const string DefaultTransactionIsolationLevel = "READ UNCOMMITTED";
/// <summary>
/// default deadlock priority
/// </summary>
private const string DefaultDeadlockPriority = "Normal";
/// <summary>
/// default lock timeout
/// </summary>
private const int DefaultLockTimeout = -1;
/// <summary>
/// default query governor cost limit
/// </summary>
private const int DefaultQueryGovernorCostLimit = 0;
#endregion
#region Member Variables
private string batchSeparator;
private int? maxCharsToStore;
private int? maxXmlCharsToStore;
private ExecutionPlanOptions? executionPlanOptions;
private bool? displayBitAsNumber;
#endregion
#region Properties
@@ -68,8 +177,14 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// </summary>
public string BatchSeparator
{
get { return batchSeparator ?? DefaultBatchSeparator; }
set { batchSeparator = value; }
get
{
return GetOptionValue<string>("batchSeparator", DefaultBatchSeparator);
}
set
{
SetOptionValue("batchSeparator", value);
}
}
/// <summary>
@@ -78,8 +193,14 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// </summary>
public int MaxCharsToStore
{
get { return maxCharsToStore ?? DefaultMaxCharsToStore; }
set { maxCharsToStore = value; }
get
{
return GetOptionValue<int>("maxCharsToStore", DefaultMaxCharsToStore);
}
set
{
SetOptionValue("maxCharsToStore", value);
}
}
/// <summary>
@@ -88,8 +209,14 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// </summary>
public int MaxXmlCharsToStore
{
get { return maxXmlCharsToStore ?? DefaultMaxXmlCharsToStore; }
set { maxXmlCharsToStore = value; }
get
{
return GetOptionValue<int>("maxXmlCharsToStore", DefaultMaxXmlCharsToStore);
}
set
{
SetOptionValue("maxXmlCharsToStore", value);
}
}
/// <summary>
@@ -108,8 +235,389 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
/// </summary>
public bool DisplayBitAsNumber
{
get { return displayBitAsNumber ?? DefaultDisplayBitAsNumber; }
set { displayBitAsNumber = value; }
get
{
return GetOptionValue<bool>("displayBitAsNumber", DefaultDisplayBitAsNumber);
}
set
{
SetOptionValue("displayBitAsNumber", value);
}
}
/// <summary>
/// Set row count
/// </summary>
public int RowCount
{
get
{
return GetOptionValue<int>("rowCount", DefaultRowCount);
}
set
{
SetOptionValue("rowCount", value);
}
}
/// <summary>
/// Set text size
/// </summary>
public int TextSize
{
get
{
return GetOptionValue<int>("textSize", DefaultTextSize);
}
set
{
SetOptionValue("textSize", value);
}
}
/// <summary>
/// Set execution timeout
/// </summary>
public int ExecutionTimeout
{
get
{
return GetOptionValue<int>("executionTimeout", DefaultExecutionTimeout);
}
set
{
SetOptionValue("executionTimeout", value);
}
}
/// <summary>
/// Set no count
/// </summary>
public bool NoCount
{
get
{
return GetOptionValue<bool>("noCount", DefaultNoCount);
}
set
{
SetOptionValue("noCount", value);
}
}
/// <summary>
/// Set no exec
/// </summary>
public bool NoExec
{
get
{
return GetOptionValue<bool>("noExec", DefaultNoExec);
}
set
{
SetOptionValue("noExec", value);
}
}
/// <summary>
/// Set parse only
/// </summary>
public bool ParseOnly
{
get
{
return GetOptionValue<bool>("parseOnly", DefaultParseOnly);
}
set
{
SetOptionValue("parseOnly", value);
}
}
/// <summary>
/// Set arith abort
/// </summary>
public bool ArithAbort
{
get
{
return GetOptionValue<bool>("arithAbort", DefaultArithAbort);
}
set
{
SetOptionValue("arithAbort", value);
}
}
/// <summary>
/// Set concat null yields null
/// </summary>
public bool ConcatNullYieldsNull
{
get
{
return GetOptionValue<bool>("concatNullYieldsNull", DefaultConcatNullYieldsNull);
}
set
{
SetOptionValue("concatNullYieldsNull", value);
}
}
/// <summary>
/// Set statistics time
/// </summary>
public bool StatisticsTime
{
get
{
return GetOptionValue<bool>("statisticsTime", DefaultStatisticsTime);
}
set
{
SetOptionValue("statisticsTime", value);
}
}
/// <summary>
/// Set statistics I\O
/// </summary>
public bool StatisticsIO
{
get
{
return GetOptionValue<bool>("statisticsIO", DefaultStatisticsIO);
}
set
{
SetOptionValue("statisticsIO", value);
}
}
/// <summary>
/// Set transaction abort ON
/// </summary>
public bool XactAbortOn
{
get
{
return GetOptionValue<bool>("xactAbortOn", DefaultXactAbortOn);
}
set
{
SetOptionValue("xactAbortOn", value);
}
}
/// <summary>
/// Set transaction isolation level
/// </summary>
public string TransactionIsolationLevel
{
get
{
return GetOptionValue<string>("transactionIsolationLevel", DefaultTransactionIsolationLevel);
}
set
{
SetOptionValue("transactionIsolationLevel", value);
}
}
/// <summary>
/// Set deadlock priority
/// </summary>
public string DeadlockPriority
{
get
{
return GetOptionValue<string>("deadlockPriority", DefaultDeadlockPriority);
}
set
{
SetOptionValue("deadlockPriority", value);
}
}
/// <summary>
/// Set lock timeout
/// </summary>
public int LockTimeout
{
get
{
return GetOptionValue<int>("lockTimeout", DefaultLockTimeout);
}
set
{
SetOptionValue("lockTimeout", value);
}
}
/// <summary>
/// Set query governor cost limit
/// </summary>
public int QueryGovernorCostLimit
{
get
{
return GetOptionValue<int>("queryGovernorCostLimit", DefaultQueryGovernorCostLimit);
}
set
{
SetOptionValue("queryGovernorCostLimit", value);
}
}
/// <summary>
/// Set ANSI defaults ON
/// </summary>
public bool AnsiDefaults
{
get
{
return GetOptionValue<bool>("ansiDefaults", DefaultAnsiDefaults);
}
set
{
SetOptionValue("ansiDefaults", value);
}
}
/// <summary>
/// Set quoted identifier
/// </summary>
public bool QuotedIdentifier
{
get
{
return GetOptionValue<bool>("quotedIdentifier", DefaultQuotedIdentifier);
}
set
{
SetOptionValue("quotedIdentifier", value);
}
}
/// <summary>
/// Set ANSI null default on
/// </summary>
public bool AnsiNullDefaultOn
{
get
{
return GetOptionValue<bool>("ansiNullDefaultOn", DefaultAnsiNullDefaultOn);
}
set
{
SetOptionValue("ansiNullDefaultOn", value);
}
}
/// <summary>
/// Set implicit transactions
/// </summary>
public bool ImplicitTransactions
{
get
{
return GetOptionValue<bool>("implicitTransactions", DefaultImplicitTransactions);
}
set
{
SetOptionValue("implicitTransactions", value);
}
}
/// <summary>
/// Set cursor close on commit
/// </summary>
public bool CursorCloseOnCommit
{
get
{
return GetOptionValue<bool>("cursorCloseOnCommit", DefaultCursorCloseOnCommit);
}
set
{
SetOptionValue("cursorCloseOnCommit", value);
}
}
/// <summary>
/// Set ANSI padding
/// </summary>
public bool AnsiPadding
{
get
{
return GetOptionValue<bool>("ansiPadding", DefaultAnsiPadding);
}
set
{
SetOptionValue("ansiPadding", value);
}
}
/// <summary>
/// Set ANSI warnings
/// </summary>
public bool AnsiWarnings
{
get
{
return GetOptionValue<bool>("ansiWarnings", DefaultAnsiWarnings);
}
set
{
SetOptionValue("ansiWarnings", value);
}
}
/// <summary>
/// Set ANSI nulls
/// </summary>
public bool AnsiNulls
{
get
{
return GetOptionValue<bool>("ansiNulls", DefaultAnsiNulls);
}
set
{
SetOptionValue("ansiNulls", value);
}
}
/// <summary>
/// Setting to return the actual execution plan as XML
/// </summary>
public bool IncludeActualExecutionPlanXml
{
get
{
return GetOptionValue<bool>("includeActualExecutionPlanXml");
}
set
{
SetOptionValue("includeActualExecutionPlanXml", value);
}
}
/// <summary>
/// Setting to return the estimated execution plan as XML
/// </summary>
public bool IncludeEstimatedExecutionPlanXml
{
get
{
return GetOptionValue<bool>("includeEstimatedExecutionPlanXml");
}
set
{
SetOptionValue("includeEstimatedExecutionPlanXml", value);
}
}
#endregion
@@ -127,6 +635,28 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlContext
MaxXmlCharsToStore = newSettings.MaxXmlCharsToStore;
ExecutionPlanOptions = newSettings.ExecutionPlanOptions;
DisplayBitAsNumber = newSettings.DisplayBitAsNumber;
RowCount = newSettings.RowCount;
TextSize = newSettings.TextSize;
ExecutionTimeout = newSettings.ExecutionTimeout;
NoCount = newSettings.NoCount;
NoExec = newSettings.NoExec;
ParseOnly = newSettings.ParseOnly;
ArithAbort = newSettings.ArithAbort;
StatisticsTime = newSettings.StatisticsTime;
StatisticsIO = newSettings.StatisticsIO;
XactAbortOn = newSettings.XactAbortOn;
TransactionIsolationLevel = newSettings.TransactionIsolationLevel;
DeadlockPriority = newSettings.DeadlockPriority;
LockTimeout = newSettings.LockTimeout;
QueryGovernorCostLimit = newSettings.QueryGovernorCostLimit;
AnsiDefaults = newSettings.AnsiDefaults;
QuotedIdentifier = newSettings.QuotedIdentifier;
AnsiNullDefaultOn = newSettings.AnsiNullDefaultOn;
ImplicitTransactions = newSettings.ImplicitTransactions;
CursorCloseOnCommit = newSettings.CursorCloseOnCommit;
AnsiPadding = newSettings.AnsiPadding;
AnsiWarnings = newSettings.AnsiWarnings;
AnsiNulls = newSettings.AnsiNulls;
}
#endregion