diff --git a/SqlScriptDom/Parser/TSql/Ast.xml b/SqlScriptDom/Parser/TSql/Ast.xml
index d02bc3b..ffeec7c 100644
--- a/SqlScriptDom/Parser/TSql/Ast.xml
+++ b/SqlScriptDom/Parser/TSql/Ast.xml
@@ -2404,6 +2404,7 @@
+
@@ -2576,6 +2577,9 @@
+
+
+
diff --git a/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs b/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
index daa8b35..7c00dbe 100644
--- a/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
+++ b/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
@@ -564,6 +564,7 @@ internal static class CodeGenerationSupporter
internal const string LSquareParen = "[";
internal const string MaintainIndex = "MAINTAIN_INDEX";
internal const string Manual = "MANUAL";
+ internal const string ManualCutover = "MANUAL_CUTOVER";
internal const string Mark = "MARK";
internal const string MarkInUseForRemoval = "MARK_IN_USE_FOR_REMOVAL";
internal const string Masked = "MASKED";
@@ -728,6 +729,7 @@ internal static class CodeGenerationSupporter
internal const string Paused = "PAUSED";
internal const string Percentage = "PERCENTAGE";
internal const string PerCpu = "PER_CPU";
+ internal const string PerformCutover = "PERFORM_CUTOVER";
internal const string Period = "PERIOD";
internal const string PermissionSet = "PERMISSION_SET";
internal const string PerNode = "PER_NODE";
diff --git a/SqlScriptDom/Parser/TSql/DatabaseOptionKind.cs b/SqlScriptDom/Parser/TSql/DatabaseOptionKind.cs
index 2cdeec3..c3118e2 100644
--- a/SqlScriptDom/Parser/TSql/DatabaseOptionKind.cs
+++ b/SqlScriptDom/Parser/TSql/DatabaseOptionKind.cs
@@ -95,7 +95,10 @@ public enum DatabaseOptionKind
// T-SQL 150 On/Off options
DataRetention = 67,
- Ledger = 68
+ Ledger = 68,
+
+ ManualCutover = 69,
+ PerformCutover = 70
}
#pragma warning restore 1591
diff --git a/SqlScriptDom/Parser/TSql/DatabaseOptionKindHelper.cs b/SqlScriptDom/Parser/TSql/DatabaseOptionKindHelper.cs
index 612f3b0..c46471b 100644
--- a/SqlScriptDom/Parser/TSql/DatabaseOptionKindHelper.cs
+++ b/SqlScriptDom/Parser/TSql/DatabaseOptionKindHelper.cs
@@ -32,6 +32,10 @@ private DatabaseOptionKindHelper()
// 140 Options
AddOptionMapping(DatabaseOptionKind.AutomaticTuning, CodeGenerationSupporter.AutomaticTuning, SqlVersionFlags.TSql140AndAbove);
+
+ // 170 Options
+ AddOptionMapping(DatabaseOptionKind.ManualCutover, CodeGenerationSupporter.ManualCutover, SqlVersionFlags.TSql170AndAbove);
+ AddOptionMapping(DatabaseOptionKind.PerformCutover, CodeGenerationSupporter.PerformCutover, SqlVersionFlags.TSql170AndAbove);
}
internal static readonly DatabaseOptionKindHelper Instance = new DatabaseOptionKindHelper();
diff --git a/SqlScriptDom/Parser/TSql/SqlVersionFlags.cs b/SqlScriptDom/Parser/TSql/SqlVersionFlags.cs
index 522413d..23bb379 100644
--- a/SqlScriptDom/Parser/TSql/SqlVersionFlags.cs
+++ b/SqlScriptDom/Parser/TSql/SqlVersionFlags.cs
@@ -35,6 +35,7 @@ internal enum SqlVersionFlags
TSql140AndAbove = TSql140 | TSql150 | TSql160 | TSqlFabricDW | TSql170,
TSql150AndAbove = TSql150 | TSql160 | TSqlFabricDW | TSql170,
TSql160AndAbove = TSql160 | TSqlFabricDW | TSql170,
+ TSql170AndAbove = TSql170,
TSqlFabricDWAndAbove = TSql160 | TSqlFabricDW | TSql170,
TSqlUnder110 = TSql80 | TSql90 | TSql100,
TSqlUnder120 = TSql80 | TSql90 | TSql100 | TSql110,
diff --git a/SqlScriptDom/Parser/TSql/TSql170.g b/SqlScriptDom/Parser/TSql/TSql170.g
index 367fc11..b5b4a2b 100644
--- a/SqlScriptDom/Parser/TSql/TSql170.g
+++ b/SqlScriptDom/Parser/TSql/TSql170.g
@@ -2896,6 +2896,7 @@ alterDatabase [IToken tAlter] returns [AlterDatabaseStatement vResult = null]
| vResult = alterDbSet
| vResult = alterDbCollate
| vResult = alterDbRebuild // Undocumented - for PSS only
+ | vResult = alterDbPerformCutover
)
{
if(vUseCurrent)
@@ -3057,8 +3058,19 @@ alterDbModify returns [AlterDatabaseStatement vResult = null]
;
alterDbModifyAzureOptions returns [AlterDatabaseSetStatement vResult = FragmentFactory.CreateFragment()]
+{
+ bool hasManualCutover = false;
+}
:
azureOptions[vResult, vResult.Options]
+ (
+ With tManualCutover:Identifier
+ {
+ Match(tManualCutover, CodeGenerationSupporter.ManualCutover);
+ hasManualCutover = true;
+ vResult.WithManualCutover = true;
+ }
+ )?
;
// MODIFY File syntax
@@ -3143,6 +3155,14 @@ toFilegroup returns [Identifier vResult]
}
;
+alterDbPerformCutover returns [AlterDatabasePerformCutoverStatement vResult = FragmentFactory.CreateFragment()]
+ : tPerformCutover:Identifier
+ {
+ Match(tPerformCutover, CodeGenerationSupporter.PerformCutover);
+ UpdateTokenInfo(vResult, tPerformCutover);
+ }
+ ;
+
xactTermination returns [AlterDatabaseTermination vResult = FragmentFactory.CreateFragment()]
{
Literal vInteger;
diff --git a/SqlScriptDom/Parser/TSql/TSqlFabricDW.g b/SqlScriptDom/Parser/TSql/TSqlFabricDW.g
index 0923abc..137a318 100644
--- a/SqlScriptDom/Parser/TSql/TSqlFabricDW.g
+++ b/SqlScriptDom/Parser/TSql/TSqlFabricDW.g
@@ -29587,33 +29587,10 @@ rowguidcolConstraint [ColumnDefinition vParent]
;
identityConstraint [IndexAffectingStatement statementType] returns [IdentityOptions vResult = FragmentFactory.CreateFragment()]
-{
- ScalarExpression vExpression;
- bool vNotForReplication;
-}
: tIdentity:Identity
{
UpdateTokenInfo(vResult,tIdentity);
}
- (
- (LeftParenthesis seedIncrement)=> // necessary because select statement can start with LeftParenthesis
- LeftParenthesis vExpression=seedIncrement
- {
- vResult.IdentitySeed = vExpression;
- }
- Comma vExpression=seedIncrement
- {
- vResult.IdentityIncrement = vExpression;
- }
- tRParen:RightParenthesis
- {
- UpdateTokenInfo(vResult,tRParen);
- }
- )?
- vNotForReplication = replicationClauseOpt[statementType, vResult]
- {
- vResult.IsIdentityNotForReplication = vNotForReplication;
- }
;
// Same as column_definition in SQL YACC grammar
diff --git a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbPerformCutoverStatement.cs b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbPerformCutoverStatement.cs
new file mode 100644
index 0000000..e8b6393
--- /dev/null
+++ b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbPerformCutoverStatement.cs
@@ -0,0 +1,21 @@
+//------------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//------------------------------------------------------------------------------
+using System;
+
+using Microsoft.SqlServer.TransactSql.ScriptDom;
+
+namespace Microsoft.SqlServer.TransactSql.ScriptDom.ScriptGenerator
+{
+ partial class SqlScriptGeneratorVisitor
+ {
+ public override void ExplicitVisit(AlterDatabasePerformCutoverStatement node)
+ {
+ GenerateAlterDbStatementHead(node);
+
+ GenerateSpaceAndIdentifier(CodeGenerationSupporter.PerformCutover);
+ }
+ }
+}
diff --git a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbSetStatement.cs b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbSetStatement.cs
index 6ca6ef8..08499f9 100644
--- a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbSetStatement.cs
+++ b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.AlterDbSetStatement.cs
@@ -15,9 +15,11 @@ public override void ExplicitVisit(AlterDatabaseSetStatement node)
NewLineAndIndent();
bool azureOnlyOption = true;
- foreach(DatabaseOption option in node.Options)
+ foreach (DatabaseOption option in node.Options)
{
- if (option.OptionKind != DatabaseOptionKind.MaxSize && option.OptionKind != DatabaseOptionKind.Edition && option.OptionKind != DatabaseOptionKind.ServiceObjective)
+ if (option.OptionKind != DatabaseOptionKind.MaxSize &&
+ option.OptionKind != DatabaseOptionKind.Edition &&
+ option.OptionKind != DatabaseOptionKind.ServiceObjective)
{
azureOnlyOption = false;
break;
@@ -31,6 +33,13 @@ public override void ExplicitVisit(AlterDatabaseSetStatement node)
MarkAndPushAlignmentPoint(items);
GenerateParenthesisedCommaSeparatedList(node.Options, true);
PopAlignmentPoint();
+
+ // Emit "WITH MANUAL_CUTOVER" if the statement includes the optional manual cutover clause
+ if (node.WithManualCutover)
+ {
+ GenerateSpaceAndKeyword(TSqlTokenType.With);
+ GenerateSpaceAndIdentifier(CodeGenerationSupporter.ManualCutover);
+ }
}
else
{
diff --git a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.CreateColumnStoreIndexStatement.cs b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.CreateColumnStoreIndexStatement.cs
index d37ab56..cce64f4 100644
--- a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.CreateColumnStoreIndexStatement.cs
+++ b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.CreateColumnStoreIndexStatement.cs
@@ -36,8 +36,10 @@ public override void ExplicitVisit(CreateColumnStoreIndexStatement node)
GenerateParenthesisedCommaSeparatedList(node.Columns);
}
- // If clustered columstore index, generate ordered columns if any
- if(node.Clustered.GetValueOrDefault() && node.OrderedColumns != null && node.OrderedColumns.Count > 0)
+ // Generate ordered columns if any, for both clustered and non-clustered indexes
+ // If node.Clustered is null or false, it indicates index type is non-clustered.
+ // If node.Clustered is true, it indicates index type is clustered.
+ if (node.OrderedColumns != null && node.OrderedColumns.Count > 0)
{
GenerateSpaceAndKeyword(TSqlTokenType.Order);
GenerateParenthesisedCommaSeparatedList(node.OrderedColumns);
diff --git a/Test/SqlDom/Baselines170/AlterDatabaseManualCutoverTests170.sql b/Test/SqlDom/Baselines170/AlterDatabaseManualCutoverTests170.sql
new file mode 100644
index 0000000..71a106f
--- /dev/null
+++ b/Test/SqlDom/Baselines170/AlterDatabaseManualCutoverTests170.sql
@@ -0,0 +1,10 @@
+ALTER DATABASE db
+ MODIFY (SERVICE_OBJECTIVE = 'HS_Gen5_16') WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db
+ MODIFY (EDITION = 'Hyperscale') WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db
+ MODIFY (SERVICE_OBJECTIVE = ELASTIC_POOL (NAME = [hspool])) WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db PERFORM_CUTOVER;
diff --git a/Test/SqlDom/Baselines170/CreateColumnStoreIndexTests170.sql b/Test/SqlDom/Baselines170/CreateColumnStoreIndexTests170.sql
new file mode 100644
index 0000000..d9201bf
--- /dev/null
+++ b/Test/SqlDom/Baselines170/CreateColumnStoreIndexTests170.sql
@@ -0,0 +1,8 @@
+CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI
+ ON T(A, B, C) ORDER(A, B);
+
+CREATE COLUMNSTORE INDEX NCCI
+ ON T(A, B, C) ORDER(A, B);
+
+CREATE CLUSTERED COLUMNSTORE INDEX CCI
+ ON T ORDER(A, B);
diff --git a/Test/SqlDom/BaselinesFabricDW/IdentityColumnTestsFabricDW.sql b/Test/SqlDom/BaselinesFabricDW/IdentityColumnTestsFabricDW.sql
new file mode 100644
index 0000000..43988f9
--- /dev/null
+++ b/Test/SqlDom/BaselinesFabricDW/IdentityColumnTestsFabricDW.sql
@@ -0,0 +1,27 @@
+CREATE TABLE table1 (
+ ID BIGINT IDENTITY
+);
+
+
+GO
+CREATE TABLE Employees (
+ EmployeeID BIGINT IDENTITY,
+ FirstName NVARCHAR (50),
+ LastName NVARCHAR (50)
+);
+
+
+GO
+CREATE TABLE Orders (
+ OrderID INT IDENTITY,
+ CustomerName VARCHAR (100) ,
+ OrderDate DATETIME ,
+ TotalAmount DECIMAL (10, 2)
+);
+
+
+GO
+CREATE TABLE Products (
+ ProductID BIGINT IDENTITY,
+ ProductName NVARCHAR (100)
+);
\ No newline at end of file
diff --git a/Test/SqlDom/CommonSyntaxTests.cs b/Test/SqlDom/CommonSyntaxTests.cs
index 39fa64e..8b280db 100644
--- a/Test/SqlDom/CommonSyntaxTests.cs
+++ b/Test/SqlDom/CommonSyntaxTests.cs
@@ -7,6 +7,8 @@
using Microsoft.SqlServer.TransactSql.ScriptDom;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SqlStudio.Tests.AssemblyTools.TestCategory;
+using System;
+using System.Collections.Generic;
namespace SqlStudio.Tests.UTSqlScriptDom
{
@@ -238,8 +240,23 @@ public void CommonSyntaxInFabricDWParserTest()
TSqlFabricDWParser parser = new TSqlFabricDWParser(true);
SqlScriptGenerator scriptGen = ParserTestUtils.CreateScriptGen(SqlVersion.SqlFabricDW);
+ // Some syntaxes that are not supported in Fabric DW
+ var skippedTests = new HashSet(StringComparer.OrdinalIgnoreCase)
+ {
+ "ColumnDefinitionTests.sql",
+ "IntegerTests.sql",
+ "TSqlParserTestScript1.sql",
+ "TSqlParserTestScript2.sql",
+ "ExpressionTests.sql"
+ };
+
foreach (ParserTest ti in CommonTestInfos)
{
+ if (skippedTests.Contains(ti._scriptFilename))
+ {
+ continue; // Skip tests that are not applicable to Fabric DW
+ }
+
ParserTest.ParseAndVerify(parser, scriptGen, ti._scriptFilename, ti._resultFabricDW);
}
}
diff --git a/Test/SqlDom/Only170SyntaxTests.cs b/Test/SqlDom/Only170SyntaxTests.cs
index 4b352d5..bd84d40 100644
--- a/Test/SqlDom/Only170SyntaxTests.cs
+++ b/Test/SqlDom/Only170SyntaxTests.cs
@@ -9,7 +9,9 @@ public partial class SqlDomTests
// Note: These filenames are case sensitive, make sure they match the checked-in file exactly
private static readonly ParserTest[] Only170TestInfos =
{
- new ParserTest170("RegexpTVFTests170.sql", nErrors80: 1, nErrors90: 1, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0)
+ new ParserTest170("RegexpTVFTests170.sql", nErrors80: 1, nErrors90: 1, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0),
+ new ParserTest170("AlterDatabaseManualCutoverTests170.sql", nErrors80: 4, nErrors90: 4, nErrors100: 4, nErrors110: 4, nErrors120: 4, nErrors130: 4, nErrors140: 4, nErrors150: 4, nErrors160: 4),
+ new ParserTest170("CreateColumnStoreIndexTests170.sql", nErrors80: 3, nErrors90: 3, nErrors100: 3, nErrors110: 3, nErrors120: 3, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0)
};
private static readonly ParserTest[] SqlAzure170_TestInfos =
diff --git a/Test/SqlDom/OnlyFabricDWSyntaxTests.cs b/Test/SqlDom/OnlyFabricDWSyntaxTests.cs
index 58537c4..043340e 100644
--- a/Test/SqlDom/OnlyFabricDWSyntaxTests.cs
+++ b/Test/SqlDom/OnlyFabricDWSyntaxTests.cs
@@ -10,10 +10,11 @@ public partial class SqlDomTests
private static readonly ParserTest[] OnlyFabricDWTestInfos =
{
new ParserTestFabricDW("CloneTableTestsFabricDW.sql", nErrors80: 4, nErrors90: 4, nErrors100: 4, nErrors110: 4, nErrors120: 4, nErrors130: 4, nErrors140: 4, nErrors150: 4, nErrors160: 4, nErrors170: 4),
- new ParserTestFabricDW("CreateProcedureCloneTableTestsFabricDW.sql", nErrors80: 4, nErrors90: 4, nErrors100: 4, nErrors110: 4, nErrors120: 4, nErrors130: 4, nErrors140: 4, nErrors150: 4, nErrors160: 4, nErrors170: 4),
- new ParserTestFabricDW("ScalarFunctionTestsFabricDW.sql", nErrors80: 3, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0, nErrors170: 0),
new ParserTestFabricDW("CreateAlterTableClusterByTestsFabricDW.sql", nErrors80: 6, nErrors90: 6, nErrors100: 6, nErrors110: 6, nErrors120: 6, nErrors130: 6, nErrors140: 6, nErrors150: 6, nErrors160: 6, nErrors170: 6),
new ParserTestFabricDW("CreateExternalTableStatementTestsFabricDW.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2, nErrors160: 0, nErrors170: 0),
+ new ParserTestFabricDW("CreateProcedureCloneTableTestsFabricDW.sql", nErrors80: 4, nErrors90: 4, nErrors100: 4, nErrors110: 4, nErrors120: 4, nErrors130: 4, nErrors140: 4, nErrors150: 4, nErrors160: 4, nErrors170: 4),
+ new ParserTestFabricDW("IdentityColumnTestsFabricDW.sql", nErrors80: 0, nErrors90: 0, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0, nErrors170: 0),
+ new ParserTestFabricDW("ScalarFunctionTestsFabricDW.sql", nErrors80: 3, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 0, nErrors140: 0, nErrors150: 0, nErrors160: 0, nErrors170: 0)
};
[TestMethod]
diff --git a/Test/SqlDom/ParserErrorsTests.cs b/Test/SqlDom/ParserErrorsTests.cs
index 7474efd..57f6264 100644
--- a/Test/SqlDom/ParserErrorsTests.cs
+++ b/Test/SqlDom/ParserErrorsTests.cs
@@ -3524,9 +3524,17 @@ public void NotForReplicationNotAllowedInTableVariablesFunctionsTypesErrorTest()
new ParserErrorInfo(39, "SQL46010", "not"));
// Column identity constraint
- ParserTestUtils.ErrorTestAllParsers("declare @v1 table (c1 int identity(1,1) not for replication)",
+ ParserTestUtils.ErrorTestAllParsersUntil150("declare @v1 table (c1 int identity(1,1) not for replication)",
new ParserErrorInfo(40, "SQL46010", "not"));
- ParserTestUtils.ErrorTestAllParsers("create function f1() returns @v1 table (c1 int identity(1,1) not for replication) begin return end",
+ ParserTestUtils.ErrorTest160("declare @v1 table (c1 int identity(1,1) not for replication)",
+ new ParserErrorInfo(40, "SQL46010", "not"));
+ ParserTestUtils.ErrorTest170("declare @v1 table (c1 int identity(1,1) not for replication)",
+ new ParserErrorInfo(40, "SQL46010", "not"));
+ ParserTestUtils.ErrorTestAllParsersUntil150("create function f1() returns @v1 table (c1 int identity(1,1) not for replication) begin return end",
+ new ParserErrorInfo(61, "SQL46010", "not"));
+ ParserTestUtils.ErrorTest160("create function f1() returns @v1 table (c1 int identity(1,1) not for replication) begin return end",
+ new ParserErrorInfo(61, "SQL46010", "not"));
+ ParserTestUtils.ErrorTest170("create function f1() returns @v1 table (c1 int identity(1,1) not for replication) begin return end",
new ParserErrorInfo(61, "SQL46010", "not"));
ParserTestUtils.ErrorTest100("create type t1 as table (c1 int identity(1,1) not for replication)",
new ParserErrorInfo(46, "SQL46010", "not"));
@@ -6838,7 +6846,6 @@ RETURNS NVARCHAR(101)
RETURN @first + ' ' + @last
END;";
ParserTestUtils.ErrorTestFabricDW(scalarFunctionSyntax2, new ParserErrorInfo(scalarFunctionSyntax2.IndexOf("INLINE"), "SQL46010", "INLINE"));
-
string scalarFunctionSyntax3 = @"CREATE OR ALTER FUNCTION dbo.CountProducts
(
@ProductTable AS dbo.ProductType READONLY
@@ -6868,5 +6875,28 @@ FROM @SalesData
END;";
ParserTestUtils.ErrorTestFabricDW(scalarFunctionSyntax4, new ParserErrorInfo(scalarFunctionSyntax4.IndexOf("NULL"), "SQL46010", "NULL"));
}
+
+ ///
+ /// Negative tests for Scalar Functions in Fabric DW.
+ ///
+ [TestMethod]
+ [Priority(0)]
+ [SqlStudioTestCategory(Category.UnitTest)]
+ public void IdentityColumnNegativeTestsFabricDW()
+ {
+ string identityColumnSyntax = @"CREATE TABLE TestTable1 (
+ ID INT IDENTITY(1,1),
+ Name VARCHAR(50)
+ );
+ ";
+ ParserTestUtils.ErrorTestFabricDW(identityColumnSyntax, new ParserErrorInfo(identityColumnSyntax.IndexOf("IDENTITY(") + 8, "SQL46010", "("));
+
+ string identityColumnSyntax2 = @"CREATE TABLE TestTable2 (
+ RecordID BIGINT IDENTITY(100,5),
+ Description NVARCHAR(200)
+ );
+ ";
+ ParserTestUtils.ErrorTestFabricDW(identityColumnSyntax2, new ParserErrorInfo(identityColumnSyntax2.IndexOf("IDENTITY(") + 8, "SQL46010", "("));
+ }
}
}
diff --git a/Test/SqlDom/TestScripts/AlterDatabaseManualCutoverTests170.sql b/Test/SqlDom/TestScripts/AlterDatabaseManualCutoverTests170.sql
new file mode 100644
index 0000000..71a106f
--- /dev/null
+++ b/Test/SqlDom/TestScripts/AlterDatabaseManualCutoverTests170.sql
@@ -0,0 +1,10 @@
+ALTER DATABASE db
+ MODIFY (SERVICE_OBJECTIVE = 'HS_Gen5_16') WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db
+ MODIFY (EDITION = 'Hyperscale') WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db
+ MODIFY (SERVICE_OBJECTIVE = ELASTIC_POOL (NAME = [hspool])) WITH MANUAL_CUTOVER;
+
+ALTER DATABASE db PERFORM_CUTOVER;
diff --git a/Test/SqlDom/TestScripts/CreateColumnStoreIndexTests170.sql b/Test/SqlDom/TestScripts/CreateColumnStoreIndexTests170.sql
new file mode 100644
index 0000000..d9201bf
--- /dev/null
+++ b/Test/SqlDom/TestScripts/CreateColumnStoreIndexTests170.sql
@@ -0,0 +1,8 @@
+CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI
+ ON T(A, B, C) ORDER(A, B);
+
+CREATE COLUMNSTORE INDEX NCCI
+ ON T(A, B, C) ORDER(A, B);
+
+CREATE CLUSTERED COLUMNSTORE INDEX CCI
+ ON T ORDER(A, B);
diff --git a/Test/SqlDom/TestScripts/IdentityColumnTestsFabricDW.sql b/Test/SqlDom/TestScripts/IdentityColumnTestsFabricDW.sql
new file mode 100644
index 0000000..43988f9
--- /dev/null
+++ b/Test/SqlDom/TestScripts/IdentityColumnTestsFabricDW.sql
@@ -0,0 +1,27 @@
+CREATE TABLE table1 (
+ ID BIGINT IDENTITY
+);
+
+
+GO
+CREATE TABLE Employees (
+ EmployeeID BIGINT IDENTITY,
+ FirstName NVARCHAR (50),
+ LastName NVARCHAR (50)
+);
+
+
+GO
+CREATE TABLE Orders (
+ OrderID INT IDENTITY,
+ CustomerName VARCHAR (100) ,
+ OrderDate DATETIME ,
+ TotalAmount DECIMAL (10, 2)
+);
+
+
+GO
+CREATE TABLE Products (
+ ProductID BIGINT IDENTITY,
+ ProductName NVARCHAR (100)
+);
\ No newline at end of file
diff --git a/global.json b/global.json
index 17e2f86..0e56f42 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.410",
+ "version": "8.0.411",
"rollForward": "latestMajor"
},
"msbuild-sdks": {