diff --git a/src/NHibernate.Test/DialectTest/DB2DialectFixture.cs b/src/NHibernate.Test/DialectTest/DB2DialectFixture.cs index 3fee6c93d12..2ed1574657d 100644 --- a/src/NHibernate.Test/DialectTest/DB2DialectFixture.cs +++ b/src/NHibernate.Test/DialectTest/DB2DialectFixture.cs @@ -26,7 +26,7 @@ public void GetLimitString() SqlString limited = dialect.GetLimitString(sql, new SqlString("111"), new SqlString("222")); Assert.AreEqual( - "select * from (select rownumber() over(order by a, x) as rownum, a, b, c from d where X = ? and Z = ? order by a, x) as tempresult where rownum between 111+1 and 222", + "select a,b,c from (select rownumber() over(order by a, x) as rownum, a, b, c from d where X = ? and Z = ? order by a, x) as tempresult where rownum between 111+1 and 222", limited.ToString()); Assert.AreEqual(2, limited.GetParameterCount()); } @@ -58,4 +58,4 @@ public void GetLimitString_NoOffsetSpecified_UsesFetchFirstOnly() Assert.AreEqual(2, limited.GetParameterCount()); } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/ReadOnly/TextHolder.cs b/src/NHibernate.Test/ReadOnly/TextHolder.cs index e367f379710..94c7f66590f 100644 --- a/src/NHibernate.Test/ReadOnly/TextHolder.cs +++ b/src/NHibernate.Test/ReadOnly/TextHolder.cs @@ -10,7 +10,7 @@ public class TextHolder /// public static bool SupportedForDialect(Dialect.Dialect dialect) { - return !(dialect is FirebirdDialect || dialect is Oracle8iDialect || dialect is MsSqlCeDialect || dialect is HanaRowStoreDialect); + return !(dialect is FirebirdDialect || dialect is Oracle8iDialect || dialect is MsSqlCeDialect || dialect is HanaRowStoreDialect || dialect is DB2Dialect); } private long id; diff --git a/src/NHibernate/Dialect/DB2Dialect.cs b/src/NHibernate/Dialect/DB2Dialect.cs index 4ec34033f9e..d5f5e720421 100644 --- a/src/NHibernate/Dialect/DB2Dialect.cs +++ b/src/NHibernate/Dialect/DB2Dialect.cs @@ -232,28 +232,29 @@ public override bool SupportsVariableLimit get { return false; } } - public override SqlString GetLimitString(SqlString querySqlString, SqlString offset, SqlString limit) + public override SqlString GetLimitString(SqlString sql, SqlString offset, SqlString limit) { if (offset == null) { - return new SqlString(querySqlString, - " fetch first ", - limit, - " rows only"); + return new SqlString(sql, " fetch first ", limit, " rows only"); } + ExtractColumnOrAliasNames(sql, out var selectColumns, out _, out _); + /* * "select * from (select row_number() over(orderby_clause) as rownum, " * querySqlString_without select * " ) as tempresult where rownum between ? and ?" */ - string rownumClause = GetRowNumber(querySqlString); + string rownumClause = GetRowNumber(sql); SqlStringBuilder pagingBuilder = new SqlStringBuilder(); pagingBuilder - .Add("select * from (select ") + .Add("select " ) + .Add(string.Join(",", selectColumns)) + .Add(" from (select ") .Add(rownumClause) - .Add(querySqlString.Substring(7)) + .Add(sql.Substring(7)) .Add(") as tempresult where rownum "); if (limit != null)