From fbc3ea8fbb0ab3316f04157be9228b4ac5a4cd4d Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Wed, 5 Jun 2024 20:34:36 +1000 Subject: [PATCH 1/2] Add new DB2NetDriver and obsolete DB2CoreDriver --- src/NHibernate.Test/TestDialect.cs | 7 ++++- .../TestDialects/DB2TestDialect.cs | 16 ++++++++++ .../TestDatabaseSetup.cs | 7 +++++ src/NHibernate/Dialect/DB2Dialect.cs | 5 ++++ src/NHibernate/Driver/DB2CoreDriver.cs | 21 ++++---------- src/NHibernate/Driver/DB2NetDriver.cs | 29 +++++++++++++++++++ 6 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 src/NHibernate.Test/TestDialects/DB2TestDialect.cs create mode 100644 src/NHibernate/Driver/DB2NetDriver.cs diff --git a/src/NHibernate.Test/TestDialect.cs b/src/NHibernate.Test/TestDialect.cs index 69ab31fcb37..bcf2218ccbf 100644 --- a/src/NHibernate.Test/TestDialect.cs +++ b/src/NHibernate.Test/TestDialect.cs @@ -123,10 +123,15 @@ public bool SupportsSqlType(SqlType sqlType) /// public virtual bool SupportsModuloOnDecimal => true; + /// + /// Supports sub-selects in order by clause + /// + public virtual bool SupportsSubSelectsInOrderBy => _dialect.SupportsScalarSubSelects; + /// /// Supports aggregating sub-selects in order by clause /// - public virtual bool SupportsAggregatingScalarSubSelectsInOrderBy => _dialect.SupportsScalarSubSelects; + public virtual bool SupportsAggregatingScalarSubSelectsInOrderBy => SupportsSubSelectsInOrderBy; /// /// Supports order by and limits/top in correlated sub-queries diff --git a/src/NHibernate.Test/TestDialects/DB2TestDialect.cs b/src/NHibernate.Test/TestDialects/DB2TestDialect.cs new file mode 100644 index 00000000000..a96b57eeb24 --- /dev/null +++ b/src/NHibernate.Test/TestDialects/DB2TestDialect.cs @@ -0,0 +1,16 @@ +namespace NHibernate.Test.TestDialects +{ + public class DB2TestDialect: TestDialect + { + public DB2TestDialect(Dialect.Dialect dialect) : base(dialect) + { + } + + public override bool HasBrokenTypeInferenceOnSelectedParameters => true; + public override bool SupportsCancelQuery => false; + public override bool SupportsComplexExpressionInGroupBy => false; + public override bool SupportsNonDataBoundCondition => false; + public override bool SupportsSelectForUpdateWithPaging => false; + public override bool SupportsSubSelectsInOrderBy => false; + } +} diff --git a/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs b/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs index 0856f339d02..a11b7f157b6 100644 --- a/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs +++ b/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs @@ -32,6 +32,9 @@ public class DatabaseSetup {"NHibernate.Driver.OracleManagedDataClientDriver", SetupOracle}, {"NHibernate.Driver.OdbcDriver", SetupSqlServerOdbc}, {"NHibernate.Driver.SQLite20Driver", SetupSQLite}, + {"NHibernate.Driver.DB2Driver", SetupDB2}, + {"NHibernate.Driver.DB2CoreDriver", SetupDB2}, + {"NHibernate.Driver.DB2NetDriver", SetupDB2}, #if NETFX {"NHibernate.Driver.SqlServerCeDriver", SetupSqlServerCe}, {"NHibernate.Driver.SapSQLAnywhere17Driver", SetupSqlAnywhere} @@ -207,6 +210,10 @@ private static void SetupSQLite(Cfg.Configuration cfg) } } + private static void SetupDB2(Cfg.Configuration cfg) + { + } + private static void SetupOracle(Cfg.Configuration cfg) { // disabled until system password is set on TeamCity diff --git a/src/NHibernate/Dialect/DB2Dialect.cs b/src/NHibernate/Dialect/DB2Dialect.cs index a558e6d313d..042c206f1e7 100644 --- a/src/NHibernate/Dialect/DB2Dialect.cs +++ b/src/NHibernate/Dialect/DB2Dialect.cs @@ -214,6 +214,8 @@ public override bool SupportsSequences get { return true; } } + public override string QuerySequencesString => "select seqname from syscat.sequences"; + /// public override bool SupportsLimit { @@ -311,6 +313,9 @@ public override string ForUpdateString public override bool SupportsExistsInSelect => false; + /// + public override bool SupportsHavingOnGroupedByComputation => false; + public override bool DoesReadCommittedCauseWritersToBlockReaders => true; #endregion diff --git a/src/NHibernate/Driver/DB2CoreDriver.cs b/src/NHibernate/Driver/DB2CoreDriver.cs index 1838ee13373..234d81c265b 100644 --- a/src/NHibernate/Driver/DB2CoreDriver.cs +++ b/src/NHibernate/Driver/DB2CoreDriver.cs @@ -1,27 +1,16 @@ -using System.Data.Common; -using NHibernate.SqlTypes; +using System; namespace NHibernate.Driver { /// /// A NHibernate Driver for using the IBM.Data.DB2.Core DataProvider. /// - public class DB2CoreDriver : DB2DriverBase - { + // Since v5.6 + [Obsolete("Please use DB2NetDriver")] + public class DB2CoreDriver : DB2NetDriver + { public DB2CoreDriver() : base("IBM.Data.DB2.Core") { } - - public override bool UseNamedPrefixInSql => true; - - public override bool UseNamedPrefixInParameter => true; - - public override string NamedPrefix => "@"; - - protected override void InitializeParameter(DbParameter dbParam, string name, SqlType sqlType) - { - dbParam.ParameterName = FormatNameForParameter(name); - base.InitializeParameter(dbParam, name, sqlType); - } } } diff --git a/src/NHibernate/Driver/DB2NetDriver.cs b/src/NHibernate/Driver/DB2NetDriver.cs new file mode 100644 index 00000000000..0d05976d174 --- /dev/null +++ b/src/NHibernate/Driver/DB2NetDriver.cs @@ -0,0 +1,29 @@ +using System.Data.Common; +using NHibernate.SqlTypes; + +namespace NHibernate.Driver +{ + /// + /// A NHibernate Driver for using the Net5.IBM.Data.Db2/Net.IBM.Data.Db2 DataProvider. + /// + public class DB2NetDriver : DB2DriverBase + { + private protected DB2NetDriver(string assemblyName) : base(assemblyName) + { + } + + public DB2NetDriver() : base("IBM.Data.Db2") + { + } + + public override bool UseNamedPrefixInSql => true; + public override bool UseNamedPrefixInParameter => true; + public override string NamedPrefix => "@"; + + protected override void InitializeParameter(DbParameter dbParam, string name, SqlType sqlType) + { + dbParam.ParameterName = FormatNameForParameter(name); + base.InitializeParameter(dbParam, name, sqlType); + } + } +} From d9072d4e9d691d66056e98b72169abec5d1490c9 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Fri, 7 Jun 2024 09:18:17 +1000 Subject: [PATCH 2/2] code review changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Frédéric Delaporte <12201973+fredericDelaporte@users.noreply.github.com> --- src/NHibernate/Driver/DB2CoreDriver.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/NHibernate/Driver/DB2CoreDriver.cs b/src/NHibernate/Driver/DB2CoreDriver.cs index 234d81c265b..80f8a922d98 100644 --- a/src/NHibernate/Driver/DB2CoreDriver.cs +++ b/src/NHibernate/Driver/DB2CoreDriver.cs @@ -9,8 +9,11 @@ namespace NHibernate.Driver [Obsolete("Please use DB2NetDriver")] public class DB2CoreDriver : DB2NetDriver { + private static readonly INHibernateLogger Log = NHibernateLogger.For(typeof(DB2CoreDriver)); + public DB2CoreDriver() : base("IBM.Data.DB2.Core") { + Log.Warn("DB2CoreDriver is obsolete, please use DB2NetDriver instead."); } } }