|
From: <fab...@us...> - 2008-11-08 15:24:34
|
Revision: 3897
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3897&view=rev
Author: fabiomaulo
Date: 2008-11-08 15:24:29 +0000 (Sat, 08 Nov 2008)
Log Message:
-----------
Fix NH-1550 (by Jaroslav Mart?\195?\161sek)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/Oracle9Dialect.cs
trunk/nhibernate/src/NHibernate.Test/Legacy/SQLFunctionsTest.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/Oracle9Dialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Oracle9Dialect.cs 2008-11-08 15:14:52 UTC (rev 3896)
+++ trunk/nhibernate/src/NHibernate/Dialect/Oracle9Dialect.cs 2008-11-08 15:24:29 UTC (rev 3897)
@@ -103,6 +103,8 @@
RegisterFunction("upper", new StandardSQLFunction("upper"));
RegisterFunction("ascii", new StandardSQLFunction("ascii", NHibernateUtil.Int32));
RegisterFunction("length", new StandardSQLFunction("length", NHibernateUtil.Int64));
+ RegisterFunction("left", new SQLFunctionTemplate(NHibernateUtil.String, "substr(?1, 1, ?2)"));
+ RegisterFunction("right", new SQLFunctionTemplate(NHibernateUtil.String, "substr(?1, -?2)"));
RegisterFunction("to_char", new StandardSQLFunction("to_char", NHibernateUtil.String));
RegisterFunction("to_date", new StandardSQLFunction("to_date", NHibernateUtil.Timestamp));
@@ -189,32 +191,30 @@
get { return true; }
}
+ public override bool SupportsVariableLimit
+ {
+ get { return false; }
+ }
+
public override SqlString GetLimitString(SqlString querySqlString, int offset, int limit)
{
SqlStringBuilder pagingBuilder = new SqlStringBuilder();
var hasOffset = offset > 0;
- if (hasOffset)
- {
- pagingBuilder.Add("select * from ( select row_.*, rownum rownum_ from ( ");
- }
- else
- {
- pagingBuilder.Add("select * from ( ");
- }
+ pagingBuilder.Add("SELECT * FROM (");
pagingBuilder.Add(querySqlString);
if (hasOffset)
{
- pagingBuilder.Add(" ) row_ where rownum <= ");
+ pagingBuilder.Add(") WHERE rownum BETWEEN ");
pagingBuilder.Add(offset.ToString());
- pagingBuilder.Add(" ) where rownum_ > ");
+ pagingBuilder.Add(" AND ");
pagingBuilder.Add((limit + offset).ToString());
}
else
{
- pagingBuilder.Add(" ) where rownum <= ");
- pagingBuilder.Add(offset.ToString());
+ pagingBuilder.Add(") WHERE rownum <= ");
+ pagingBuilder.Add(limit.ToString());
}
return pagingBuilder.ToSqlString();
Modified: trunk/nhibernate/src/NHibernate.Test/Legacy/SQLFunctionsTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Legacy/SQLFunctionsTest.cs 2008-11-08 15:14:52 UTC (rev 3896)
+++ trunk/nhibernate/src/NHibernate.Test/Legacy/SQLFunctionsTest.cs 2008-11-08 15:24:29 UTC (rev 3897)
@@ -76,9 +76,17 @@
rset = s.CreateQuery("select abs(round(s.Pay)) from s in class Simple").List();
Assert.AreEqual(46f, rset[0], "abs(round(-45.8)) result was incorrect");
+ rset = s.CreateQuery("select left('abc', 2), right('abc', 2) from s in class Simple").List();
+ row = (object[]) rset[0];
+ Assert.AreEqual("ab", row[0], "Left function is broken.");
+ Assert.AreEqual("bc", row[1], "Right function is broken.");
+
// Test a larger depth 3 function example - Not a useful combo other than for testing
Assert.AreEqual(1,
- s.CreateQuery("select trunc(round(sysdate)) from s in class Simple").List().Count);
+ s.CreateQuery("select trunc(round(length('A'))) from s in class Simple").List().Count);
+ // NOTE: In Oracle this will fail as the translator will expect two columns in return
+ //Assert.AreEqual(1,
+ // s.CreateQuery("select trunc(round(sysdate)) from s in class Simple").List().Count);
// Test the oracle standard NVL funtion as a test of multi-param functions...
// NOTE: commented out for NH, since Pay is a value type and will never be null
@@ -577,4 +585,4 @@
}
}
}
-}
\ No newline at end of file
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|