Index: nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs =================================================================== --- nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs (revision 3636) +++ nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs (working copy) @@ -111,12 +111,10 @@ get { return true; } } - /// - /// - /// - /// - /// Offset of the first row to process in the result set is non-zero - /// + /* + ///This was commented out as a workaround for NH-1197: + ///NH seems to not correctly handle SubSelects with 'variable limits' + ///see http://jira.nhibernate.org/browse/NH-1197 public override SqlString GetLimitString(SqlString querySqlString, bool hasOffset) { SqlStringBuilder pagingBuilder = new SqlStringBuilder(); @@ -131,8 +129,29 @@ } return pagingBuilder.ToSqlString(); + }*/ + + public override bool SupportsVariableLimit + { + get { return false; } } + public override SqlString GetLimitString(SqlString querySqlString, int offset, int limit) + { + SqlStringBuilder pagingBuilder = new SqlStringBuilder(); + pagingBuilder.Add(querySqlString); + pagingBuilder.Add(" limit "); + pagingBuilder.Add(limit.ToString()); + + if (offset > 0) + { + pagingBuilder.Add(" offset "); + pagingBuilder.Add(offset.ToString()); + } + + return pagingBuilder.ToSqlString(); + } + public override string GetForUpdateString(string aliases) { return ForUpdateString + " of " + aliases;