|
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.
|