diff --git a/SqlScriptDom/Parser/TSql/Ast.xml b/SqlScriptDom/Parser/TSql/Ast.xml
index 40b2502..24ef837 100644
--- a/SqlScriptDom/Parser/TSql/Ast.xml
+++ b/SqlScriptDom/Parser/TSql/Ast.xml
@@ -3552,12 +3552,14 @@
+
+
diff --git a/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs b/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
index 771b07e..918e01c 100644
--- a/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
+++ b/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs
@@ -1065,6 +1065,7 @@ internal static class CodeGenerationSupporter
internal const string VardecimalStorageFormat = "VARDECIMAL_STORAGE_FORMAT";
internal const string Varp = "VARP";
internal const string VDevNo = "VDEVNO";
+ internal const string Vector = "Vector";
internal const string Verbose = "VERBOSE";
internal const string VerboseLogging = "VerboseLogging";
internal const string VerifyOnly = "VERIFYONLY";
diff --git a/SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs b/SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs
index 153fcd2..6952562 100644
--- a/SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs
+++ b/SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs
@@ -250,6 +250,11 @@ public enum SqlDataTypeOption
///
Json = 34,
+ ///
+ /// Vector data type
+ ///
+ Vector = 35,
+
#endregion
}
diff --git a/SqlScriptDom/Parser/TSql/TSql130.g b/SqlScriptDom/Parser/TSql/TSql130.g
index 4398eef..569911b 100644
--- a/SqlScriptDom/Parser/TSql/TSql130.g
+++ b/SqlScriptDom/Parser/TSql/TSql130.g
@@ -17649,7 +17649,7 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
ValueExpression vSinceVersion;
vResult.Target = vTarget;
}
- : vSinceVersion = integerOrVariable
+ : (vSinceVersion = integerOrVariable
{
vResult.SinceVersion = vSinceVersion;
}
@@ -17658,6 +17658,13 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
{
vResult.SinceVersion = vSinceVersion;
}
+ )
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionTableReference vResult = FragmentFactory.CreateFragment()]
@@ -17671,6 +17678,12 @@ versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionT
{
UpdateTokenInfo(vResult, tRParen);
}
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
subDmlTableReference [SubDmlFlags subDmlFlags] returns [DataModificationTableReference vResult = FragmentFactory.CreateFragment()]
diff --git a/SqlScriptDom/Parser/TSql/TSql140.g b/SqlScriptDom/Parser/TSql/TSql140.g
index c1c2b55..369cbfe 100644
--- a/SqlScriptDom/Parser/TSql/TSql140.g
+++ b/SqlScriptDom/Parser/TSql/TSql140.g
@@ -18323,7 +18323,7 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
ValueExpression vSinceVersion;
vResult.Target = vTarget;
}
- : vSinceVersion = integerOrVariable
+ : (vSinceVersion = integerOrVariable
{
vResult.SinceVersion = vSinceVersion;
}
@@ -18332,6 +18332,13 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
{
vResult.SinceVersion = vSinceVersion;
}
+ )
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionTableReference vResult = FragmentFactory.CreateFragment()]
@@ -18345,8 +18352,14 @@ versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionT
{
UpdateTokenInfo(vResult, tRParen);
}
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
-
+
subDmlTableReference [SubDmlFlags subDmlFlags] returns [DataModificationTableReference vResult = FragmentFactory.CreateFragment()]
{
DataModificationSpecification vSpec;
diff --git a/SqlScriptDom/Parser/TSql/TSql150.g b/SqlScriptDom/Parser/TSql/TSql150.g
index 9682d20..cc0f272 100644
--- a/SqlScriptDom/Parser/TSql/TSql150.g
+++ b/SqlScriptDom/Parser/TSql/TSql150.g
@@ -19025,7 +19025,7 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
ValueExpression vSinceVersion;
vResult.Target = vTarget;
}
- : vSinceVersion = integerOrVariable
+ : (vSinceVersion = integerOrVariable
{
vResult.SinceVersion = vSinceVersion;
}
@@ -19034,6 +19034,13 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
{
vResult.SinceVersion = vSinceVersion;
}
+ )
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionTableReference vResult = FragmentFactory.CreateFragment()]
@@ -19047,6 +19054,12 @@ versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionT
{
UpdateTokenInfo(vResult, tRParen);
}
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
subDmlTableReference [SubDmlFlags subDmlFlags] returns [DataModificationTableReference vResult = FragmentFactory.CreateFragment()]
diff --git a/SqlScriptDom/Parser/TSql/TSql160.g b/SqlScriptDom/Parser/TSql/TSql160.g
index 7bcc38c..11f82a2 100644
--- a/SqlScriptDom/Parser/TSql/TSql160.g
+++ b/SqlScriptDom/Parser/TSql/TSql160.g
@@ -19135,7 +19135,7 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
ValueExpression vSinceVersion;
vResult.Target = vTarget;
}
- : vSinceVersion = integerOrVariable
+ : (vSinceVersion = integerOrVariable
{
vResult.SinceVersion = vSinceVersion;
}
@@ -19144,6 +19144,13 @@ changesChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableChangesT
{
vResult.SinceVersion = vSinceVersion;
}
+ )
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionTableReference vResult = FragmentFactory.CreateFragment()]
@@ -19157,6 +19164,12 @@ versionChangeTableParams [SchemaObjectName vTarget] returns [ChangeTableVersionT
{
UpdateTokenInfo(vResult, tRParen);
}
+ (Comma tHint:Identifier
+ {
+ Match(tHint, CodeGenerationSupporter.ForceSeek);
+ vResult.ForceSeek = true;
+ }
+ )?
;
subDmlTableReference [SubDmlFlags subDmlFlags] returns [DataModificationTableReference vResult = FragmentFactory.CreateFragment()]
diff --git a/SqlScriptDom/Parser/TSql/TSql160ParserBaseInternal.cs b/SqlScriptDom/Parser/TSql/TSql160ParserBaseInternal.cs
index f5ddc80..4dd2554 100644
--- a/SqlScriptDom/Parser/TSql/TSql160ParserBaseInternal.cs
+++ b/SqlScriptDom/Parser/TSql/TSql160ParserBaseInternal.cs
@@ -62,6 +62,8 @@ protected static SqlDataTypeOption ParseDataType160(string token)
{
case "JSON":
return SqlDataTypeOption.Json;
+ case "VECTOR":
+ return SqlDataTypeOption.Vector;
default:
return ParseDataType100(token);
}
diff --git a/SqlScriptDom/Parser/TSql/TSql80ParserBaseInternal.cs b/SqlScriptDom/Parser/TSql/TSql80ParserBaseInternal.cs
index 35dfc54..120adcc 100644
--- a/SqlScriptDom/Parser/TSql/TSql80ParserBaseInternal.cs
+++ b/SqlScriptDom/Parser/TSql/TSql80ParserBaseInternal.cs
@@ -186,7 +186,8 @@ internal abstract class TSql80ParserBaseInternal : antlr.LLkParser
SqlDataTypeOption.Char, SqlDataTypeOption.VarChar, SqlDataTypeOption.NChar,
SqlDataTypeOption.NVarChar, SqlDataTypeOption.Decimal, SqlDataTypeOption.Float,
SqlDataTypeOption.Numeric, SqlDataTypeOption.Binary, SqlDataTypeOption.VarBinary,
- SqlDataTypeOption.Time, SqlDataTypeOption.DateTime2, SqlDataTypeOption.DateTimeOffset
+ SqlDataTypeOption.Time, SqlDataTypeOption.DateTime2, SqlDataTypeOption.DateTimeOffset,
+ SqlDataTypeOption.Vector
};
#region Constructors
diff --git a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.ChangeTableTableSource.cs b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.ChangeTableTableSource.cs
index 687553a..ac6be7c 100644
--- a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.ChangeTableTableSource.cs
+++ b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.ChangeTableTableSource.cs
@@ -21,7 +21,11 @@ public override void ExplicitVisit(ChangeTableChangesTableReference node)
{
GenerateChangeTablePrefix(node.Target, CodeGenerationSupporter.Changes);
GenerateFragmentIfNotNull(node.SinceVersion);
-
+ if (node.ForceSeek)
+ {
+ GenerateSymbolAndSpace(TSqlTokenType.Comma);
+ GenerateIdentifier(CodeGenerationSupporter.ForceSeek);
+ }
GenerateSymbol(TSqlTokenType.RightParenthesis);
GenerateTableAndColumnAliases(node);
}
@@ -32,7 +36,11 @@ public override void ExplicitVisit(ChangeTableVersionTableReference node)
GenerateParenthesisedCommaSeparatedList(node.PrimaryKeyColumns);
GenerateSymbolAndSpace(TSqlTokenType.Comma);
GenerateParenthesisedCommaSeparatedList(node.PrimaryKeyValues);
-
+ if (node.ForceSeek)
+ {
+ GenerateSymbolAndSpace(TSqlTokenType.Comma);
+ GenerateIdentifier(CodeGenerationSupporter.ForceSeek);
+ }
GenerateSymbol(TSqlTokenType.RightParenthesis);
GenerateTableAndColumnAliases(node);
}
diff --git a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.SqlDataType.cs b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.SqlDataType.cs
index 3dabe29..5ec9440 100644
--- a/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.SqlDataType.cs
+++ b/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.SqlDataType.cs
@@ -46,6 +46,7 @@ partial class SqlScriptGeneratorVisitor
{ SqlDataTypeOption.DateTimeOffset, new IdentifierGenerator(CodeGenerationSupporter.DateTimeOffset) },
{ SqlDataTypeOption.Rowversion, new IdentifierGenerator(CodeGenerationSupporter.Rowversion) },
{ SqlDataTypeOption.Json, new IdentifierGenerator(CodeGenerationSupporter.Json) },
+ { SqlDataTypeOption.Vector, new IdentifierGenerator(CodeGenerationSupporter.Vector) },
};
public override void ExplicitVisit(SqlDataTypeReference node)
diff --git a/Test/SqlDom/Baselines150/FromClauseTests150.sql b/Test/SqlDom/Baselines150/FromClauseTests150.sql
index 317dd7e..b7a5b47 100644
--- a/Test/SqlDom/Baselines150/FromClauseTests150.sql
+++ b/Test/SqlDom/Baselines150/FromClauseTests150.sql
@@ -21,3 +21,35 @@ FROM (VALUES ('Lorem ipsum'), ('dolor sit amet.')) AS x(col) CROSS APPLY STRING_
SELECT ordinal
FROM (VALUES ('Lorem ipsum'), ('dolor sit amet.')) AS x(col) CROSS APPLY STRING_SPLIT (col, ',', 1);
+
+SELECT *
+FROM CHANGETABLE(CHANGES t1, 10, FORCESEEK) AS a;
+
+DELETE t1
+FROM CHANGETABLE(CHANGES dbo.t1, @v1, FORCESEEK) AS a(c1);
+
+UPDATE t1
+SET c1 = 10
+FROM CHANGETABLE(CHANGES d1.dbo.t1, NULL, FORCESEEK) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION s1.d1.dbo.t1, (c1), (1), FORCESEEK) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION z..t1, (c1, c2), ('a', 'b'), FORCESEEK) AS a(z1, z2);
+
+SELECT *
+FROM CHANGETABLE(CHANGES t1, 10) AS a;
+
+DELETE t1
+FROM CHANGETABLE(CHANGES dbo.t1, @v1) AS a(c1);
+
+UPDATE t1
+SET c1 = 10
+FROM CHANGETABLE(CHANGES d1.dbo.t1, NULL) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION s1.d1.dbo.t1, (c1), (1)) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION z..t1, (c1, c2), ('a', 'b')) AS a(z1, z2);
\ No newline at end of file
diff --git a/Test/SqlDom/Baselines160/AlterTableStatementTests160.sql b/Test/SqlDom/Baselines160/AlterTableStatementTests160.sql
new file mode 100644
index 0000000..167b754
--- /dev/null
+++ b/Test/SqlDom/Baselines160/AlterTableStatementTests160.sql
@@ -0,0 +1,4 @@
+ALTER TABLE T
+ ADD jsonCol JSON;
+
+ALTER TABLE T ALTER COLUMN col JSON;
\ No newline at end of file
diff --git a/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql b/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql
new file mode 100644
index 0000000..d190752
--- /dev/null
+++ b/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql
@@ -0,0 +1,19 @@
+CREATE FUNCTION [ParameterizedFunction]
+(@parameter_name1 JSON)
+RETURNS JSON
+AS
+BEGIN
+ RETURN '[30]';
+END
+
+
+GO
+CREATE FUNCTION [ParameterizedVectorFunction]
+(@parameter_name1 VECTOR (2))
+RETURNS VECTOR (2)
+AS
+BEGIN
+ DECLARE @v1 AS VECTOR (2);
+ SET @v1 = CAST (N'[1,1]' AS VECTOR (2));
+ RETURN @v1;
+END
\ No newline at end of file
diff --git a/Test/SqlDom/Baselines160/CreateProcedureStatementTests160.sql b/Test/SqlDom/Baselines160/CreateProcedureStatementTests160.sql
new file mode 100644
index 0000000..179241b
Binary files /dev/null and b/Test/SqlDom/Baselines160/CreateProcedureStatementTests160.sql differ
diff --git a/Test/SqlDom/Baselines160/CreateTableTests160.sql b/Test/SqlDom/Baselines160/CreateTableTests160.sql
index ba968d4..ce12d1b 100644
--- a/Test/SqlDom/Baselines160/CreateTableTests160.sql
+++ b/Test/SqlDom/Baselines160/CreateTableTests160.sql
@@ -37,6 +37,10 @@ CREATE TABLE t3 (
)
WITH (XML_COMPRESSION = ON, DATA_COMPRESSION = PAGE);
+CREATE TABLE t4 (
+ c1 VECTOR (10)
+);
+
CREATE TABLE myTable1_HASH_MCD (
id INT NOT NULL,
lastName VARCHAR (20),
diff --git a/Test/SqlDom/Baselines160/ExpressionTests160.sql b/Test/SqlDom/Baselines160/ExpressionTests160.sql
new file mode 100644
index 0000000..cab1372
--- /dev/null
+++ b/Test/SqlDom/Baselines160/ExpressionTests160.sql
@@ -0,0 +1,55 @@
+SELECT CONVERT (JSON, CONVERT (CHAR (300), '{}'));
+
+SELECT CONVERT (JSON, CONVERT (NCHAR (300), '{}'));
+
+SELECT CONVERT (JSON, CONVERT (VARCHAR (MAX), '{}'));
+
+SELECT CONVERT (JSON, CONVERT (NVARCHAR (300), '{}'));
+
+SELECT CONVERT (CHAR (300), CONVERT (JSON, '{}'));
+
+SELECT CONVERT (NCHAR (300), CONVERT (JSON, '{}'));
+
+SELECT CONVERT (VARCHAR (300), CONVERT (JSON, '{}'));
+
+SELECT CONVERT (NVARCHAR (MAX), CONVERT (JSON, '{}'));
+
+SELECT CAST (CAST ('{}' AS CHAR (300)) AS JSON);
+
+SELECT CAST (CAST ('{}' AS NCHAR (300)) AS JSON);
+
+SELECT CAST (CAST ('{}' AS VARCHAR (MAX)) AS JSON);
+
+SELECT CAST (CAST ('{}' AS NVARCHAR (300)) AS JSON);
+
+SELECT CAST (CAST ('{}' AS JSON) AS CHAR (300));
+
+SELECT CAST (CAST ('{}' AS JSON) AS NCHAR (300));
+
+SELECT CAST (CAST ('{}' AS JSON) AS VARCHAR (300));
+
+SELECT CAST (CAST ('{}' AS JSON) AS NVARCHAR (MAX));
+
+SELECT CONVERT (VECTOR (2), CONVERT (VARCHAR (MAX), '[1,1]'));
+
+SELECT CONVERT (VECTOR (2), CONVERT (NVARCHAR (MAX), N'[1,1]'));
+
+SELECT CONVERT (VECTOR (2), CONVERT (JSON, '[1,1]'));
+
+SELECT CAST (CAST ('[1,1]' AS VARCHAR (MAX)) AS VECTOR (2));
+
+SELECT CAST (CAST (N'[1,1]' AS NVARCHAR (MAX)) AS VECTOR (2));
+
+SELECT CAST (CAST ('[1,1]' AS JSON) AS VECTOR (2));
+
+SELECT CONVERT (VARCHAR (MAX), CONVERT (VECTOR (3), '[0.1, 0.2, 0.1]'));
+
+SELECT CONVERT (NVARCHAR (MAX), CONVERT (VECTOR (3), '[0.1, 0.2, 0.1]'));
+
+SELECT CONVERT (JSON, CONVERT (VECTOR (3), '[0.1, 0.2, 0.1]'));
+
+SELECT CAST (CAST ('[0.1, 0.1, 0.1]' AS VECTOR (3)) AS VARCHAR (MAX));
+
+SELECT CAST (CAST ('[0.1, 0.1, 0.1]' AS VECTOR (3)) AS NVARCHAR (MAX));
+
+SELECT CAST (CAST ('[0.1, 0.1, 0.1]' AS VECTOR (3)) AS JSON);
diff --git a/Test/SqlDom/Only150SyntaxTests.cs b/Test/SqlDom/Only150SyntaxTests.cs
index 45fb9a6..4d07570 100644
--- a/Test/SqlDom/Only150SyntaxTests.cs
+++ b/Test/SqlDom/Only150SyntaxTests.cs
@@ -48,7 +48,7 @@ The parser terminates on that batch itself without parsing the rest of the batch
new ParserTest150("CreateExternalLanguage150.sql", 2, 2, 2, 2, 2, 4, 4),
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("FromClauseTests150.sql", 12, 12, 5, 5, 5, 0, 0),
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 21cd98b..a52b8e6 100644
--- a/Test/SqlDom/Only160SyntaxTests.cs
+++ b/Test/SqlDom/Only160SyntaxTests.cs
@@ -15,6 +15,8 @@ public partial class SqlDomTests
// Note: These filenames are case sensitive, make sure they match the checked-in file exactly
private static readonly ParserTest[] Only160TestInfos =
{
+ new ParserTest160("AlterTableStatementTests160.sql", nErrors80: 0, nErrors90: 0, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0),
+ new ParserTest160("ExpressionTests160.sql", nErrors80: 1, nErrors90: 0, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0),
new ParserTest160("CreateUserFromExternalProvider160.sql", nErrors80: 2, nErrors90: 1, nErrors100: 1, nErrors110: 1, nErrors120: 1, nErrors130: 1, nErrors140: 1, nErrors150: 1),
new ParserTest160("CreateExternalTableStatementTests160.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 2, nErrors140: 2, nErrors150: 2),
new ParserTest160("WindowClauseTests160.sql", nErrors80: 14, nErrors90: 13, nErrors100: 13, nErrors110: 13, nErrors120: 13, nErrors130: 13, nErrors140: 13, nErrors150: 13),
@@ -25,6 +27,8 @@ public partial class SqlDomTests
new ParserTest160("MergeStatementTests160.sql", nErrors80: 1, nErrors90: 5, nErrors100: 5, nErrors110: 5, nErrors120: 5, nErrors130: 5, nErrors140: 5, nErrors150: 5),
new ParserTest160("SelectStatementTests160.sql", nErrors80: 5, nErrors90: 5, nErrors100: 5, nErrors110: 5, nErrors120: 5, nErrors130: 5, nErrors140: 5, nErrors150: 5),
new ParserTest160("CreateTableTests160.sql", nErrors80: 11, nErrors90: 11, nErrors100: 11, nErrors110: 11, nErrors120: 11, nErrors130: 7, nErrors140: 7, nErrors150: 7),
+ new ParserTest160("CreateFunctionStatementTests160.sql", nErrors80: 0, nErrors90: 0, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0),
+ new ParserTest160("CreateProcedureStatementTests160.sql", nErrors80: 0, nErrors90: 0, nErrors100: 0, nErrors110: 0, nErrors120: 0, nErrors130: 0, nErrors140: 0, nErrors150: 0),
new ParserTest160("OpenRowsetStatementTests160.sql", nErrors80: 9, nErrors90: 9, nErrors100: 9, nErrors110: 9, nErrors120: 9, nErrors130: 9, nErrors140: 9, nErrors150: 3),
new ParserTest160("WithinGroupTests160.sql", nErrors80: 2, nErrors90: 2, nErrors100: 2, nErrors110: 2, nErrors120: 2, nErrors130: 0, nErrors140: 0, nErrors150: 0),
// Built-in functions with valid opening and closing parantheses are recognized by default for all parser versions
diff --git a/Test/SqlDom/TestScripts/AlterTableStatementTests160.sql b/Test/SqlDom/TestScripts/AlterTableStatementTests160.sql
new file mode 100644
index 0000000..bb38c9a
--- /dev/null
+++ b/Test/SqlDom/TestScripts/AlterTableStatementTests160.sql
@@ -0,0 +1,8 @@
+-- Alter table add a Json column
+--
+ALTER TABLE T ADD jsonCol JSON;
+
+-- Alter table change column data type to Json
+--
+ALTER TABLE T ALTER COLUMN col JSON;
+GO
\ No newline at end of file
diff --git a/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql b/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql
new file mode 100644
index 0000000..1790258
--- /dev/null
+++ b/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql
@@ -0,0 +1,23 @@
+-- Create function with Json data type.
+CREATE FUNCTION [ParameterizedFunction]
+(
+ @parameter_name1 [json]
+) RETURNS json
+AS
+ BEGIN
+ RETURN '[30]';
+ END
+GO
+
+-- Create function with vector data type.
+CREATE FUNCTION [ParameterizedVectorFunction]
+(
+ @parameter_name1 vector(2)
+) RETURNS vector(2)
+AS
+ BEGIN
+ DECLARE @v1 vector(2);
+ SET @v1 = CAST(N'[1,1]' AS vector(2));
+ RETURN @v1;
+ END
+GO
\ No newline at end of file
diff --git a/Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql b/Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql
new file mode 100644
index 0000000..b3e28d0
Binary files /dev/null and b/Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql differ
diff --git a/Test/SqlDom/TestScripts/CreateTableTests160.sql b/Test/SqlDom/TestScripts/CreateTableTests160.sql
index 7f21bbb..ec9649b 100644
--- a/Test/SqlDom/TestScripts/CreateTableTests160.sql
+++ b/Test/SqlDom/TestScripts/CreateTableTests160.sql
@@ -24,6 +24,9 @@ CREATE TABLE t1 (c1 INT)
CREATE TABLE t3 (c1 INT)
WITH (XML_COMPRESSION = ON, DATA_COMPRESSION = PAGE);
+-- Table with vector column
+CREATE TABLE t4 (c1 vector(10))
+
-- Table - Multi Column Distribution
--
CREATE TABLE myTable1_HASH_MCD (
diff --git a/Test/SqlDom/TestScripts/ExpressionTests160.sql b/Test/SqlDom/TestScripts/ExpressionTests160.sql
new file mode 100644
index 0000000..974320f
--- /dev/null
+++ b/Test/SqlDom/TestScripts/ExpressionTests160.sql
@@ -0,0 +1,83 @@
+-- test convert from char to Json
+select convert(json, convert(char(300),'{}'))
+
+-- test convert from nchar to Json
+select convert(json, convert(nchar(300),'{}'))
+
+-- test convert from varchar to Json
+select convert(json, convert(varchar(max),'{}'))
+
+-- test convert from nvarchar to Json
+select convert(json, convert(nvarchar(300),'{}'))
+
+-- test convert from Json to char
+select convert(char(300), convert(json,'{}'))
+
+-- test convert from Json to nchar
+select convert(nchar(300), convert(json,'{}'))
+
+-- test convert from Json to varchar
+select convert(varchar(300), convert(json,'{}'))
+
+-- test convert from Json to nvarchar
+select convert(nvarchar(max), convert(json,'{}'))
+
+-- test cast char to Json
+select cast(cast('{}' as char(300)) as json)
+
+-- test cast nchar to Json
+select cast(cast('{}' as nchar(300)) as json)
+
+-- test cast varchar to Json
+select cast(cast('{}' as varchar(max)) as json)
+
+-- test cast nvarchar to Json
+select cast(cast('{}' as nvarchar(300)) as json)
+
+-- test cast Json to char
+select cast(cast('{}' as json) as char(300))
+
+-- test cast Json to nchar
+select cast(cast('{}' as json) as nchar(300))
+
+-- test cast Json to varchar
+select cast(cast('{}' as json) as varchar(300))
+
+-- test cast Json to nvarchar
+select cast(cast('{}' as json) as nvarchar(max))
+
+-- Test convert from varchar to vector
+select convert(vector(2), convert(varchar(max),'[1,1]'))
+
+-- Test convert from nvarchar to vector
+select convert(vector(2), convert(nvarchar(max),N'[1,1]'))
+
+-- Test convert from json to vector
+select convert(vector(2), convert(json,'[1,1]'))
+
+-- Test cast varchar to vector
+select cast(cast('[1,1]' as varchar(max)) as vector(2))
+
+-- Test cast nvarchar to vector
+select cast(cast(N'[1,1]' as nvarchar(max)) as vector(2))
+
+-- Test cast json to vector
+select cast(cast('[1,1]' as json) as vector(2))
+
+-- Test convert from vector to varchar
+select convert(varchar(max), convert(vector(3), '[0.1, 0.2, 0.1]'))
+
+-- Test convert from vector to nvarchar
+select convert(nvarchar(max), convert(vector(3), '[0.1, 0.2, 0.1]'))
+
+-- Test convert from vector to json
+select convert(json, convert(vector(3), '[0.1, 0.2, 0.1]'))
+
+-- Test cast vector to varchar
+select cast(cast('[0.1, 0.1, 0.1]' as vector(3)) as varchar(max))
+
+-- Test cast vector to nvarchar
+select cast(cast('[0.1, 0.1, 0.1]' as vector(3)) as nvarchar(max))
+
+-- Test cast vector to json
+select cast(cast('[0.1, 0.1, 0.1]' as vector(3)) as json)
diff --git a/Test/SqlDom/TestScripts/FromClauseTests150.sql b/Test/SqlDom/TestScripts/FromClauseTests150.sql
index cb7b577..a5ac820 100644
--- a/Test/SqlDom/TestScripts/FromClauseTests150.sql
+++ b/Test/SqlDom/TestScripts/FromClauseTests150.sql
@@ -14,3 +14,31 @@ SELECT t2.ordinal FROM String_Split('Lorem-ipsum dolor-sit amet.', '-', 1) AS t1
SELECT value FROM (VALUES ('Lorem ipsum'), ('dolor sit amet.')) AS x(col) CROSS APPLY STRING_SPLIT(col, ',', 0);
SELECT ordinal FROM (VALUES ('Lorem ipsum'), ('dolor sit amet.')) AS x(col) CROSS APPLY STRING_SPLIT(col, ',', 1);
+
+SELECT * FROM CHANGETABLE(CHANGES t1, 10, FORCESEEK) AS a;
+
+DELETE t1 FROM CHANGETABLE(CHANGES dbo.t1, @v1, FORCESEEK) AS a(c1);
+
+UPDATE t1
+SET c1 = 10
+FROM CHANGETABLE(CHANGES d1.dbo.t1, NULL, FORCESEEK) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION s1.d1.dbo.t1, (c1), (1), FORCESEEK) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION z..t1, (c1, c2), ('a', 'b'), FORCESEEK) AS a(z1, z2);
+
+SELECT * FROM CHANGETABLE(CHANGES t1, 10) AS a;
+
+DELETE t1 FROM CHANGETABLE(CHANGES dbo.t1, @v1) AS a(c1);
+
+UPDATE t1
+SET c1 = 10
+FROM CHANGETABLE(CHANGES d1.dbo.t1, NULL) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION s1.d1.dbo.t1, (c1), (1)) AS a;
+
+SELECT *
+FROM CHANGETABLE(VERSION z..t1, (c1, c2), ('a', 'b')) AS a(z1, z2);
diff --git a/global.json b/global.json
index fbe47ac..bbabee8 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "6.0.403",
+ "version": "6.0.424",
"rollForward": "latestMajor"
},
"msbuild-sdks": {
diff --git a/release-notes/161.91/161.9135.0.md b/release-notes/161.91/161.9135.0.md
new file mode 100644
index 0000000..cce8a61
--- /dev/null
+++ b/release-notes/161.91/161.9135.0.md
@@ -0,0 +1,26 @@
+# Release Notes
+
+## Microsoft.SqlServer.TransactSql.ScriptDom 161.9135.0
+This update brings the below changes over the previous release:
+
+### Target Platform Support
+
+* .NET Framework 4.6.2 (Windows x86, Windows x64)
+* .NET 6 (Windows x86, Windows x64, Linux, macOS)
+* .NET Standard 2.0+ (Windows x86, Windows x64, Linux, macOS)
+
+### Dependencies
+
+#### .NET Framework
+#### .NET Core
+#### .NET Standard
+
+### New Features
+* Adds support for native Vector type.
+
+### Fixed
+* Adds support for the FORCESEEK hint in CHANGETABLE function.
+
+### Changes
+
+### Known Issues