Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions SqlScriptDom/Parser/TSql/Ast.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2529,6 +2529,10 @@
<InheritedClass Name="QueryStoreOption"/>
<Member Name="StaleQueryThreshold" Type="Literal" Summary="Stale Query Threshold Value in Days, specified as an integer"/>
</Class>
<Class Name="QueryStoreWaitStatsCaptureOption" Base="QueryStoreOption" Summary="Wait Stats Capture part of QueryStore Options">
<InheritedClass Name="QueryStoreOption"/>
<Member Name="OptionState" Type="OptionState" GenerateUpdatePositionInfoCall="false" Summary="Controls whether wait statistics are captured per query"/>
</Class>
<Class Name="AutomaticTuningDatabaseOption" Base="DatabaseOption" Summary="Automatic tuning option in ALTER DATABASE statement, SET case">
<InheritedClass Name="DatabaseOption" />
<Member Name="AutomaticTuningState" Type="AutomaticTuningState" GenerateUpdatePositionInfoCall="false" Summary="Option state ( AUTO | INHERIT | CUSTOM )."/>
Expand Down
5 changes: 3 additions & 2 deletions SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// <copyright file="CodeGenerationSupporter.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
Expand Down Expand Up @@ -1076,6 +1076,7 @@ internal static class CodeGenerationSupporter
internal const string VirtualDevice = "VIRTUAL_DEVICE";
internal const string VStart = "VSTART";
internal const string WaitAtLowPriority = "WAIT_AT_LOW_PRIORITY";
internal const string WaitStatsCaptureMode = "WAIT_STATS_CAPTURE_MODE";
internal const string WebMethod = "WEBMETHOD";
internal const string WellFormedXml = "WELL_FORMED_XML";
internal const string WideChar = "WIDECHAR";
Expand Down Expand Up @@ -1263,7 +1264,7 @@ internal static class CodeGenerationSupporter
internal const string Russian = "RUSSIAN";
internal const string Romanian = "ROMANIAN";
internal const string Brazilian = "BRAZILIAN";
internal const string NorwegianBokmal = "NORWEGIAN (BOKMÅL)";
internal const string NorwegianBokmal = "NORWEGIAN (BOKMÃ…L)";
internal const string Dutch = "DUTCH";
internal const string Korean = "KOREAN";
internal const string Japanese = "JAPANESE";
Expand Down
3 changes: 2 additions & 1 deletion SqlScriptDom/Parser/TSql/QueryStoreOptionKind.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public enum QueryStoreOptionKind
Interval_Length_Minutes,
Current_Storage_Size_MB,
Max_Plans_Per_Query,
Stale_Query_Threshold_Days
Stale_Query_Threshold_Days,
Wait_Stats_Capture_Mode
}


Expand Down
1 change: 1 addition & 0 deletions SqlScriptDom/Parser/TSql/QueryStoreOptionsHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ private QueryStoreOptionsHelper()
AddOptionMapping(QueryStoreOptionKind.Current_Storage_Size_MB, CodeGenerationSupporter.MaxQdsSize);
AddOptionMapping(QueryStoreOptionKind.Max_Plans_Per_Query, CodeGenerationSupporter.MaxPlansPerQuery);
AddOptionMapping(QueryStoreOptionKind.Stale_Query_Threshold_Days, CodeGenerationSupporter.CleanupPolicy);
AddOptionMapping(QueryStoreOptionKind.Wait_Stats_Capture_Mode, CodeGenerationSupporter.WaitStatsCaptureMode, SqlVersionFlags.TSql140AndAbove);
}

internal static readonly QueryStoreOptionsHelper Instance = new QueryStoreOptionsHelper();
Expand Down
27 changes: 27 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql140.g
Original file line number Diff line number Diff line change
Expand Up @@ -3144,6 +3144,9 @@ queryStoreOneOption returns [QueryStoreOption vResult = null]
|
{NextTokenMatches(CodeGenerationSupporter.CleanupPolicy)}?
vResult = queryStoreTimeCleanupPolicy
|
{NextTokenMatches(CodeGenerationSupporter.WaitStatsCaptureMode)}?
vResult = queryStoreWaitStatsCaptureOption
;

queryStoreDesiredStateOption returns [QueryStoreDesiredStateOption vResult = FragmentFactory.CreateFragment<QueryStoreDesiredStateOption>()]
Expand Down Expand Up @@ -3326,6 +3329,30 @@ queryStoreTimeCleanupPolicy returns [QueryStoreTimeCleanupPolicyOption vResult =
}
;

queryStoreWaitStatsCaptureOption returns [QueryStoreWaitStatsCaptureOption vResult = FragmentFactory.CreateFragment<QueryStoreWaitStatsCaptureOption>()]
: tWaitStatsCaptureMode:Identifier
{
Match(tWaitStatsCaptureMode, CodeGenerationSupporter.WaitStatsCaptureMode);
vResult.OptionKind = QueryStoreOptionKind.Wait_Stats_Capture_Mode;
UpdateTokenInfo(vResult, tWaitStatsCaptureMode);
}
(
(EqualsSign tOff:Off
{
vResult.OptionState = OptionState.Off;
UpdateTokenInfo(vResult, tOff);
}
)
|
(EqualsSign tOn:On
{
vResult.OptionState = OptionState.On;
UpdateTokenInfo(vResult, tOn);
}
)
)
;

