From: <pa...@us...> - 2011-04-12 05:30:09
|
Revision: 5672 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5672&view=rev Author: patearl Date: 2011-04-12 05:30:03 +0000 (Tue, 12 Apr 2011) Log Message: ----------- Dialects: Improved PostgreSQL and SQLite dialects with regards to limit handling. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-04-12 05:28:42 UTC (rev 5671) +++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-04-12 05:30:03 UTC (rev 5672) @@ -123,6 +123,11 @@ get { return true; } } + public override bool SupportsLimitOffset + { + get { return true; } + } + public override bool BindLimitParametersInReverseOrder { get { return true; } @@ -139,20 +144,36 @@ /// <returns>A new <see cref="SqlString"/> that contains the <c>LIMIT</c> clause.</returns> public override SqlString GetLimitString(SqlString querySqlString, int offset, int limit, int? offsetParameterIndex, int? limitParameterIndex) { - SqlStringBuilder pagingBuilder = new SqlStringBuilder(); - pagingBuilder.Add(querySqlString); - pagingBuilder.Add(" limit "); - pagingBuilder.Add(Parameter.WithIndex(limitParameterIndex.Value)); + object limitObject = Parameter.WithIndex(limitParameterIndex.Value); + object offsetObject = offset > 0 ? Parameter.WithIndex(offsetParameterIndex.Value) : null; + return GetLimitString(querySqlString, offsetObject, limitObject); + } - if (offset > 0) - { - pagingBuilder.Add(" offset "); - pagingBuilder.Add(Parameter.WithIndex(offsetParameterIndex.Value)); - } + public override SqlString GetLimitString(SqlString querySqlString, int offset, int limit) + { + return GetLimitString(querySqlString, new SqlString(offset.ToString()), new SqlString(limit.ToString())); + } - return pagingBuilder.ToSqlString(); - } + private SqlString GetLimitString(SqlString querySqlString, object offset, object limit) + { + SqlStringBuilder pagingBuilder = new SqlStringBuilder(); + pagingBuilder.Add(querySqlString); + if (limit != null) + { + pagingBuilder.Add(" limit "); + pagingBuilder.AddObject(limit); + } + + if (offset != null) + { + pagingBuilder.Add(" offset "); + pagingBuilder.AddObject(offset); + } + + return pagingBuilder.ToSqlString(); + } + public override string GetForUpdateString(string aliases) { return ForUpdateString + " of " + aliases; Modified: trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs 2011-04-12 05:28:42 UTC (rev 5671) +++ trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs 2011-04-12 05:30:03 UTC (rev 5672) @@ -164,6 +164,11 @@ get { return true; } } + public override bool SupportsLimitOffset + { + get { return true; } + } + public override string IdentityColumnString { get This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |