From 5bf97f00209b44ecb7995d9809564bcb9dbb476f Mon Sep 17 00:00:00 2001 From: jED Date: Thu, 21 Nov 2024 16:24:07 +0100 Subject: [PATCH] Added support to NEWID() expression. --- Lib/CSQLQueryExpress/CSQLQueryExpress.csproj | 2 +- .../Compiler/SQLQueryTranslator.cs | 6 ++++++ Lib/CSQLQueryExpress/Statements/Sys.cs | 5 +++++ .../UnitTests/QuerySelectUnitTest.cs | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Lib/CSQLQueryExpress/CSQLQueryExpress.csproj b/Lib/CSQLQueryExpress/CSQLQueryExpress.csproj index 5244e66..8694f46 100644 --- a/Lib/CSQLQueryExpress/CSQLQueryExpress.csproj +++ b/Lib/CSQLQueryExpress/CSQLQueryExpress.csproj @@ -3,7 +3,7 @@ netstandard2.0 CSQLQueryExpress - 1.4.3 + 1.4.4 A simple c# library to compile TSQL queries README.md diff --git a/Lib/CSQLQueryExpress/Compiler/SQLQueryTranslator.cs b/Lib/CSQLQueryExpress/Compiler/SQLQueryTranslator.cs index 3c0251b..2ecde07 100644 --- a/Lib/CSQLQueryExpress/Compiler/SQLQueryTranslator.cs +++ b/Lib/CSQLQueryExpress/Compiler/SQLQueryTranslator.cs @@ -356,6 +356,12 @@ private Expression VisitSysMethodCall(MethodCallExpression node) return node; } + else if (node.Method.Name == nameof(Sys.NewID)) + { + _queryBuilder.Append($"NEWID()"); + + return node; + } throw new NotSupportedException(string.Format("The method '{0}' is not supported.", node.Method.Name)); } diff --git a/Lib/CSQLQueryExpress/Statements/Sys.cs b/Lib/CSQLQueryExpress/Statements/Sys.cs index ccfc54a..af59b82 100644 --- a/Lib/CSQLQueryExpress/Statements/Sys.cs +++ b/Lib/CSQLQueryExpress/Statements/Sys.cs @@ -53,5 +53,10 @@ public static DateTime UtcDateTime() { return default; } + + public static Guid NewID() + { + return default; + } } } diff --git a/Tests/CSQLQueryExpress.Tests/UnitTests/QuerySelectUnitTest.cs b/Tests/CSQLQueryExpress.Tests/UnitTests/QuerySelectUnitTest.cs index aa95525..5d355d2 100644 --- a/Tests/CSQLQueryExpress.Tests/UnitTests/QuerySelectUnitTest.cs +++ b/Tests/CSQLQueryExpress.Tests/UnitTests/QuerySelectUnitTest.cs @@ -361,6 +361,25 @@ public void TestStatement11() Assert.DoesNotThrow(() => queryCommand.ToList()); } + [Test] + public void TestStatement12() + { + var query = new SQLQuery() + .From() + .Select(p => Sys.NewID(), p => p.ProductID, p => p.ProductName); + + var compiledQuery = query.Compile(); + + Assert.That(compiledQuery.Parameters.Count, Is.EqualTo(0)); + + Assert.That(compiledQuery.Statement.Replace(Environment.NewLine, string.Empty), + Is.EqualTo(@"SELECT NEWID(), _t0.[ProductID], _t0.[ProductName] FROM [dbo].[Products] AS _t0")); + + var queryCommand = new SQLQueryCommandReader(ConnectionString, compiledQuery); + + Assert.DoesNotThrow(() => queryCommand.ToList()); + } + private string GetSQLStatement([CallerMemberName] string memeberName = null) { var statement = File.ReadAllText($@"UnitTests\SelectStatements\{memeberName}.txt");