From ed1b94535e97d09221dec0d566bd6c391d9b0602 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Sat, 21 Oct 2017 21:47:39 +0200 Subject: [PATCH 1/5] SQL CLR Regex utilities Added sample that shows how to create CLR functions that expose .NEt Regular Expression classes. --- .gitignore | 1 + samples/features/sql-clr/RegEx/.gitignore | 7 ++ .../sql-clr/RegEx/Properties/AssemblyInfo.cs | 36 ++++++++++ samples/features/sql-clr/RegEx/RegEx.cs | 46 ++++++++++++ .../features/sql-clr/RegEx/SqlClrRegEx.csproj | 68 ++++++++++++++++++ .../features/sql-clr/RegEx/SqlClrRegEx.pfx | Bin 0 -> 1764 bytes .../features/sql-clr/RegEx/SqlClrRegEx.sln | 25 +++++++ samples/features/sql-clr/RegEx/SqlClrRegEx.tt | 38 ++++++++++ 8 files changed, 221 insertions(+) create mode 100644 samples/features/sql-clr/RegEx/.gitignore create mode 100644 samples/features/sql-clr/RegEx/Properties/AssemblyInfo.cs create mode 100644 samples/features/sql-clr/RegEx/RegEx.cs create mode 100644 samples/features/sql-clr/RegEx/SqlClrRegEx.csproj create mode 100644 samples/features/sql-clr/RegEx/SqlClrRegEx.pfx create mode 100644 samples/features/sql-clr/RegEx/SqlClrRegEx.sln create mode 100644 samples/features/sql-clr/RegEx/SqlClrRegEx.tt diff --git a/.gitignore b/.gitignore index 5028b13202..d81e3f1904 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,4 @@ samples/applications/iot-smart-grid/ConsoleClient/obj/Debug/TemporaryGeneratedFi samples/applications/iot-smart-grid/WinFormsClient/bin/Release/Client.exe.config samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/bin/Release/MultithreadedOrderInsert.exe.config samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources +samples/features/sql-clr/RegEx/SqlClrRegEx.sql diff --git a/samples/features/sql-clr/RegEx/.gitignore b/samples/features/sql-clr/RegEx/.gitignore new file mode 100644 index 0000000000..09e33592e5 --- /dev/null +++ b/samples/features/sql-clr/RegEx/.gitignore @@ -0,0 +1,7 @@ +*.cproj.user +.vs/* +.vscode/* +bin/* +obj/* +*.log +Properties/PublishProfiles/* \ No newline at end of file diff --git a/samples/features/sql-clr/RegEx/Properties/AssemblyInfo.cs b/samples/features/sql-clr/RegEx/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..d2a4a372c0 --- /dev/null +++ b/samples/features/sql-clr/RegEx/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SqlClrRegEx")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SqlClrRegEx")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("265e0bc3-ad5f-44f3-bb17-c61f77b9847f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/features/sql-clr/RegEx/RegEx.cs b/samples/features/sql-clr/RegEx/RegEx.cs new file mode 100644 index 0000000000..a520c4a5ac --- /dev/null +++ b/samples/features/sql-clr/RegEx/RegEx.cs @@ -0,0 +1,46 @@ +using Microsoft.SqlServer.Server; +using System.Text.RegularExpressions; + +/// +/// https://blogs.msdn.microsoft.com/sqlclr/2005/06/29/working-with-regular-expressions/ +/// +public partial class RegEx +{ + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static bool Match(string source, string pattern) + { + Regex r1 = new Regex(pattern); + return r1.Match(source).Success; + } + + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static bool CompiledMatch(string source, string pattern) + { + return Regex.Match(source, pattern, RegexOptions.Compiled).Success; + } + + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static string Substring(string source, string pattern) + { + Regex r1 = new Regex(pattern); + return r1.Match(source).Value; + } + + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static string CompiledSubstring(string source, string pattern) + { + return Regex.Match(source, pattern, RegexOptions.Compiled).Value; + } + + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static string Replace(string source, string pattern, string value) + { + return Regex.Replace(source, pattern, value); + } + + [SqlFunction(IsDeterministic = true, IsPrecise = true)] + public static string CompiledReplace(string source, string pattern, string value) + { + return Regex.Replace(source, pattern, value, RegexOptions.Compiled); + } +}; \ No newline at end of file diff --git a/samples/features/sql-clr/RegEx/SqlClrRegEx.csproj b/samples/features/sql-clr/RegEx/SqlClrRegEx.csproj new file mode 100644 index 0000000000..5097cb0d44 --- /dev/null +++ b/samples/features/sql-clr/RegEx/SqlClrRegEx.csproj @@ -0,0 +1,68 @@ + + + + + Debug + AnyCPU + {265E0BC3-AD5F-44F3-BB17-C61F77B9847F} + Library + Properties + SqlClrRegEx + SqlClrRegEx + v4.6.1 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + + + SqlClrRegEx.pfx + + + + + + + + + + + + + + + True + True + SqlClrRegEx.tt + + + TextTemplatingFileGenerator + SqlClrRegEx.sql + + + + + + + + + + + \ No newline at end of file diff --git a/samples/features/sql-clr/RegEx/SqlClrRegEx.pfx b/samples/features/sql-clr/RegEx/SqlClrRegEx.pfx new file mode 100644 index 0000000000000000000000000000000000000000..f346a482a8aea0dea4f0546deb496c0394266e52 GIT binary patch literal 1764 zcmZWoc{r478-Hg^?^q(t3|X=iC0p-=!9>WCZE9?N>fk8*WzbQ{G}ia@8Cg1VVl>9! z82i4=C~`wa1)%SL;vs~vo*YCQY=lA>F_x)VYANLKx;1n7q0>K~$ z6w^+!Pui43VNnGzn2v$L8;Jd12o@3iBPCLbfklcCJ0FQ$P~wlS-Qp;80gM(vFuDO! z2F3rhk;kPlqQyBi-7{|Tt!Om19|NN^4EK?X-VR7t#uOPCGtTN8(s&y$Rb@7t>l~eY zoU+?q3%wMz-9BD*v#+wjdAydaTRfGYy5ZW|{fNcs1{LcqS2D}@w5J1E5}Ywq=iu8_ zqKOT0(rM>(sO!s-6sfBl>lyky$FNWAQu~;g@APui@Tle4`~|ai$$2vF_7M2%a!Gzy z;wLt^b~B!{x$SKqF34Q4<+3J2aOd4W%a@Mk#tDzUp+6C<%6d2k{k)pK`J!^TPB_&3 zBzeU#YBH^NqBLo{q9(=K7%gnL-|6M@iQ;b-Jr|wxBpb~i{4I2aH0;e5Xy+C(&koiV zx~tSamc3mTnZVkqmU7G5^vlPL*1E(~+eP8Aeho{r-OGw2{ZdzH>mJ9mEa|=0TOLXE zhbtspX)vpD?&5tliwmvebk!Fhd7GP|mJYl%0*uLdsW&q-(EF&z>~5TbFx}bNTVcgjjh{k7a1u} zk3t#`k9Y@P8H&~{?p?L4A$?+n>r#2PF3vNL?E2Hz_)LYx+2j)QvDhTkh}TjIVYu{2 z7xjUcN)I3CIs^X9FrPT{riLQT;@LNi?M`suYhv>jq9V2f-ovVu`)}PntlBb{cF2bz z88lg#a!_0C14RoPiP4#DWPHK=*b{=AQVC^SoZ0Ib%ni1p%o}V>$>iR0j3f^g_IO&4 zTDdQsOxG`tHz%>5hjHmiOTsq8mb7Y4Q=eR4^p_d!IEyUL50~l+>}C9~{SRfQ6VlXHG0HAOFHu1z$D$W1{FaWF&m;$x{2?-*ghbR&f)(A61UAvp&i=4P-T9?aL!0?`#6oiKgkxO*>GJjTDj#Wa17==N5t>%o;NUCc zf4W1{sx3%z5_|Hdc*MsWL~c~)g`1;AOf5n|b+&Ana6G&ARWc{uns+7F6e5H63|#M)y;=q8cl?r5T+{)r92&B88Cp zp|OM4pq1;Pe`QU9j%$!13LDFbN5=!V@9hykP0$#(m5bnpIu(c|2NHygykZ@{OG9G2 z1a$2Kie=PhUO3n%WSy>kR)*|Z&_M9^Q_9&P{>c(J2Y@NBsl!I-bA5hu#B2j8; zYoT!`PpQ!Q$f4g-j~}qUvo2<&Zrbw8ltz@Qo~9t3ak9PI+c0$6_q?#pi_PraI>+kC ztQB@D?BkWRlsGS8eZN^Z`n=GqeB^P3{XtgcvC^=Qb%7z;<)4!HqA)5u@CBfGN zi7nm{R^(QW5r51dGg)@44d0R>@-9f}x~2b|>;vGSgWqS1@~{KpzPg{K^d-n<*Ai&B zv-0{H`ygh2ebs8)RQ)SxPi95nqgn_39PnD(Vr@@j6I;MxCSHm&$!87Qo$H(F%zHJS zDS4u%XxQf`@vHELt5XSiK>Gdk>~LWWvRYr4e)o+F-R4{g1dC2 zM9_*DJY%>%Gce=cUaM%6=0kL9+h(5HI0hekIANAz228-`e9Zsztsq8O{BhaW0scSf CUitz6 literal 0 HcmV?d00001 diff --git a/samples/features/sql-clr/RegEx/SqlClrRegEx.sln b/samples/features/sql-clr/RegEx/SqlClrRegEx.sln new file mode 100644 index 0000000000..de81e0a782 --- /dev/null +++ b/samples/features/sql-clr/RegEx/SqlClrRegEx.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqlClrRegEx", "SqlClrRegEx.csproj", "{265E0BC3-AD5F-44F3-BB17-C61F77B9847F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {265E0BC3-AD5F-44F3-BB17-C61F77B9847F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {265E0BC3-AD5F-44F3-BB17-C61F77B9847F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {265E0BC3-AD5F-44F3-BB17-C61F77B9847F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {265E0BC3-AD5F-44F3-BB17-C61F77B9847F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {54C7E749-77A3-460D-A89A-5AB7943A1F15} + EndGlobalSection +EndGlobal diff --git a/samples/features/sql-clr/RegEx/SqlClrRegEx.tt b/samples/features/sql-clr/RegEx/SqlClrRegEx.tt new file mode 100644 index 0000000000..7f282438cb --- /dev/null +++ b/samples/features/sql-clr/RegEx/SqlClrRegEx.tt @@ -0,0 +1,38 @@ +<#@output extension=".sql"#> +<#@ template language="C#" hostspecific="True" #> + +--Drop the functions if they already exist +DROP FUNCTION IF EXISTS clr.REGEX_MATCH +GO +DROP FUNCTION IF EXISTS clr.REGEX_SUBSTRING +GO +DROP FUNCTION IF EXISTS clr.REGEX_REPLACE +GO + +DROP SCHEMA IF EXISTS clr; +GO + +--Drop the assembly if it already exists +DROP ASSEMBLY IF EXISTS SqlClrRegEx +GO + +--Create the assembly +CREATE ASSEMBLY SqlClrRegEx FROM '<#= this.Host.ResolvePath("bin\\Release\\SqlClrRegEx.dll") #>' WITH PERMISSION_SET = SAFE +GO + +CREATE SCHEMA clr; +GO + +--Create the functions +CREATE FUNCTION clr.REGEX_MATCH (@src NVARCHAR(MAX), @regex NVARCHAR(MAX)) +RETURNS BIT +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledMatch +GO +CREATE FUNCTION clr.REGEX_SUBSTRING (@src NVARCHAR(MAX), @regex NVARCHAR(MAX)) +RETURNS NVARCHAR(4000) +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledSubstring +GO +CREATE FUNCTION clr.REGEX_REPLACE (@src NVARCHAR(MAX), @regex NVARCHAR(MAX), @value NVARCHAR(4000)) +RETURNS NVARCHAR(MAX) +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledReplace +GO \ No newline at end of file From 00e3564b1843d6acd1c1a7932e22c25061a3ae5d Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Sat, 21 Oct 2017 22:13:20 +0200 Subject: [PATCH 2/5] Changed schema name to REGEX --- samples/features/sql-clr/RegEx/SqlClrRegEx.tt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/samples/features/sql-clr/RegEx/SqlClrRegEx.tt b/samples/features/sql-clr/RegEx/SqlClrRegEx.tt index 7f282438cb..a2939ed229 100644 --- a/samples/features/sql-clr/RegEx/SqlClrRegEx.tt +++ b/samples/features/sql-clr/RegEx/SqlClrRegEx.tt @@ -2,14 +2,14 @@ <#@ template language="C#" hostspecific="True" #> --Drop the functions if they already exist -DROP FUNCTION IF EXISTS clr.REGEX_MATCH +DROP FUNCTION IF EXISTS REGEX.MATCH GO -DROP FUNCTION IF EXISTS clr.REGEX_SUBSTRING +DROP FUNCTION IF EXISTS REGEX.SUBSTRING GO -DROP FUNCTION IF EXISTS clr.REGEX_REPLACE +DROP FUNCTION IF EXISTS REGEX.REPLACE GO -DROP SCHEMA IF EXISTS clr; +DROP SCHEMA IF EXISTS REGEX; GO --Drop the assembly if it already exists @@ -20,19 +20,19 @@ GO CREATE ASSEMBLY SqlClrRegEx FROM '<#= this.Host.ResolvePath("bin\\Release\\SqlClrRegEx.dll") #>' WITH PERMISSION_SET = SAFE GO -CREATE SCHEMA clr; +CREATE SCHEMA REGEX; GO --Create the functions -CREATE FUNCTION clr.REGEX_MATCH (@src NVARCHAR(MAX), @regex NVARCHAR(MAX)) +CREATE FUNCTION REGEX.MATCH (@src NVARCHAR(MAX), @regex NVARCHAR(4000)) RETURNS BIT AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledMatch GO -CREATE FUNCTION clr.REGEX_SUBSTRING (@src NVARCHAR(MAX), @regex NVARCHAR(MAX)) +CREATE FUNCTION REGEX.SUBSTRING (@src NVARCHAR(MAX), @regex NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledSubstring GO -CREATE FUNCTION clr.REGEX_REPLACE (@src NVARCHAR(MAX), @regex NVARCHAR(MAX), @value NVARCHAR(4000)) +CREATE FUNCTION REGEX.REPLACE (@src NVARCHAR(MAX), @regex NVARCHAR(MAX), @value NVARCHAR(4000)) RETURNS NVARCHAR(MAX) AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledReplace -GO \ No newline at end of file +GO From ad03a071dfb1dae20eb9f7ee4781aba03f5fb706 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Sat, 21 Oct 2017 23:32:29 +0200 Subject: [PATCH 3/5] Added readme to CLR/regex sample --- samples/features/sql-clr/RegEx/README.md | 84 ++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 samples/features/sql-clr/RegEx/README.md diff --git a/samples/features/sql-clr/RegEx/README.md b/samples/features/sql-clr/RegEx/README.md new file mode 100644 index 0000000000..350e6c7e7c --- /dev/null +++ b/samples/features/sql-clr/RegEx/README.md @@ -0,0 +1,84 @@ +# Implementing Regular Expressions in SQL Server using CLR UDF +SQL Database don't have built-in support for regular expressions, so the only workaround is to use Regular Expressions that exist in .Net framework and expose them as T-SQL functions. +This code sample demonstrates how to create CLR User-Defined functions that expose regular expression functionalities that exist in .Net framework. + +### Contents + +[About this sample](#about-this-sample)
+[Build the CLR/RegEx functions](#build-functions)
+[Add RegEx functions to your SQL database](#add-functions)
+[Test the functions](#test)
+[Disclaimers](#disclaimers)
+ + + +## About this sample +1. **Applies to:** SQL Server 2005+ Enterprise / Developer / Evaluation Edition +2. **Key features:** + - CLR +3. **Programming Language:** .NET C# +4. **Author:** Jovan Popovic [jovanpop-msft] + + + +## Build the CLR/RegEx functions + +1. Download the source code and open the solution using Visual Studio. +2. Change the password in .pfk file and rebuild the solution in Retail mode. +3. Open and save SqlClrRegEx.tt to generate output T-SQL file that will contain script that inserts .dll file with the Regex functions, and exposes them as T-SQL/CLR functions. + + +## Add RegEx functions to your SQL database + +File SqlClrRegEx.sql contains the code that will import functions into SQL Database. + +If you have not added CLR assemblies in your database, you should use the following script to enable CLR: +``` +sp_configure @configname=clr_enabled, @configvalue=1 +GO +RECONFIGURE +GO +``` + +Once you enable CLR, you can use the T-SQL script to add the regex functions. The script depends on the location where you have built the project, and might look like: +``` +--Create the assembly +CREATE ASSEMBLY SqlClrRegEx FROM 'D:\GitHub\sql-server-samples\samples\features\sql-clr\RegEx\bin\Release\SqlClrRegEx.dll' WITH PERMISSION_SET = SAFE +GO + +CREATE SCHEMA REGEX; +GO + +--Create the functions +CREATE FUNCTION REGEX.MATCH (@src NVARCHAR(MAX), @regex NVARCHAR(4000)) +RETURNS BIT +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledMatch +GO +CREATE FUNCTION REGEX.SUBSTRING (@src NVARCHAR(MAX), @regex NVARCHAR(4000)) +RETURNS NVARCHAR(4000) +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledSubstring +GO +CREATE FUNCTION REGEX.REPLACE (@src NVARCHAR(MAX), @regex NVARCHAR(MAX), @value NVARCHAR(4000)) +RETURNS NVARCHAR(MAX) +AS EXTERNAL NAME SqlClrRegEx.RegEx.CompiledReplace +GO +``` + +This code will import assembly in SQL Database and add three functions that provide RegEx functionalities. + + + +## Test the functions + +Once you create the assembly and expose the functions, you can use regular expression functionalities in T-SQL code: + +``` +IF( REGEX.MATCH('tst123test', '[0-9]+') = 1 ) + SELECT REGEX.SUBSTRING('tst123test', '[0-9]+'), REGEX.REPLACE('tst123test', '[0-9]+', 'XXX') +``` + + + +## Disclaimers +The code included in this sample is not intended to be a set of best practices on how to build scalable enterprise grade applications. This is beyond the scope of this sample. + From ae5661fe4ca37d7b0caeaa3573d3f94fb80aa671 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Sat, 21 Oct 2017 23:35:43 +0200 Subject: [PATCH 4/5] Moved line in .gitignore --- .gitignore | 3 +-- samples/features/sql-clr/RegEx/.gitignore | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d81e3f1904..81626c46e7 100644 --- a/.gitignore +++ b/.gitignore @@ -70,5 +70,4 @@ samples/databases/wide-world-importers/workload-drivers/order-insert/Multithread samples/applications/iot-smart-grid/ConsoleClient/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs samples/applications/iot-smart-grid/WinFormsClient/bin/Release/Client.exe.config samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/bin/Release/MultithreadedOrderInsert.exe.config -samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources -samples/features/sql-clr/RegEx/SqlClrRegEx.sql +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources \ No newline at end of file diff --git a/samples/features/sql-clr/RegEx/.gitignore b/samples/features/sql-clr/RegEx/.gitignore index 09e33592e5..5639f2b03a 100644 --- a/samples/features/sql-clr/RegEx/.gitignore +++ b/samples/features/sql-clr/RegEx/.gitignore @@ -4,4 +4,5 @@ bin/* obj/* *.log -Properties/PublishProfiles/* \ No newline at end of file +Properties/PublishProfiles/* +SqlClrRegEx.sql \ No newline at end of file From cd5015485a894b848f1c252e738d0c42131ba571 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Sat, 21 Oct 2017 23:38:00 +0200 Subject: [PATCH 5/5] Reverted change --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 81626c46e7..5028b13202 100644 --- a/.gitignore +++ b/.gitignore @@ -70,4 +70,4 @@ samples/databases/wide-world-importers/workload-drivers/order-insert/Multithread samples/applications/iot-smart-grid/ConsoleClient/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs samples/applications/iot-smart-grid/WinFormsClient/bin/Release/Client.exe.config samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/bin/Release/MultithreadedOrderInsert.exe.config -samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources \ No newline at end of file +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources