From fc9befaffb4f0979094cc87aa9313bb220489231 Mon Sep 17 00:00:00 2001 From: MerlinBot Date: Thu, 20 Jun 2024 16:47:35 +0000 Subject: [PATCH 1/6] [Security] Update .NET SDK to latest patch version This change updates to the latest patch version for the .NET SDK which contains the latest security fixes. Note that your global.json does configure `rollForward`, however roll forward will allow for the build to pass when using a different SDK. So, if locally you have a newer patch version installed it will pass, without the `rollforward` it will fail. CI in many cases installs exactly what is in the global.json, so making sure that your build requires the latest patch version ensures that CI is compliant with those vulnerabilities. --- For feedback or questions about this PR, please contact the [Gardener team](mailto:gardener@microsoft.com). --- This change was automatically generated by [1ES Gardener](https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/gardener/1es-gardener) (a [MerlinBot](https://aka.ms/MerlinBot) extension) which is an initiative by the 1ES team to help repos stay up-to-date with latest tools, features, and best practices. --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index fbe47ac..36c4c4c 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "6.0.403", + "version": "6.0.423", "rollForward": "latestMajor" }, "msbuild-sdks": { From 7465836707ea6fd8f8eb8ebdc0d42dee4cfa4800 Mon Sep 17 00:00:00 2001 From: MerlinBot Date: Thu, 18 Jul 2024 22:48:16 +0000 Subject: [PATCH 2/6] [Security] Update .NET SDK to latest patch version This change updates to the latest patch version for the .NET SDK which contains the latest security fixes. Note that your global.json does configure `rollForward`, however roll forward will allow for the build to pass when using a different SDK. So, if locally you have a newer patch version installed it will pass, without the `rollforward` it will fail. CI in many cases installs exactly what is in the global.json, so making sure that your build requires the latest patch version ensures that CI is compliant with those vulnerabilities. Release notes: * [6.0.32](https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.32/6.0.32.md) The following CVEs will be addressed by this update: * [CVE-2024-38081](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38081) * [CVE-2024-38095](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38095) --- For feedback or questions about this PR, please contact the [Gardener team](mailto:gardener@microsoft.com). --- This change was automatically generated by [1ES Gardener](https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/gardener/1es-gardener) (a [MerlinBot](https://aka.ms/MerlinBot) extension) which is an initiative by the 1ES team to help repos stay up-to-date with latest tools, features, and best practices. --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 36c4c4c..bbabee8 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "6.0.423", + "version": "6.0.424", "rollForward": "latestMajor" }, "msbuild-sdks": { From f3d6d991e7ac86b61b2218311d2e0f978809212e Mon Sep 17 00:00:00 2001 From: Lijun Ji Date: Tue, 30 Jul 2024 23:50:35 +0000 Subject: [PATCH 3/6] Merged PR 1417651: Add tests for Json data type in scriptdom This PR adds tests for Json data type in ScriptDom. ##Test added - ALTER TABLE T ADD jsonCol JSON; - ALTER TABLE T ALTER COLUMN col JSON; - Create function with Json data type as parameter; - Create stored procedure with Json data type as parameter; - Convert Char to Json; - Convert NChar to Json; - Convert Varchar to Json; - Convert NVarchar to Json; - Convert Json to Char; - Convert Json to NChar; - Convert Json to Varchar; - Convert Json to NVarchar; - Cast Char to Json; - Cast NChar to Json; - Cast Varchar to Json; - Cast NVarchar to Json; - Cast Json to Char; - Cast Json to NChar; - Cast Json to Varchar; - Cast Json to NVarchar; ---- #### AI description (iteration 1) #### PR Classification New feature: Adding tests for JSON data type in ScriptDOM. #### PR Summary This pull request introduces tests for the JSON data type in ScriptDOM, ensuring proper handling and conversion of JSON data. - Added JSON conversion and casting tests in `Test/SqlDom/TestScripts/ExpressionTests160.sql`. - Created baseline for JSON conversion and casting tests in `Test/SqlDom/Baselines160/ExpressionTests160.sql`. - Added tests for JSON data type in function and procedure creation in `Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql` and `Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql`. - Included tests for altering tables to add or modify JSON columns in `Test/SqlDom/TestScripts/AlterTableStatementTests160.sql`. - Updated `Only160SyntaxTests.cs` to include new test scripts for JSON data type. Related work items: #2949474 --- .../AlterTableStatementTests160.sql | 4 ++ .../CreateFunctionStatementTests160.sql | 7 +++ .../CreateProcedureStatementTests160.sql | Bin 0 -> 184 bytes .../Baselines160/ExpressionTests160.sql | 31 ++++++++++++ Test/SqlDom/Only160SyntaxTests.cs | 4 ++ .../AlterTableStatementTests160.sql | 8 +++ .../CreateFunctionStatementTests160.sql | 10 ++++ .../CreateProcedureStatementTests160.sql | Bin 0 -> 292 bytes .../SqlDom/TestScripts/ExpressionTests160.sql | 47 ++++++++++++++++++ 9 files changed, 111 insertions(+) create mode 100644 Test/SqlDom/Baselines160/AlterTableStatementTests160.sql create mode 100644 Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql create mode 100644 Test/SqlDom/Baselines160/CreateProcedureStatementTests160.sql create mode 100644 Test/SqlDom/Baselines160/ExpressionTests160.sql create mode 100644 Test/SqlDom/TestScripts/AlterTableStatementTests160.sql create mode 100644 Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql create mode 100644 Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql create mode 100644 Test/SqlDom/TestScripts/ExpressionTests160.sql 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..8e7d4a5 --- /dev/null +++ b/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql @@ -0,0 +1,7 @@ +CREATE FUNCTION [ParameterizedFunction] +(@parameter_name1 JSON) +RETURNS JSON +AS +BEGIN + RETURN '[30]'; +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 0000000000000000000000000000000000000000..363a653e24ff4100453485b0177ddf46ec778f11 GIT binary patch literal 184 zcmZ9Fu?oUK6a=Rh{D%~R3PG^8F`PC*R1&ojkp%5DO2pq+C$SNWceihMnfHDLGUg;~ zd?VIwD}s8)woM}ToG7_*V5H7?Qjzk|sn}6)(K(xT=`iK4Q#)72@=|hn%Qj2YO(&PW aaDq3R#+P*bVGaH`vAsS$?-%|%lG65hqseRHL`fWKOtK(y8t)XK}4=BnwWafm&+9UMiHY6}!=b z*BmX>SZn7PZ6P0^?D(-o%i&er4a6%-f?LoU8quhlG=z958x*dus7ysnn6U!p)-Cs{ UdEGx!pIk?6I#|x0<4oxK1C7})NB{r; literal 0 HcmV?d00001 diff --git a/Test/SqlDom/TestScripts/ExpressionTests160.sql b/Test/SqlDom/TestScripts/ExpressionTests160.sql new file mode 100644 index 0000000..c8bcfba --- /dev/null +++ b/Test/SqlDom/TestScripts/ExpressionTests160.sql @@ -0,0 +1,47 @@ +-- 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)) From 7613c29c27cf7b623509ae6b22585e51de2acaf1 Mon Sep 17 00:00:00 2001 From: Leila Lali Date: Wed, 14 Aug 2024 16:09:02 +0000 Subject: [PATCH 4/6] Merged PR 1415210: Adding forceseek to changetable Adding forceseek to changetable. fixing bug https://github.com/microsoft/DacFx/issues/434 ---- #### AI description (iteration 1) #### PR Classification New feature #### PR Summary This pull request adds support for the `FORCESEEK` hint in `CHANGETABLE` queries. - `/SqlScriptDom/Parser/TSql/TSql140.g`, `/SqlScriptDom/Parser/TSql/TSql130.g`, `/SqlScriptDom/Parser/TSql/TSql150.g`, `/SqlScriptDom/Parser/TSql/TSql160.g`: Updated grammar to support `FORCESEEK` in `CHANGETABLE` queries. - `/SqlScriptDom/Parser/TSql/Ast.xml`: Added `ForceSeek` property to `ChangeTableChangesTableReference` and `ChangeTableVersionTableReference` classes. - `/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.ChangeTableTableSource.cs`: Implemented code generation for `FORCESEEK` hint. - `/Test/SqlDom/Baselines150/FromClauseTests150.sql`, `/Test/SqlDom/TestScripts/FromClauseTests150.sql`: Added test cases for `FORCESEEK` in `CHANGETABLE` queries. - `/Test/SqlDom/Only150SyntaxTests.cs`: Updated test expectations to include new `FORCESEEK` test cases. --- SqlScriptDom/Parser/TSql/Ast.xml | 2 ++ SqlScriptDom/Parser/TSql/TSql130.g | 15 ++++++++- SqlScriptDom/Parser/TSql/TSql140.g | 17 ++++++++-- SqlScriptDom/Parser/TSql/TSql150.g | 15 ++++++++- SqlScriptDom/Parser/TSql/TSql160.g | 15 ++++++++- ...GeneratorVisitor.ChangeTableTableSource.cs | 12 +++++-- .../Baselines150/FromClauseTests150.sql | 32 +++++++++++++++++++ Test/SqlDom/Only150SyntaxTests.cs | 2 +- .../SqlDom/TestScripts/FromClauseTests150.sql | 28 ++++++++++++++++ 9 files changed, 130 insertions(+), 8 deletions(-) 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/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/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/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/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/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); From b21fecb3f235b8e498a932269fab75a607ffebf9 Mon Sep 17 00:00:00 2001 From: "Abhishek Kumar (MDD)" Date: Thu, 15 Aug 2024 23:16:18 +0000 Subject: [PATCH 5/6] Merged PR 1420062: Added test script for vector native data type Added test script for expression, ereate table, stored procedure, functions tests with vector native type ---- #### AI description (iteration 1) #### PR Classification New feature: Added test script for vector native data type. #### PR Summary This pull request introduces test scripts and updates to support the vector native data type in SQL. - Added test cases for casting and converting between `vector` and other data types in `/Test/SqlDom/TestScripts/ExpressionTests160.sql` and `/Test/SqlDom/Baselines160/ExpressionTests160.sql`. - Created stored procedures and functions utilizing the `vector` data type in `/Test/SqlDom/TestScripts/CreateProcedureStatementTests160.sql`, `/Test/SqlDom/Baselines160/CreateProcedureStatementTests160.sql`, `/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql`, and `/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql`. - Updated `SqlDataTypeOption` and related parser files to include the `vector` data type in `/SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs`, `/SqlScriptDom/Parser/TSql/TSql80ParserBaseInternal.cs`, `/SqlScriptDom/Parser/TSql/TSql160ParserBaseInternal.cs`, `/SqlScriptDom/Parser/TSql/CodeGenerationSupporter.cs`, and `/SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.SqlDataType.cs`. - Added a new table with a `vector` column in `/Test/SqlDom/TestScripts/CreateTableTests160.sql` and `/Test/SqlDom/Baselines160/CreateTableTests160.sql`. --- .../Parser/TSql/CodeGenerationSupporter.cs | 1 + SqlScriptDom/Parser/TSql/SqlDataTypeOption.cs | 5 +++ .../Parser/TSql/TSql160ParserBaseInternal.cs | 2 + .../Parser/TSql/TSql80ParserBaseInternal.cs | 3 +- .../SqlScriptGeneratorVisitor.SqlDataType.cs | 1 + .../CreateFunctionStatementTests160.sql | 12 ++++++ .../CreateProcedureStatementTests160.sql | Bin 184 -> 592 bytes .../Baselines160/CreateTableTests160.sql | 4 ++ .../Baselines160/ExpressionTests160.sql | 26 ++++++++++++- .../CreateFunctionStatementTests160.sql | 13 +++++++ .../CreateProcedureStatementTests160.sql | Bin 292 -> 920 bytes .../TestScripts/CreateTableTests160.sql | 3 ++ .../SqlDom/TestScripts/ExpressionTests160.sql | 36 ++++++++++++++++++ 13 files changed, 104 insertions(+), 2 deletions(-) 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/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.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/Baselines160/CreateFunctionStatementTests160.sql b/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql index 8e7d4a5..d190752 100644 --- a/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql +++ b/Test/SqlDom/Baselines160/CreateFunctionStatementTests160.sql @@ -4,4 +4,16 @@ 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 index 363a653e24ff4100453485b0177ddf46ec778f11..179241b196e66b0511b20d586f5eeeb87adcc4b0 100644 GIT binary patch literal 592 zcmb`FL2JT55QX2l(EpG_K?NzqYcG)~qLf%P=2A*XV-A9*MXNu*?Kf)-K|F|fn4Q^~ z$D4Vx`}Z4arlIvV(EL4gd+Y0@eTk 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 index d804474..cab1372 100644 --- a/Test/SqlDom/Baselines160/ExpressionTests160.sql +++ b/Test/SqlDom/Baselines160/ExpressionTests160.sql @@ -28,4 +28,28 @@ SELECT CAST (CAST ('{}' AS JSON) AS NCHAR (300)); SELECT CAST (CAST ('{}' AS JSON) AS VARCHAR (300)); -SELECT CAST (CAST ('{}' AS JSON) AS NVARCHAR (MAX)); \ No newline at end of file +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/TestScripts/CreateFunctionStatementTests160.sql b/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql index 8d386f5..1790258 100644 --- a/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql +++ b/Test/SqlDom/TestScripts/CreateFunctionStatementTests160.sql @@ -7,4 +7,17 @@ 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 index d4d1ba0393260c2c40dc743009d7f7abf19014b2..b3e28d0b85b850b7e3d86034e784aafd50913f03 100644 GIT binary patch literal 920 zcmcJO(MrQW5Jm5+g8#4&LMya_{eqTSM3Gi(%u6UGO#>>LNSjvtdG*YaG*v{f>ceib zGm|^BXC`m2ZMEgp*Fvdc73@w+p1HToIX&@~E5S3@%3GbDbw|uC-V360Wj-#(8|#rs z(^=?P2iiybS_AbIusdCG8etpgR5#w^6rnsrWx^K`wiSAnZiwOomK3k4?Ws#eRi+aZ z@5>6z+tav=8k6CY)hBOV^%L?R$=Y8L_ Date: Fri, 16 Aug 2024 17:25:51 +0000 Subject: [PATCH 6/6] Merged PR 1433433: Adding release notes for 161.9135 Adding release notes for 161.9135 ---- #### AI description (iteration 1) #### PR Classification Documentation update for release notes. #### PR Summary This pull request adds release notes for version 161.9135.0 of `Microsoft.SqlServer.TransactSql.ScriptDom`, detailing new features, fixed issues, and target platform support. - `release-notes/161.91/161.9135.0.md`: Added release notes including new support for native Vector type and FORCESEEK hint in CHANGETABLE function. --- release-notes/161.91/161.9135.0.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 release-notes/161.91/161.9135.0.md 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