automaticTuningDbOption returns [AutomaticTuningDatabaseOption vResult = FragmentFactory.CreateFragment<AutomaticTuningDatabaseOption>()]
: tAutomaticTuning:Identifier
{
Expand Down
27 changes: 27 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql150.g
Original file line number Diff line number Diff line change
Expand Up @@ -3667,6 +3667,9 @@ queryStoreOneOption returns [QueryStoreOption vResult = null]
|
{NextTokenMatches(CodeGenerationSupporter.CleanupPolicy)}?
vResult = queryStoreTimeCleanupPolicy
|
{NextTokenMatches(CodeGenerationSupporter.WaitStatsCaptureMode)}?
vResult = queryStoreWaitStatsCaptureOption
;

queryStoreDesiredStateOption returns [QueryStoreDesiredStateOption vResult = FragmentFactory.CreateFragment<QueryStoreDesiredStateOption>()]
Expand Down Expand Up @@ -3894,6 +3897,30 @@ automaticTuningDbOption returns [AutomaticTuningDatabaseOption vResult = Fragmen
)
;

queryStoreWaitStatsCaptureOption returns [QueryStoreWaitStatsCaptureOption vResult = FragmentFactory.CreateFragment<QueryStoreWaitStatsCaptureOption>()]
: tWaitStatsCaptureMode:Identifier
{
Match(tWaitStatsCaptureMode, CodeGenerationSupporter.WaitStatsCaptureMode);
vResult.OptionKind = QueryStoreOptionKind.Wait_Stats_Capture_Mode;
UpdateTokenInfo(vResult, tWaitStatsCaptureMode);
}
(
(EqualsSign tOff:Off
{
vResult.OptionState = OptionState.Off;
UpdateTokenInfo(vResult, tOff);
}
)
|
(EqualsSign tOn:On
{
vResult.OptionState = OptionState.On;
UpdateTokenInfo(vResult, tOn);
}
)
)
;

automaticTuningOptions [AutomaticTuningDatabaseOption vParent]
{
AutomaticTuningOption vAutomaticTuningOption;
Expand Down
27 changes: 27 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql160.g
Original file line number Diff line number Diff line change
Expand Up @@ -3687,6 +3687,9 @@ queryStoreOneOption returns [QueryStoreOption vResult = null]
|
{NextTokenMatches(CodeGenerationSupporter.CleanupPolicy)}?
vResult = queryStoreTimeCleanupPolicy
|
{NextTokenMatches(CodeGenerationSupporter.WaitStatsCaptureMode)}?
vResult = queryStoreWaitStatsCaptureOption
;

queryStoreDesiredStateOption returns [QueryStoreDesiredStateOption vResult = FragmentFactory.CreateFragment<QueryStoreDesiredStateOption>()]
Expand Down Expand Up @@ -3869,6 +3872,30 @@ queryStoreTimeCleanupPolicy returns [QueryStoreTimeCleanupPolicyOption vResult =
}
;

queryStoreWaitStatsCaptureOption returns [QueryStoreWaitStatsCaptureOption vResult = FragmentFactory.CreateFragment<QueryStoreWaitStatsCaptureOption>()]
: tWaitStatsCaptureMode:Identifier
{
Match(tWaitStatsCaptureMode, CodeGenerationSupporter.WaitStatsCaptureMode);
vResult.OptionKind = QueryStoreOptionKind.Wait_Stats_Capture_Mode;
UpdateTokenInfo(vResult, tWaitStatsCaptureMode);
}
(
(EqualsSign tOff:Off
{
vResult.OptionState = OptionState.Off;
UpdateTokenInfo(vResult, tOff);
}
)
|
(EqualsSign tOn:On
{
vResult.OptionState = OptionState.On;
UpdateTokenInfo(vResult, tOn);
}
)
)
;

automaticTuningDbOption returns [AutomaticTuningDatabaseOption vResult = FragmentFactory.CreateFragment<AutomaticTuningDatabaseOption>()]
: tAutomaticTuning:Identifier
{
Expand Down
27 changes: 27 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql170.g
Original file line number Diff line number Diff line change
Expand Up @@ -3687,6 +3687,9 @@ queryStoreOneOption returns [QueryStoreOption vResult = null]
|
{NextTokenMatches(CodeGenerationSupporter.CleanupPolicy)}?
vResult = queryStoreTimeCleanupPolicy
|
{NextTokenMatches(CodeGenerationSupporter.WaitStatsCaptureMode)}?
vResult = queryStoreWaitStatsCaptureOption
;

queryStoreDesiredStateOption returns [QueryStoreDesiredStateOption vResult = FragmentFactory.CreateFragment<QueryStoreDesiredStateOption>()]
Expand Down Expand Up @@ -3869,6 +3872,30 @@ queryStoreTimeCleanupPolicy returns [QueryStoreTimeCleanupPolicyOption vResult =
}
;

queryStoreWaitStatsCaptureOption returns [QueryStoreWaitStatsCaptureOption vResult = FragmentFactory.CreateFragment<QueryStoreWaitStatsCaptureOption>()]
: tWaitStatsCaptureMode:Identifier
{
Match(tWaitStatsCaptureMode, CodeGenerationSupporter.WaitStatsCaptureMode);
vResult.OptionKind = QueryStoreOptionKind.Wait_Stats_Capture_Mode;
UpdateTokenInfo(vResult, tWaitStatsCaptureMode);
}
(
(EqualsSign tOff:Off
{
vResult.OptionState = OptionState.Off;
UpdateTokenInfo(vResult, tOff);
}
)
|
(EqualsSign tOn:On
{
vResult.OptionState = OptionState.On;
UpdateTokenInfo(vResult, tOn);
}
)
)
;

automaticTuningDbOption returns [AutomaticTuningDatabaseOption vResult = FragmentFactory.CreateFragment<AutomaticTuningDatabaseOption>()]
: tAutomaticTuning:Identifier
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,24 @@ public override void ExplicitVisit(QueryStoreTimeCleanupPolicyOption node)
GenerateNameEqualsValue(CodeGenerationSupporter.StaleQueryThresholdDays, node.StaleQueryThreshold);
GenerateSymbol(TSqlTokenType.RightParenthesis);
}

public override void ExplicitVisit(QueryStoreWaitStatsCaptureOption node)
{
System.Diagnostics.Debug.Assert(node.OptionKind == QueryStoreOptionKind.Wait_Stats_Capture_Mode);
GenerateIdentifier(CodeGenerationSupporter.WaitStatsCaptureMode);
GenerateSpace();

switch (node.OptionState)
{
case OptionState.Off:
GenerateSymbolAndSpace(TSqlTokenType.EqualsSign);
GenerateKeyword(TSqlTokenType.Off);
break;
case OptionState.On:
GenerateSymbolAndSpace(TSqlTokenType.EqualsSign);
GenerateKeyword(TSqlTokenType.On);
break;
}
}
}
}
7 changes: 7 additions & 0 deletions Test/SqlDom/Baselines140/AlterDatabaseOptionsTests140.sql
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,10 @@ ALTER DATABASE db

