diff --git a/Directory.Build.props b/Directory.Build.props index df70ff4..dfb012a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -49,11 +49,28 @@ $(EnlistmentRoot)\obj\$([MSBuild]::MakeRelative('$(EnlistmentRoot)\', $(MSBuildProjectDirectory))) - + https://www.antlr2.org/download/antlr-2.7.5.exe $(BaseIntermediateOutputPath)\antlr-2.7.5.exe + + + false + + + + + false + $(EnableLocalization) + + VS_Main_Languages + + 1591 diff --git a/SqlScriptDom/Parser/TSql/Ast.xml b/SqlScriptDom/Parser/TSql/Ast.xml index c7b3943..a0f647c 100644 --- a/SqlScriptDom/Parser/TSql/Ast.xml +++ b/SqlScriptDom/Parser/TSql/Ast.xml @@ -107,7 +107,8 @@ - + + diff --git a/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionHelper.cs b/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionHelper.cs index b257a9b..823f956 100644 --- a/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionHelper.cs +++ b/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionHelper.cs @@ -23,6 +23,7 @@ private ExternalFileFormatOptionHelper() AddOptionMapping(ExternalFileFormatOptionKind.DataCompression, CodeGenerationSupporter.DataCompression); AddOptionMapping(ExternalFileFormatOptionKind.FirstRow, CodeGenerationSupporter.FirstRow2); AddOptionMapping(ExternalFileFormatOptionKind.Encoding, CodeGenerationSupporter.Encoding); + AddOptionMapping(ExternalFileFormatOptionKind.ParserVersion, CodeGenerationSupporter.ParserVersion); } internal static readonly ExternalFileFormatOptionHelper Instance = new ExternalFileFormatOptionHelper(); diff --git a/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionKind.cs b/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionKind.cs index f24fb24..9405ceb 100644 --- a/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionKind.cs +++ b/SqlScriptDom/Parser/TSql/ExternalFileFormatOptionKind.cs @@ -21,7 +21,8 @@ public enum ExternalFileFormatOptionKind UseTypeDefault = 5, DataCompression = 6, FirstRow = 7, - Encoding = 8 + Encoding = 8, + ParserVersion = 9 } #pragma warning restore 1591 diff --git a/SqlScriptDom/Parser/TSql/TSql100.g b/SqlScriptDom/Parser/TSql/TSql100.g index d85f2e8..e900b14 100644 --- a/SqlScriptDom/Parser/TSql/TSql100.g +++ b/SqlScriptDom/Parser/TSql/TSql100.g @@ -11984,7 +11984,6 @@ cursorOption returns [CursorOption vResult = FragmentFactory.CreateFragment 0) + { + GenerateCommaSeparatedList(node.DistributionColumns); + } + GenerateSymbol(TSqlTokenType.RightParenthesis); } } diff --git a/Test/SqlDom/Baselines130/MaterializedViewTests130.sql b/Test/SqlDom/Baselines130/MaterializedViewTests130.sql index 9fb4a72..444bd3f 100644 --- a/Test/SqlDom/Baselines130/MaterializedViewTests130.sql +++ b/Test/SqlDom/Baselines130/MaterializedViewTests130.sql @@ -93,3 +93,40 @@ AS BEGIN ALTER MATERIALIZED VIEW View1 DISABLE; END + + +GO +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; diff --git a/Test/SqlDom/Baselines140/MaterializedViewTests140.sql b/Test/SqlDom/Baselines140/MaterializedViewTests140.sql new file mode 100644 index 0000000..b80f5b8 --- /dev/null +++ b/Test/SqlDom/Baselines140/MaterializedViewTests140.sql @@ -0,0 +1,34 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; diff --git a/Test/SqlDom/Baselines150/MaterializedViewTests150.sql b/Test/SqlDom/Baselines150/MaterializedViewTests150.sql new file mode 100644 index 0000000..b80f5b8 --- /dev/null +++ b/Test/SqlDom/Baselines150/MaterializedViewTests150.sql @@ -0,0 +1,34 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; diff --git a/Test/SqlDom/Baselines160/CreateExternalFileFormatStatementTests160.sql b/Test/SqlDom/Baselines160/CreateExternalFileFormatStatementTests160.sql index 7d41238..9052a3a 100644 --- a/Test/SqlDom/Baselines160/CreateExternalFileFormatStatementTests160.sql +++ b/Test/SqlDom/Baselines160/CreateExternalFileFormatStatementTests160.sql @@ -1,4 +1,10 @@ CREATE EXTERNAL FILE FORMAT eff1 WITH ( FORMAT_TYPE = DELTA + ); + +CREATE EXTERNAL FILE FORMAT eff2 + WITH ( + FORMAT_TYPE = DELIMITEDTEXT, + FORMAT_OPTIONS (PARSER_VERSION = '2.0') ); \ No newline at end of file diff --git a/Test/SqlDom/Baselines160/MaterializedViewTests160.sql b/Test/SqlDom/Baselines160/MaterializedViewTests160.sql new file mode 100644 index 0000000..b80f5b8 --- /dev/null +++ b/Test/SqlDom/Baselines160/MaterializedViewTests160.sql @@ -0,0 +1,34 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) AS Max_Col1, + MIN(Col2) AS Min_Col2, + Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; + + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, + Col4, + Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5; diff --git a/Test/SqlDom/Only130SyntaxTests.cs b/Test/SqlDom/Only130SyntaxTests.cs index 7e52d52..8e0072f 100644 --- a/Test/SqlDom/Only130SyntaxTests.cs +++ b/Test/SqlDom/Only130SyntaxTests.cs @@ -66,7 +66,7 @@ public partial class SqlDomTests new ParserTest130("ExternalTableCtasStatementTests.sql", 8, 2, 2, 2, 2), new ParserTest130("GroupByClauseTests130.sql", 4, 4, 2, 2, 2), new ParserTest130("WithinGroupTests130.sql", 5, 5, 5, 3, 3), - new ParserTest130("MaterializedViewTests130.sql", 19, 10, 10, 10, 10), + new ParserTest130("MaterializedViewTests130.sql", 19, 13, 13, 13, 13), new ParserTest130("CreateColumnStoreIndexTestsDw.sql", 1, 1, 1, 1, 1), new ParserTest130("CreateTriggerStatementTests130.sql", 1, 1, 0, 0, 0), new ParserTest130("CopyCommandTestsDw.sql", 1, 1, 1, 1, 1), diff --git a/Test/SqlDom/Only140SyntaxTests.cs b/Test/SqlDom/Only140SyntaxTests.cs index f693b65..80a8e89 100644 --- a/Test/SqlDom/Only140SyntaxTests.cs +++ b/Test/SqlDom/Only140SyntaxTests.cs @@ -37,6 +37,7 @@ public partial class SqlDomTests new ParserTest140("AlterExternalLibrary140.sql", 2, 2, 2, 2, 2, 3), new ParserTest140("CreateExternalLibrary140.sql", 2, 2, 2, 2, 2, 3), new ParserTest140("DropExternalLibrary140.sql", 2, 2, 2, 2, 2, 2), + new ParserTest140("MaterializedViewTests140.sql", 6, 3, 3, 3, 3, 0), }; private static readonly ParserTest[] SqlAzure_TestInfos = diff --git a/Test/SqlDom/Only150SyntaxTests.cs b/Test/SqlDom/Only150SyntaxTests.cs index a1fefb7..45fb9a6 100644 --- a/Test/SqlDom/Only150SyntaxTests.cs +++ b/Test/SqlDom/Only150SyntaxTests.cs @@ -49,7 +49,8 @@ The parser terminates on that batch itself without parsing the rest of the batch new ParserTest150("AlterExternalLanguage150.sql", 2, 2, 2, 2, 2, 6, 6), new ParserTest150("DropExternalLanguage150.sql", 2, 2, 2, 2, 2, 2, 2), new ParserTest150("FromClauseTests150.sql", 2, 2, 0, 0, 0, 0, 0), - new ParserTest150("DeclareTableVariableTests150.sql", 1, 1, 1, 1, 1, 1, 1) + new ParserTest150("DeclareTableVariableTests150.sql", 1, 1, 1, 1, 1, 1, 1), + new ParserTest150("MaterializedViewTests150.sql", 6, 3, 3, 3, 3, 0, 0) }; /// diff --git a/Test/SqlDom/Only160SyntaxTests.cs b/Test/SqlDom/Only160SyntaxTests.cs index 730bab1..1ca904c 100644 --- a/Test/SqlDom/Only160SyntaxTests.cs +++ b/Test/SqlDom/Only160SyntaxTests.cs @@ -35,10 +35,11 @@ public partial class SqlDomTests // OPENROWSET BULK statements specific to SQL Serverless Pools new ParserTest160(scriptFilename: "OpenRowsetBulkStatementTests160.sql", nErrors80: 8, nErrors90: 8, nErrors100: 8, nErrors110: 8, nErrors120: 8, nErrors130: 8, nErrors140: 8, nErrors150: 8), new ParserTest160(scriptFilename: "CreateStatisticsStatementTests160.sql", nErrors80: 4, nErrors90: 4, nErrors100: 4, nErrors110: 4, nErrors120: 4, nErrors130: 4, nErrors140: 4, nErrors150: 4), - new ParserTest160(scriptFilename: "CreateExternalFileFormatStatementTests160.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 1, nErrors140: 1, nErrors150: 1), + new ParserTest160(scriptFilename: "CreateExternalFileFormatStatementTests160.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2), new ParserTest160("StringConcatOperatorTests160.sql", nErrors80: 11, nErrors90: 11, nErrors100: 11, nErrors110: 11, nErrors120: 11, nErrors130: 11, nErrors140: 11, nErrors150: 11), - new ParserTest160("InlineIndexColumnWithINCLUDEtest.sql", nErrors80: 3, nErrors90: 3, nErrors100: 3, nErrors110: 3, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2) - }; + new ParserTest160("InlineIndexColumnWithINCLUDEtest.sql", nErrors80: 3, nErrors90: 3, nErrors100: 3, nErrors110: 3, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2), + new ParserTest160("MaterializedViewTests160.sql", nErrors80: 6, nErrors90: 3, nErrors100: 3, nErrors110: 3, nErrors120: 3, nErrors130: 0, nErrors140: 0, nErrors150: 0) + }; private static readonly ParserTest[] SqlAzure160_TestInfos = { diff --git a/Test/SqlDom/ParserErrorsTests.cs b/Test/SqlDom/ParserErrorsTests.cs index ee7113b..a1b0fcb 100644 --- a/Test/SqlDom/ParserErrorsTests.cs +++ b/Test/SqlDom/ParserErrorsTests.cs @@ -5163,6 +5163,15 @@ public void CreateExternalFileFormatNegativeTest() // Create external file format with incorrect encoding value // ParserTestUtils.ErrorTest130("CREATE EXTERNAL FILE FORMAT eff1 WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (ENCODING = 16))", new ParserErrorInfo(84, "SQL46010", "ENCODING")); + // Create external file format with two instances of parser version option + // + ParserTestUtils.ErrorTest160("CREATE EXTERNAL FILE FORMAT eff1 WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (PARSER_VERSION = '1.0', PARSER_VERSION = '2.0'))", new ParserErrorInfo(125, "SQL46049", "'2.0'")); + // Create external file format with PARSER_VERSION misspelled as PARSR_VERSION + // + ParserTestUtils.ErrorTest160("CREATE EXTERNAL FILE FORMAT eff1 WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (PARSR_VERSION = '2.0'))", new ParserErrorInfo(84, "SQL46010", "PARSR_VERSION")); + // Create external file format with incorrect parser version value + // + ParserTestUtils.ErrorTest160("CREATE EXTERNAL FILE FORMAT eff1 WITH (FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (PARSER_VERSION = 16))", new ParserErrorInfo(84, "SQL46010", "PARSER_VERSION")); } @@ -6291,6 +6300,7 @@ public void CreateMaterializedViewNegativeTest() var invalidMaterializedView14 = "CREATE MATERIALIZED VIEW View1 WITH (DISTRIBUTION = HSH(Col5), FOR_APPEND) AS SELECT Col1, Col2 FROM dbo.Table1 GROUP BY Col1, Col2"; var invalidMaterializedView15 = "CREATE MATERIALIZED VIEW View1 WITH (DISTRIBUTION = HASH(Col4), DISTRIBUTION = HASH(Col5)) AS SELECT Col1, Col2 FROM dbo.Table1 GROUP BY Col1, Col2"; var invalidMaterializedView16 = "CREATE MATERIALIZED VIEW View1 WITH (DISTRIBUTION = HASH(Col1), ENCRYPTION) AS SELECT Col1, Col2 FROM dbo.Table1 GROUP BY Col1, Col2"; + var invalidMaterializedView17 = "CREATE MATERIALIZED VIEW View1 WITH (DISTRIBUTION = HASH(Col3, Col4,, Col5)) AS SELECT Col3, Col4, Col5 FROM dbo.Table1 GROUP BY Col3, Col4, Col5;"; ParserTestUtils.ErrorTest130(invalidMaterializedView, new ParserErrorInfo(7, "SQL46010", "MATERIALIZED")); ParserTestUtils.ErrorTest140(invalidMaterializedView, new ParserErrorInfo(7, "SQL46010", "MATERIALIZED")); @@ -6363,6 +6373,11 @@ public void CreateMaterializedViewNegativeTest() ParserTestUtils.ErrorTest130(invalidMaterializedView16, new ParserErrorInfo(64, "SQL46010", "ENCRYPTION")); ParserTestUtils.ErrorTest140(invalidMaterializedView16, new ParserErrorInfo(64, "SQL46010", "ENCRYPTION")); ParserTestUtils.ErrorTest150(invalidMaterializedView16, new ParserErrorInfo(64, "SQL46010", "ENCRYPTION")); + + ParserTestUtils.ErrorTest130(invalidMaterializedView17, new ParserErrorInfo(68, "SQL46010", ",")); + ParserTestUtils.ErrorTest140(invalidMaterializedView17, new ParserErrorInfo(68, "SQL46010", ",")); + ParserTestUtils.ErrorTest150(invalidMaterializedView17, new ParserErrorInfo(68, "SQL46010", ",")); + ParserTestUtils.ErrorTest160(invalidMaterializedView17, new ParserErrorInfo(68, "SQL46010", ",")); } [TestMethod] diff --git a/Test/SqlDom/RegressionTests.cs b/Test/SqlDom/RegressionTests.cs index 97a11fa..30965af 100644 --- a/Test/SqlDom/RegressionTests.cs +++ b/Test/SqlDom/RegressionTests.cs @@ -157,40 +157,6 @@ INSERT INTO [dbo].[UrlTable] (Col1, Url) VALUES ('1', '2') Parse(scriptReader); } - /// - /// Regression test to verify token info (start line, start column, etc.) are correctly populated for CursorOption - /// See https://github.com/microsoft/SqlScriptDOM/issues/26 for details on the issue. - /// - [TestMethod] - [Priority(0)] - [SqlStudioTestCategory(Category.UnitTest)] - public void CursorOptionTokenInfoTest() - { - ParserTestUtils.ExecuteTestForAllParsers(delegate (TSqlParser parser) - { - string script = @"-- Single line comment - DECLARE MyCursor scroll CURSOR FOR - SELECT * FROM ANYTHING"; - - using (var scriptReader = new StringReader(script)) - { - var fragment = parser.Parse(scriptReader, out IList errors) as TSqlScript; - Assert.AreEqual(0, errors.Count); - - Assert.IsTrue(fragment is TSqlScript); - Assert.IsTrue(fragment.Batches[0].Statements[0] is DeclareCursorStatement); - - var declCursorStmt = fragment.Batches[0].Statements[0] as DeclareCursorStatement; - - Assert.AreEqual(3, declCursorStmt.CursorDefinition.Select.StartLine); - Assert.AreEqual(9, declCursorStmt.CursorDefinition.Select.StartColumn); - - Assert.AreEqual(2, declCursorStmt.CursorDefinition.Options[0].StartLine); - Assert.AreEqual(26, declCursorStmt.CursorDefinition.Options[0].StartColumn); - } - }, true); - } - #region Private Methods private static string GenerateScript(TSqlFragment fragment) diff --git a/Test/SqlDom/TestScripts/CreateExternalFileFormatStatementTests160.sql b/Test/SqlDom/TestScripts/CreateExternalFileFormatStatementTests160.sql index 13b4265..c4ab759 100644 --- a/Test/SqlDom/TestScripts/CreateExternalFileFormatStatementTests160.sql +++ b/Test/SqlDom/TestScripts/CreateExternalFileFormatStatementTests160.sql @@ -1,2 +1,5 @@ CREATE EXTERNAL FILE FORMAT eff1 - WITH ( FORMAT_TYPE = delta ); \ No newline at end of file + WITH ( FORMAT_TYPE = delta ); + +CREATE EXTERNAL FILE FORMAT eff2 + WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (PARSER_VERSION = '2.0') ); \ No newline at end of file diff --git a/Test/SqlDom/TestScripts/MaterializedViewTests130.sql b/Test/SqlDom/TestScripts/MaterializedViewTests130.sql index bfb5a71..7768000 100644 --- a/Test/SqlDom/TestScripts/MaterializedViewTests130.sql +++ b/Test/SqlDom/TestScripts/MaterializedViewTests130.sql @@ -70,4 +70,29 @@ GO CREATE PROCEDURE Proc1 AS BEGIN ALTER MATERIALIZED VIEW View1 DISABLE; -END \ No newline at end of file +END + + +GO +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 \ No newline at end of file diff --git a/Test/SqlDom/TestScripts/MaterializedViewTests140.sql b/Test/SqlDom/TestScripts/MaterializedViewTests140.sql new file mode 100644 index 0000000..bf073a1 --- /dev/null +++ b/Test/SqlDom/TestScripts/MaterializedViewTests140.sql @@ -0,0 +1,22 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 \ No newline at end of file diff --git a/Test/SqlDom/TestScripts/MaterializedViewTests150.sql b/Test/SqlDom/TestScripts/MaterializedViewTests150.sql new file mode 100644 index 0000000..bf073a1 --- /dev/null +++ b/Test/SqlDom/TestScripts/MaterializedViewTests150.sql @@ -0,0 +1,22 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 \ No newline at end of file diff --git a/Test/SqlDom/TestScripts/MaterializedViewTests160.sql b/Test/SqlDom/TestScripts/MaterializedViewTests160.sql new file mode 100644 index 0000000..bf073a1 --- /dev/null +++ b/Test/SqlDom/TestScripts/MaterializedViewTests160.sql @@ -0,0 +1,22 @@ +CREATE MATERIALIZED VIEW View1MCD +WITH (DISTRIBUTION = HASH(Col4, Col5), FOR_APPEND) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View2MCD +WITH (FOR_APPEND, DISTRIBUTION = HASH(Col3, Col5)) +AS +SELECT MAX(Col1) as Max_Col1, MIN(Col2) as Min_Col2, Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 + +GO +CREATE MATERIALIZED VIEW View3MCD +WITH (DISTRIBUTION = HASH(Col3, Col4, Col5)) +AS +SELECT Col3, Col4, Col5 +FROM dbo.Table1 +GROUP BY Col3, Col4, Col5 \ No newline at end of file