From f5f2613be0468b780177921224e14279b0db835b Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Tue, 28 Dec 2021 15:15:38 +0200 Subject: [PATCH 1/8] Concat should return supplied string type --- src/NHibernate.Test/Async/Hql/HQLFunctions.cs | 53 +++++++++++++++++++ src/NHibernate.Test/Hql/Animal.hbm.xml | 2 +- src/NHibernate.Test/Hql/HQLFunctions.cs | 53 +++++++++++++++++++ src/NHibernate.Test/TestDialect.cs | 3 ++ src/NHibernate/Dialect/Dialect.cs | 2 +- src/NHibernate/Dialect/HanaDialectBase.cs | 1 - src/NHibernate/Dialect/MsSql2000Dialect.cs | 2 +- src/NHibernate/Dialect/MsSqlCeDialect.cs | 2 +- src/NHibernate/Dialect/MySQLDialect.cs | 2 +- src/NHibernate/Dialect/OracleLiteDialect.cs | 2 +- src/NHibernate/Dialect/SybaseASE15Dialect.cs | 2 +- .../Dialect/SybaseSQLAnywhere10Dialect.cs | 2 +- 12 files changed, 117 insertions(+), 9 deletions(-) diff --git a/src/NHibernate.Test/Async/Hql/HQLFunctions.cs b/src/NHibernate.Test/Async/Hql/HQLFunctions.cs index a9c304aaa66..722d08b7776 100644 --- a/src/NHibernate.Test/Async/Hql/HQLFunctions.cs +++ b/src/NHibernate.Test/Async/Hql/HQLFunctions.cs @@ -1143,6 +1143,59 @@ public async Task ConcatAsync() } } + [Test] + public async Task ConcatAnsiFirstParamAsync() + { + if (!TestDialect.SupportsAnsiString) + Assert.Ignore("AnsiString type is not supported by dialect."); + + var nickName = "abcdef"; + using (ISession s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var a1 = new Human { NickName = nickName }; + await (s.SaveAsync(a1)); + await (t.CommitAsync()); + } + + using (var logSpy = new SqlLogSpy()) + using (ISession s = OpenSession()) + { + var param = nickName + "gg"; + var hql = "from Human a where concat(a.NickName, 'gg') = :param "; + Animal result = (Animal) await (s.CreateQuery(hql).SetParameter("param", param).UniqueResultAsync()); + Assert.That(result, Is.Not.Null); + Assert.That(logSpy.GetWholeLog(), Does.Contain("Type: AnsiString")); + } + } + + [KnownBug("Not fixed yet")] + [Test] + public async Task ConcatAnsiSecondParamAsync() + { + if (!TestDialect.SupportsAnsiString) + Assert.Ignore("AnsiString type is not supported by dialect."); + + var nickName = "abcdef"; + using (ISession s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var a1 = new Human { NickName = nickName }; + await (s.SaveAsync(a1)); + await (t.CommitAsync()); + } + + using (var logSpy = new SqlLogSpy()) + using (ISession s = OpenSession()) + { + var param = "gg" + nickName; + var hql = "from Human a where concat('gg', a.NickName) = :param "; + Animal result = (Animal) await (s.CreateQuery(hql).SetParameter("param", param).UniqueResultAsync()); + Assert.That(result, Is.Not.Null); + Assert.That(logSpy.GetWholeLog(), Does.Contain("Type: AnsiString")); + } + } + [Test] public async Task HourMinuteSecondAsync() { diff --git a/src/NHibernate.Test/Hql/Animal.hbm.xml b/src/NHibernate.Test/Hql/Animal.hbm.xml index 816664012ec..b860469adc5 100644 --- a/src/NHibernate.Test/Hql/Animal.hbm.xml +++ b/src/NHibernate.Test/Hql/Animal.hbm.xml @@ -20,7 +20,7 @@ - + diff --git a/src/NHibernate.Test/Hql/HQLFunctions.cs b/src/NHibernate.Test/Hql/HQLFunctions.cs index 1a2b80b0efd..abc9b81d987 100644 --- a/src/NHibernate.Test/Hql/HQLFunctions.cs +++ b/src/NHibernate.Test/Hql/HQLFunctions.cs @@ -1132,6 +1132,59 @@ public void Concat() } } + [Test] + public void ConcatAnsiFirstParam() + { + if (!TestDialect.SupportsAnsiString) + Assert.Ignore("AnsiString type is not supported by dialect."); + + var nickName = "abcdef"; + using (ISession s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var a1 = new Human { NickName = nickName }; + s.Save(a1); + t.Commit(); + } + + using (var logSpy = new SqlLogSpy()) + using (ISession s = OpenSession()) + { + var param = nickName + "gg"; + var hql = "from Human a where concat(a.NickName, 'gg') = :param "; + Animal result = (Animal) s.CreateQuery(hql).SetParameter("param", param).UniqueResult(); + Assert.That(result, Is.Not.Null); + Assert.That(logSpy.GetWholeLog(), Does.Contain("Type: AnsiString")); + } + } + + [KnownBug("Not fixed yet")] + [Test] + public void ConcatAnsiSecondParam() + { + if (!TestDialect.SupportsAnsiString) + Assert.Ignore("AnsiString type is not supported by dialect."); + + var nickName = "abcdef"; + using (ISession s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var a1 = new Human { NickName = nickName }; + s.Save(a1); + t.Commit(); + } + + using (var logSpy = new SqlLogSpy()) + using (ISession s = OpenSession()) + { + var param = "gg" + nickName; + var hql = "from Human a where concat('gg', a.NickName) = :param "; + Animal result = (Animal) s.CreateQuery(hql).SetParameter("param", param).UniqueResult(); + Assert.That(result, Is.Not.Null); + Assert.That(logSpy.GetWholeLog(), Does.Contain("Type: AnsiString")); + } + } + [Test] public void HourMinuteSecond() { diff --git a/src/NHibernate.Test/TestDialect.cs b/src/NHibernate.Test/TestDialect.cs index de15f8565ef..c9fdd931867 100644 --- a/src/NHibernate.Test/TestDialect.cs +++ b/src/NHibernate.Test/TestDialect.cs @@ -1,4 +1,5 @@ using System; +using System.Data; using NHibernate.Hql.Ast.ANTLR; using NHibernate.Id; using NHibernate.SqlTypes; @@ -54,6 +55,8 @@ public bool NativeGeneratorSupportsBulkInsertion public virtual bool SupportsNullCharactersInUtfStrings => true; + public virtual bool SupportsAnsiString => _dialect.GetTypeName(new SqlType(DbType.AnsiString)) != _dialect.GetTypeName(new SqlType(DbType.String)); + /// /// Some databases do not support SELECT FOR UPDATE /// diff --git a/src/NHibernate/Dialect/Dialect.cs b/src/NHibernate/Dialect/Dialect.cs index 9a4db11880e..3f3abe1e870 100644 --- a/src/NHibernate/Dialect/Dialect.cs +++ b/src/NHibernate/Dialect/Dialect.cs @@ -101,7 +101,7 @@ protected Dialect() RegisterFunction("cast", new CastFunction()); RegisterFunction("transparentcast", new TransparentCastFunction()); RegisterFunction("extract", new AnsiExtractFunction()); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", " || ", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", " || ", ")")); // the syntax of current_timestamp is extracted from H3.2 tests // - test\hql\ASTParserLoadingTest.java diff --git a/src/NHibernate/Dialect/HanaDialectBase.cs b/src/NHibernate/Dialect/HanaDialectBase.cs index 650965a2c06..f10df925065 100644 --- a/src/NHibernate/Dialect/HanaDialectBase.cs +++ b/src/NHibernate/Dialect/HanaDialectBase.cs @@ -454,7 +454,6 @@ protected virtual void RegisterHANAFunctions() RegisterFunction("ceil", new StandardSQLFunction("ceil")); RegisterFunction("char", new StandardSQLFunction("char", NHibernateUtil.AnsiChar)); RegisterFunction("coalesce", new TypeConvertingVarArgsSQLFunction("coalesce(", ",", ")")); - RegisterFunction("concat", new VarArgsSQLFunction("(", " || ", ")")); RegisterFunction("concat_naz", new StandardSQLFunction("concat_naz", NHibernateUtil.String)); RegisterFunction("convert_currency", new VarArgsSQLFunction("convert_currency(", ",", ")")); RegisterFunction("convert_unit", new VarArgsSQLFunction("convert_unit(", ",", ")")); diff --git a/src/NHibernate/Dialect/MsSql2000Dialect.cs b/src/NHibernate/Dialect/MsSql2000Dialect.cs index 1aec544ed2d..37cf8da8196 100644 --- a/src/NHibernate/Dialect/MsSql2000Dialect.cs +++ b/src/NHibernate/Dialect/MsSql2000Dialect.cs @@ -339,7 +339,7 @@ protected virtual void RegisterFunctions() RegisterFunction("month", new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(month, ?1)")); RegisterFunction("year", new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(year, ?1)")); RegisterFunction("date", new SQLFunctionTemplate(NHibernateUtil.Date, "dateadd(dd, 0, datediff(dd, 0, ?1))")); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", "+", ")")); RegisterFunction("digits", new StandardSQLFunction("digits", NHibernateUtil.String)); RegisterFunction("ascii", new StandardSQLFunction("ascii", NHibernateUtil.Int32)); RegisterFunction("chr", new StandardSQLFunction("char", NHibernateUtil.Character)); diff --git a/src/NHibernate/Dialect/MsSqlCeDialect.cs b/src/NHibernate/Dialect/MsSqlCeDialect.cs index 86edd426e6e..879933457b3 100644 --- a/src/NHibernate/Dialect/MsSqlCeDialect.cs +++ b/src/NHibernate/Dialect/MsSqlCeDialect.cs @@ -193,7 +193,7 @@ protected virtual void RegisterFunctions() RegisterFunction("trim", new AnsiTrimEmulationFunction()); RegisterFunction("iif", new IifSQLFunction()); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", "+", ")")); // Modulo is not supported on real, float, money, and numeric data types RegisterFunction("mod", new ModulusFunctionTemplate(false)); diff --git a/src/NHibernate/Dialect/MySQLDialect.cs b/src/NHibernate/Dialect/MySQLDialect.cs index d7b4be07d63..f5431d3d6c5 100644 --- a/src/NHibernate/Dialect/MySQLDialect.cs +++ b/src/NHibernate/Dialect/MySQLDialect.cs @@ -286,7 +286,7 @@ protected virtual void RegisterFunctions() RegisterFunction("radians", new StandardSQLFunction("radians", NHibernateUtil.Double)); RegisterFunction("exp", new StandardSQLFunction("exp", NHibernateUtil.Double)); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "concat(", ",", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("concat(", ",", ")")); RegisterFunction("replace", new StandardSafeSQLFunction("replace", NHibernateUtil.String, 3)); RegisterFunction("ltrim", new StandardSQLFunction("ltrim")); RegisterFunction("rtrim", new StandardSQLFunction("ltrim")); diff --git a/src/NHibernate/Dialect/OracleLiteDialect.cs b/src/NHibernate/Dialect/OracleLiteDialect.cs index eb5af510652..2676a9ca36d 100644 --- a/src/NHibernate/Dialect/OracleLiteDialect.cs +++ b/src/NHibernate/Dialect/OracleLiteDialect.cs @@ -90,7 +90,7 @@ public OracleLiteDialect() RegisterFunction("user", new NoArgSQLFunction("user", NHibernateUtil.String, false)); // Multi-param string dialect functions... - RegisterFunction("concat", new StandardSQLFunction("concat", NHibernateUtil.String)); + RegisterFunction("concat", new StandardSQLFunction("concat")); RegisterFunction("instr", new StandardSQLFunction("instr", NHibernateUtil.String)); RegisterFunction("instrb", new StandardSQLFunction("instrb", NHibernateUtil.String)); RegisterFunction("lpad", new StandardSQLFunction("lpad", NHibernateUtil.String)); diff --git a/src/NHibernate/Dialect/SybaseASE15Dialect.cs b/src/NHibernate/Dialect/SybaseASE15Dialect.cs index e45b1f7700a..2368400ff09 100644 --- a/src/NHibernate/Dialect/SybaseASE15Dialect.cs +++ b/src/NHibernate/Dialect/SybaseASE15Dialect.cs @@ -68,7 +68,7 @@ public SybaseASE15Dialect() RegisterFunction("bit_length", new SQLFunctionTemplate(NHibernateUtil.Int32, "datalength(?1) * 8")); RegisterFunction("ceiling", new StandardSQLFunction("ceiling")); RegisterFunction("char", new StandardSQLFunction("char", NHibernateUtil.String)); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(","+",")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", "+", ")")); RegisterFunction("cos", new StandardSQLFunction("cos", NHibernateUtil.Double)); RegisterFunction("cot", new StandardSQLFunction("cot", NHibernateUtil.Double)); RegisterFunction("current_date", new NoArgSQLFunction("current_date", NHibernateUtil.LocalDate)); diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs index 290e626671f..ea91c7f817e 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs @@ -257,7 +257,7 @@ protected virtual void RegisterStringFunctions() RegisterFunction("char_length", new StandardSQLFunction("char_length", NHibernateUtil.Int32)); RegisterFunction("compare", new VarArgsSQLFunction(NHibernateUtil.Int32, "compare(", ",", ")")); RegisterFunction("compress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "compress(", ",", ")")); - RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", "+", ")")); RegisterFunction("csconvert", new VarArgsSQLFunction(NHibernateUtil.StringClob, "csconvert(", ",", ")")); RegisterFunction("decompress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decompress(", ",", ")")); RegisterFunction("decrypt", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decrypt(", ",", ")")); From efafac18cfd78c61aa87a0ebd98ebd644b987e86 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Tue, 28 Dec 2021 18:59:25 +0200 Subject: [PATCH 2/8] Fix ODBC System.Data.Odbc.OdbcException : ERROR [22007] [Microsoft][SQL Server Native Client 11.0][SQL Server]The conversion of a date data type to a datetime data type resulted in an out-of-range value. --- src/NHibernate.Test/Async/Hql/HQLFunctions.cs | 4 ++-- src/NHibernate.Test/Hql/HQLFunctions.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NHibernate.Test/Async/Hql/HQLFunctions.cs b/src/NHibernate.Test/Async/Hql/HQLFunctions.cs index 722d08b7776..e08a71d801d 100644 --- a/src/NHibernate.Test/Async/Hql/HQLFunctions.cs +++ b/src/NHibernate.Test/Async/Hql/HQLFunctions.cs @@ -1153,7 +1153,7 @@ public async Task ConcatAnsiFirstParamAsync() using (ISession s = OpenSession()) using (var t = s.BeginTransaction()) { - var a1 = new Human { NickName = nickName }; + var a1 = new Human { NickName = nickName, Birthdate = DateTime.Today }; await (s.SaveAsync(a1)); await (t.CommitAsync()); } @@ -1180,7 +1180,7 @@ public async Task ConcatAnsiSecondParamAsync() using (ISession s = OpenSession()) using (var t = s.BeginTransaction()) { - var a1 = new Human { NickName = nickName }; + var a1 = new Human { NickName = nickName, Birthdate = DateTime.Today }; await (s.SaveAsync(a1)); await (t.CommitAsync()); } diff --git a/src/NHibernate.Test/Hql/HQLFunctions.cs b/src/NHibernate.Test/Hql/HQLFunctions.cs index abc9b81d987..d2e36c2b428 100644 --- a/src/NHibernate.Test/Hql/HQLFunctions.cs +++ b/src/NHibernate.Test/Hql/HQLFunctions.cs @@ -1142,7 +1142,7 @@ public void ConcatAnsiFirstParam() using (ISession s = OpenSession()) using (var t = s.BeginTransaction()) { - var a1 = new Human { NickName = nickName }; + var a1 = new Human { NickName = nickName, Birthdate = DateTime.Today }; s.Save(a1); t.Commit(); } @@ -1169,7 +1169,7 @@ public void ConcatAnsiSecondParam() using (ISession s = OpenSession()) using (var t = s.BeginTransaction()) { - var a1 = new Human { NickName = nickName }; + var a1 = new Human { NickName = nickName, Birthdate = DateTime.Today }; s.Save(a1); t.Commit(); } From 377280ab607ce6c8748efa19bd3a8abc42482905 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 11:27:00 +1300 Subject: [PATCH 3/8] Unskip sap tests for concat --- .../Async/Criteria/Lambda/FunctionsIntegrationFixture.cs | 3 --- src/NHibernate.Test/Async/Criteria/ProjectionsTest.cs | 9 +-------- src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs | 3 --- .../Async/NHSpecificTest/NH1280/NH1280Fixture.cs | 3 --- .../Criteria/Lambda/FunctionsIntegrationFixture.cs | 3 --- src/NHibernate.Test/Criteria/ProjectionsTest.cs | 9 +-------- src/NHibernate.Test/Linq/LinqQuerySamples.cs | 3 --- .../NHSpecificTest/NH1280/NH1280Fixture.cs | 3 --- 8 files changed, 2 insertions(+), 34 deletions(-) diff --git a/src/NHibernate.Test/Async/Criteria/Lambda/FunctionsIntegrationFixture.cs b/src/NHibernate.Test/Async/Criteria/Lambda/FunctionsIntegrationFixture.cs index e21a2e3f6b2..91296d9f638 100644 --- a/src/NHibernate.Test/Async/Criteria/Lambda/FunctionsIntegrationFixture.cs +++ b/src/NHibernate.Test/Async/Criteria/Lambda/FunctionsIntegrationFixture.cs @@ -145,9 +145,6 @@ public async Task FunctionsToLowerToUpperAsync() [Test] public async Task ConcatAsync() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (var s = OpenSession()) using (s.BeginTransaction()) { diff --git a/src/NHibernate.Test/Async/Criteria/ProjectionsTest.cs b/src/NHibernate.Test/Async/Criteria/ProjectionsTest.cs index aca0e5d3660..28fd672ccab 100644 --- a/src/NHibernate.Test/Async/Criteria/ProjectionsTest.cs +++ b/src/NHibernate.Test/Async/Criteria/ProjectionsTest.cs @@ -69,9 +69,6 @@ protected override void OnTearDown() [Test] public async Task UsingSqlFunctions_ConcatAsync() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (ISession session = Sfi.OpenSession()) { string result = await (session.CreateCriteria(typeof(Student)) @@ -89,12 +86,8 @@ public async Task UsingSqlFunctions_ConcatAsync() [Test] public async Task UsingSqlFunctions_Concat_WithCastAsync() { - if(Dialect is Oracle8iDialect) - { + if (Dialect is Oracle8iDialect) Assert.Ignore("Not supported by the active dialect:{0}.", Dialect); - } - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); using (ISession session = Sfi.OpenSession()) { diff --git a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs index cb0a1ad927a..24b168a5c3d 100644 --- a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs @@ -1416,9 +1416,6 @@ public void ReplaceFunctionWithNullArgumentAsync() [Test(Description = "GH-2860")] public async Task StringFormatWithTrimAsync() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - var q = from e in db.Employees select new { Name = $"{e.FirstName} {e.LastName}".Trim(), Phone = e.Address.PhoneNumber }; diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs index cf251c98ac9..ddb5eff8fc1 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs @@ -52,9 +52,6 @@ protected override void OnTearDown() [Test] public async Task HavingUsingSqlFunctions_ConcatAsync() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (ISession s = OpenSession()) using (ITransaction tx = s.BeginTransaction()) { diff --git a/src/NHibernate.Test/Criteria/Lambda/FunctionsIntegrationFixture.cs b/src/NHibernate.Test/Criteria/Lambda/FunctionsIntegrationFixture.cs index 7d5b7d014cf..202487c8f1f 100644 --- a/src/NHibernate.Test/Criteria/Lambda/FunctionsIntegrationFixture.cs +++ b/src/NHibernate.Test/Criteria/Lambda/FunctionsIntegrationFixture.cs @@ -134,9 +134,6 @@ public void FunctionsToLowerToUpper() [Test] public void Concat() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (var s = OpenSession()) using (s.BeginTransaction()) { diff --git a/src/NHibernate.Test/Criteria/ProjectionsTest.cs b/src/NHibernate.Test/Criteria/ProjectionsTest.cs index 0eb03b33a60..c53b0158639 100644 --- a/src/NHibernate.Test/Criteria/ProjectionsTest.cs +++ b/src/NHibernate.Test/Criteria/ProjectionsTest.cs @@ -58,9 +58,6 @@ protected override void OnTearDown() [Test] public void UsingSqlFunctions_Concat() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (ISession session = Sfi.OpenSession()) { string result = session.CreateCriteria(typeof(Student)) @@ -78,12 +75,8 @@ public void UsingSqlFunctions_Concat() [Test] public void UsingSqlFunctions_Concat_WithCast() { - if(Dialect is Oracle8iDialect) - { + if (Dialect is Oracle8iDialect) Assert.Ignore("Not supported by the active dialect:{0}.", Dialect); - } - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); using (ISession session = Sfi.OpenSession()) { diff --git a/src/NHibernate.Test/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Linq/LinqQuerySamples.cs index 27414a8926b..dc734e71aa5 100755 --- a/src/NHibernate.Test/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Linq/LinqQuerySamples.cs @@ -2001,9 +2001,6 @@ public void ReplaceFunctionWithNullArgument() [Test(Description = "GH-2860")] public void StringFormatWithTrim() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - var q = from e in db.Employees select new { Name = $"{e.FirstName} {e.LastName}".Trim(), Phone = e.Address.PhoneNumber }; diff --git a/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs index 24613a6531c..3e4f293f359 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs @@ -41,9 +41,6 @@ protected override void OnTearDown() [Test] public void HavingUsingSqlFunctions_Concat() { - if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) - Assert.Ignore("Current dialect does not support this test"); - using (ISession s = OpenSession()) using (ITransaction tx = s.BeginTransaction()) { From 79461cf4f7cf9839208e1633153a8a1a69eaedc3 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 11:34:12 +1300 Subject: [PATCH 4/8] Trigger SAP build From b2fc289eb49f989ec439ff0eea0c3f6ef3d083a1 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 13:21:45 +1300 Subject: [PATCH 5/8] Fix concat definition for SybaseSQLAnywhere10Dialect --- src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs index ea91c7f817e..3153e4fa527 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs @@ -257,7 +257,7 @@ protected virtual void RegisterStringFunctions() RegisterFunction("char_length", new StandardSQLFunction("char_length", NHibernateUtil.Int32)); RegisterFunction("compare", new VarArgsSQLFunction(NHibernateUtil.Int32, "compare(", ",", ")")); RegisterFunction("compress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "compress(", ",", ")")); - RegisterFunction("concat", new VarArgsSQLFunction("(", "+", ")")); + RegisterFunction("concat", new VarArgsSQLFunction("(", " || ", ")")); RegisterFunction("csconvert", new VarArgsSQLFunction(NHibernateUtil.StringClob, "csconvert(", ",", ")")); RegisterFunction("decompress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decompress(", ",", ")")); RegisterFunction("decrypt", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decrypt(", ",", ")")); From dd9f1cfd77d0902a97287359c7e3d59d450001ff Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 15:57:54 +1300 Subject: [PATCH 6/8] Same as in Dialect --- src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs index 3153e4fa527..4b7b1cf4c48 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs @@ -257,7 +257,6 @@ protected virtual void RegisterStringFunctions() RegisterFunction("char_length", new StandardSQLFunction("char_length", NHibernateUtil.Int32)); RegisterFunction("compare", new VarArgsSQLFunction(NHibernateUtil.Int32, "compare(", ",", ")")); RegisterFunction("compress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "compress(", ",", ")")); - RegisterFunction("concat", new VarArgsSQLFunction("(", " || ", ")")); RegisterFunction("csconvert", new VarArgsSQLFunction(NHibernateUtil.StringClob, "csconvert(", ",", ")")); RegisterFunction("decompress", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decompress(", ",", ")")); RegisterFunction("decrypt", new VarArgsSQLFunction(NHibernateUtil.BinaryBlob, "decrypt(", ",", ")")); From 535fcb2c391b720fb0d29743e7ddce0a9c900e5f Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 16:34:05 +1300 Subject: [PATCH 7/8] Revert changes to trim function --- src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs | 3 +++ src/NHibernate.Test/Linq/LinqQuerySamples.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs index 24b168a5c3d..cb0a1ad927a 100644 --- a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs @@ -1416,6 +1416,9 @@ public void ReplaceFunctionWithNullArgumentAsync() [Test(Description = "GH-2860")] public async Task StringFormatWithTrimAsync() { + if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) + Assert.Ignore("Current dialect does not support this test"); + var q = from e in db.Employees select new { Name = $"{e.FirstName} {e.LastName}".Trim(), Phone = e.Address.PhoneNumber }; diff --git a/src/NHibernate.Test/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Linq/LinqQuerySamples.cs index dc734e71aa5..27414a8926b 100755 --- a/src/NHibernate.Test/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Linq/LinqQuerySamples.cs @@ -2001,6 +2001,9 @@ public void ReplaceFunctionWithNullArgument() [Test(Description = "GH-2860")] public void StringFormatWithTrim() { + if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) + Assert.Ignore("Current dialect does not support this test"); + var q = from e in db.Employees select new { Name = $"{e.FirstName} {e.LastName}".Trim(), Phone = e.Address.PhoneNumber }; From 68b66f2eb16bf9c39c628d86e9467a74f3a9c39a Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Sun, 2 Jan 2022 16:41:50 +1300 Subject: [PATCH 8/8] Revert HavingUsingSqlFunctions_Concat --- .../Async/NHSpecificTest/NH1280/NH1280Fixture.cs | 3 +++ src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs index ddb5eff8fc1..cf251c98ac9 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1280/NH1280Fixture.cs @@ -52,6 +52,9 @@ protected override void OnTearDown() [Test] public async Task HavingUsingSqlFunctions_ConcatAsync() { + if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) + Assert.Ignore("Current dialect does not support this test"); + using (ISession s = OpenSession()) using (ITransaction tx = s.BeginTransaction()) { diff --git a/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs index 3e4f293f359..24613a6531c 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs @@ -41,6 +41,9 @@ protected override void OnTearDown() [Test] public void HavingUsingSqlFunctions_Concat() { + if (TestDialect.HasBrokenTypeInferenceOnSelectedParameters) + Assert.Ignore("Current dialect does not support this test"); + using (ISession s = OpenSession()) using (ITransaction tx = s.BeginTransaction()) {