ALTER DATABASE db
SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = OFF);


ALTER DATABASE db
SET QUERY_STORE (DESIRED_STATE = READ_ONLY, QUERY_CAPTURE_MODE = ALL, SIZE_BASED_CLEANUP_MODE = OFF, INTERVAL_LENGTH_MINUTES = 100, MAX_STORAGE_SIZE_MB = 1000, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), WAIT_STATS_CAPTURE_MODE = ON);

ALTER DATABASE db
SET QUERY_STORE = ON(DESIRED_STATE = READ_ONLY, QUERY_CAPTURE_MODE = ALL, SIZE_BASED_CLEANUP_MODE = OFF, INTERVAL_LENGTH_MINUTES = 100, MAX_STORAGE_SIZE_MB = 1000, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), WAIT_STATS_CAPTURE_MODE = OFF);
2 changes: 1 addition & 1 deletion Test/SqlDom/Only140SyntaxTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public partial class SqlDomTests
private static readonly ParserTest[] Only140TestInfos =
{
new ParserTest140("AlterIndexStatementTests140.sql", 2, 20, 20, 20, 20, 20),
new ParserTest140("AlterDatabaseOptionsTests140.sql", 18, 18, 18, 18, 18, 18),
new ParserTest140("AlterDatabaseOptionsTests140.sql", 20, 20, 20, 20, 20, 20),
new ParserTest140("CreateIndexStatementTests140.sql", 18, 14, 14, 14, 14, 14),
new ParserTest140("CreateTableTests140.sql", 17, 15, 15, 15, 15, 11),
new ParserTest140("OptimizerHintsTests140.sql", 6, 6, 6, 6, 6, 0),
Expand Down
4 changes: 4 additions & 0 deletions Test/SqlDom/TestScripts/AlterDatabaseOptionsTests140.sql
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ ALTER DATABASE db SET AUTOMATIC_TUNING (MAINTAIN_INDEX = DEFAULT);
ALTER DATABASE db SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, MAINTAIN_INDEX = ON, DROP_INDEX = ON);
alter database db set automatic_tuning = auto;
ALtER DataBAsE db SET AUTomaTIC_TUNING (ForCE_LasT_GooD_PLAN = ofF);

-- query_store options for 2017+
alter database db set query_store (desired_state = read_only, query_capture_mode = all, size_based_cleanup_mode = off, interval_length_minutes = 100, max_storage_size_mb = 1000, max_plans_per_query = 200, cleanup_policy = (stale_query_threshold_days = 367), WAIT_STATS_CAPTURE_MODE = ON);
alter database db set query_store = on(desired_state = read_only, query_capture_mode = all, size_based_cleanup_mode = off, interval_length_minutes = 100, max_storage_size_mb = 1000, max_plans_per_query = 200, cleanup_policy = (stale_query_threshold_days = 367), WAIT_STATS_CAPTURE_MODE = OFF);
Loading