diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs index 61383927e47..ee50709e7c8 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs @@ -130,6 +130,8 @@ internal sealed partial class KnownType internal static readonly KnownType NFluent_Check = new("NFluent.Check"); internal static readonly KnownType NFluent_FluentCheckException = new("NFluent.FluentCheckException"); internal static readonly KnownType NFluent_Kernel_FluentCheckException = new("NFluent.Kernel.FluentCheckException"); + internal static readonly KnownType NHibernate_ISession = new("NHibernate.ISession"); + internal static readonly KnownType NHibernate_Impl_AbstractSessionImpl = new("NHibernate.Impl.AbstractSessionImpl"); internal static readonly KnownType NLog_LogManager = new("NLog.LogManager"); internal static readonly KnownType NUnit_Framework_Assert = new("NUnit.Framework.Assert"); internal static readonly KnownType NUnit_Framework_AssertionException = new("NUnit.Framework.AssertionException"); diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index 10745749b6e..79e920af400 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -121,14 +121,23 @@ public abstract class ExecutingSqlQueriesBase + builderCS + .AddPaths("ExecutingSqlQueries.NHibernate.cs") + .AddReferences(NuGetMetadataReference.NHibernate(Constants.NuGetLatestVersion)) + .Verify(); } } diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs new file mode 100644 index 00000000000..2264a662569 --- /dev/null +++ b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs @@ -0,0 +1,74 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using NHibernate; +using NHibernate.Impl; + +class Program +{ + public async Task ISessionMethods(ISession session, string query, string param) + { + session.CreateFilter(null, query); // Compliant + session.CreateFilter(null, query + param); // Noncompliant + + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant + + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant + + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant + + session.Delete(query); // Compliant + session.Delete(query + param); // Noncompliant + + await session.DeleteAsync(query); // Compliant + await session.DeleteAsync(query + param); // Noncompliant + + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant + } + + public async Task SessionImplMethods(SessionImpl session, string query, string param) + { + session.CreateFilter(null, query); // Compliant + session.CreateFilter(null, query + param); // Noncompliant + + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant + + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant + + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant + + session.Delete(query); // Compliant + session.Delete(query + param); // Noncompliant + + await session.DeleteAsync(query); // Compliant + await session.DeleteAsync(query + param); // Noncompliant + + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant + + session.GetNamedSQLQuery(query); // Compliant + session.GetNamedSQLQuery(query + param); // Noncompliant + } + + public async Task AbstractSessionImplMethods(AbstractSessionImpl session, string query, string param) + { + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant + + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant + + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant + + session.GetNamedSQLQuery(query); // Compliant + session.GetNamedSQLQuery(query + param); // Noncompliant + } +}