Skip to content
Open
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
1 change: 1 addition & 0 deletions SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,7 @@ internal static class CodeGenerationSupporter
internal const string Period = "PERIOD";
internal const string PermissionSet = "PERMISSION_SET";
internal const string PerNode = "PER_NODE";
internal const string PersistSamplePercent = "PERSIST_SAMPLE_PERCENT";
internal const string Persisted = "PERSISTED";
internal const string PhysicalOnly = "PHYSICAL_ONLY";
internal const string PhysName = "PHYSNAME";
Expand Down
1 change: 1 addition & 0 deletions SqlScriptDom/Parser/TSql/StatisticsOptionKind.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public enum StatisticsOptionKind
Rows = 11,
Incremental = 12,
AutoDrop = 13,
PersistSamplePercent = 14,
}

#pragma warning restore 1591
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql130.g
Original file line number Diff line number Diff line change
Expand Up @@ -12267,10 +12267,26 @@ incrementalStatisticsOption returns [OnOffStatisticsOption vResult = this.Fragme
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -12327,6 +12343,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = resampleStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql140.g
Original file line number Diff line number Diff line change
Expand Up @@ -12673,10 +12673,26 @@ incrementalStatisticsOption returns [OnOffStatisticsOption vResult = this.Fragme
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -12733,6 +12749,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = resampleStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql150.g
Original file line number Diff line number Diff line change
Expand Up @@ -13340,10 +13340,26 @@ incrementalStatisticsOption returns [OnOffStatisticsOption vResult = this.Fragme
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -13400,6 +13416,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = resampleStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql160.g
Original file line number Diff line number Diff line change
Expand Up @@ -13385,13 +13385,29 @@ autoDropStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentF
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -13450,6 +13466,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql170.g
Original file line number Diff line number Diff line change
Expand Up @@ -13440,13 +13440,29 @@ autoDropStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentF
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -13505,6 +13521,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
18 changes: 18 additions & 0 deletions SqlScriptDom/Parser/TSql/TSql180.g
Original file line number Diff line number Diff line change
Expand Up @@ -13440,13 +13440,29 @@ autoDropStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentF
}
;

persistSamplePercentStatisticsOption returns [OnOffStatisticsOption vResult = this.FragmentFactory.CreateFragment<OnOffStatisticsOption>()]
{
OptionState vOptionState;
}
: tOption:Identifier EqualsSign vOptionState=optionOnOff[vResult]
{
Match(tOption, CodeGenerationSupporter.PersistSamplePercent);
vResult.OptionKind = StatisticsOptionKind.PersistSamplePercent;
vResult.OptionState = vOptionState;
UpdateTokenInfo(vResult, tOption);
}
;

createStatisticsStatementWithOption[ref bool isConflictingOption] returns [StatisticsOption vResult]
:
{NextTokenMatches(CodeGenerationSupporter.Incremental)}?
vResult = incrementalStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
|
{NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
|
vResult = sampleStatisticsOption[ref isConflictingOption]
|
Expand Down Expand Up @@ -13505,6 +13521,8 @@ updateStatisticsStatementWithOption [ref bool isConflictingOption] returns [Stat
vResult = incrementalStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.AutoDrop)}?
vResult = autoDropStatisticsOption
| {NextTokenMatches(CodeGenerationSupporter.PersistSamplePercent)}?
vResult = persistSamplePercentStatisticsOption
| vResult = sampleStatisticsOption[ref isConflictingOption]
|
{NextTokenMatches(CodeGenerationSupporter.StatsStream)}?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ public override void ExplicitVisit(OnOffStatisticsOption node)
case StatisticsOptionKind.AutoDrop:
optionName = CodeGenerationSupporter.AutoDrop;
break;
case StatisticsOptionKind.PersistSamplePercent:
optionName = CodeGenerationSupporter.PersistSamplePercent;
break;
default:
System.Diagnostics.Debug.Assert(false, "invalid option encountered");
break;
Expand Down Expand Up @@ -110,4 +113,4 @@ public override void ExplicitVisit(ResampleStatisticsOption node)
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
UPDATE STATISTICS dbo.MyTable
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;

UPDATE STATISTICS dbo.T
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = OFF;

UPDATE STATISTICS dbo.T
WITH PERSIST_SAMPLE_PERCENT = ON;

UPDATE STATISTICS dbo.T
WITH PERSIST_SAMPLE_PERCENT = ON, FULLSCAN;

UPDATE STATISTICS dbo.T
WITH SAMPLE 50 PERCENT, PERSIST_SAMPLE_PERCENT = ON;

CREATE STATISTICS stat1
ON dbo.T(c1)
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;

CREATE STATISTICS stat2
ON dbo.T(c1)
WITH SAMPLE 25 PERCENT, PERSIST_SAMPLE_PERCENT = OFF;
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
UPDATE STATISTICS dbo.MyTable
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;

UPDATE STATISTICS dbo.T
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = OFF;

UPDATE STATISTICS dbo.T
WITH PERSIST_SAMPLE_PERCENT = ON;

UPDATE STATISTICS dbo.T
WITH PERSIST_SAMPLE_PERCENT = ON, FULLSCAN;

UPDATE STATISTICS dbo.T
WITH SAMPLE 50 PERCENT, PERSIST_SAMPLE_PERCENT = ON;

CREATE STATISTICS stat1
ON dbo.T(c1)
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;

CREATE STATISTICS stat2
ON dbo.T(c1)
WITH SAMPLE 25 PERCENT, PERSIST_SAMPLE_PERCENT = OFF;
3 changes: 2 additions & 1 deletion Test/SqlDom/Only130SyntaxTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ public partial class SqlDomTests
new ParserTest130("AlterWorkloadGroupStatementSqlDwTests.sql", 12, 6, 5, 5, 5),
new ParserTest130("CreateWorkloadClassifierStatementSqlDwTests.sql", 2, 1, 1, 1, 1),
new ParserTest130("PredictSqlDwTests.sql", 3, 3, 3, 3, 3),
new ParserTest130("CreateEventSessionNotLikePredicate.sql", 2, 1, 1, 1, 1)
new ParserTest130("CreateEventSessionNotLikePredicate.sql", 2, 1, 1, 1, 1),
new ParserTest130("PersistSamplePercentStatisticsTests130.sql")
};

[TestMethod]
Expand Down
3 changes: 2 additions & 1 deletion Test/SqlDom/Only180SyntaxTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ public partial class SqlDomTests
private static readonly ParserTest[] Only180TestInfos =
{
new ParserTest180("AutomaticIndexCompactionTests180.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2, nErrors160: 2, nErrors170: 2),
new ParserTest180("TrimFromReturnTests160.sql")
new ParserTest180("TrimFromReturnTests160.sql"),
new ParserTest180("PersistSamplePercentStatisticsTests130.sql")
};

private static readonly ParserTest[] SqlAzure180_TestInfos =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
UPDATE STATISTICS dbo.MyTable WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;
UPDATE STATISTICS dbo.T WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = OFF;
UPDATE STATISTICS dbo.T WITH PERSIST_SAMPLE_PERCENT = ON;
UPDATE STATISTICS dbo.T WITH PERSIST_SAMPLE_PERCENT = ON, FULLSCAN;
UPDATE STATISTICS dbo.T WITH SAMPLE 50 PERCENT, PERSIST_SAMPLE_PERCENT = ON;

CREATE STATISTICS stat1 ON dbo.T(c1) WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;
CREATE STATISTICS stat2 ON dbo.T(c1) WITH SAMPLE 25 PERCENT, PERSIST_SAMPLE_PERCENT = OFF;
Loading