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..80f8a922d98 100644 --- a/src/NHibernate/Driver/DB2CoreDriver.cs +++ b/src/NHibernate/Driver/DB2CoreDriver.cs @@ -1,27 +1,19 @@ -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 - { - public DB2CoreDriver() : base("IBM.Data.DB2.Core") - { - } + // Since v5.6 + [Obsolete("Please use DB2NetDriver")] + public class DB2CoreDriver : DB2NetDriver + { + private static readonly INHibernateLogger Log = NHibernateLogger.For(typeof(DB2CoreDriver)); - public override bool UseNamedPrefixInSql => true; - - public override bool UseNamedPrefixInParameter => true; - - public override string NamedPrefix => "@"; - - protected override void InitializeParameter(DbParameter dbParam, string name, SqlType sqlType) + public DB2CoreDriver() : base("IBM.Data.DB2.Core") { - dbParam.ParameterName = FormatNameForParameter(name); - base.InitializeParameter(dbParam, name, sqlType); + Log.Warn("DB2CoreDriver is obsolete, please use DB2NetDriver instead."); } } } 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); + } + } +}