|
From: <te...@us...> - 2008-09-26 23:25:23
|
Revision: 3784
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3784&view=rev
Author: tehlike
Date: 2008-09-26 23:25:05 +0000 (Fri, 26 Sep 2008)
Log Message:
-----------
Applying patch for NH1502 by Jaroslav Mart?\195?\161sek with a little modification.
Converting "string orderByString" to "SqlString orderByString" in order to keep placeholder
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/Order.cs
trunk/nhibernate/src/NHibernate/Loader/AbstractEntityJoinWalker.cs
trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs
trunk/nhibernate/src/NHibernate/Loader/Entity/CascadeEntityJoinWalker.cs
trunk/nhibernate/src/NHibernate/Loader/Entity/EntityJoinWalker.cs
trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs
trunk/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-3.5.csproj
trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlSelectBuilderFixture.cs
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Person.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/Order.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Order.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Criterion/Order.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -43,7 +43,7 @@
/// <summary>
/// Render the SQL fragment
/// </summary>
- public virtual string ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
+ public virtual SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
if(projection!=null)
{
@@ -52,7 +52,7 @@
SqlString truncated = NHibernate.Util.StringHelper.RemoveAsAliasesFromSql(produced);
sb = sb.Append(truncated);
sb = sb.Append(ascending ? " asc" : " desc");
- return sb.ToString();
+ return sb;
}
string[] columns = criteriaQuery.GetColumnAliasesUsingProjection(criteria, propertyName);
@@ -67,13 +67,13 @@
if (lower)
{
fragment.Append(factory.Dialect.LowercaseFunction)
- .Append('(');
+ .Append("(");
}
fragment.Append(columns[i]);
if (lower)
{
- fragment.Append(')');
+ fragment.Append(")");
}
fragment.Append(ascending ? " asc" : " desc");
@@ -84,7 +84,7 @@
}
}
- return fragment.ToString();
+ return new SqlString(fragment.ToString());
}
public override string ToString()
Modified: trunk/nhibernate/src/NHibernate/Loader/AbstractEntityJoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/AbstractEntityJoinWalker.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Loader/AbstractEntityJoinWalker.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -28,7 +28,7 @@
alias = rootSqlAlias;
}
- protected void InitAll(SqlString whereString,string orderByString,LockMode lockMode)
+ protected void InitAll(SqlString whereString, SqlString orderByString, LockMode lockMode)
{
WalkEntityTree(persister, Alias);
IList<OuterJoinableAssociation> allAssociations = new List<OuterJoinableAssociation>(associations);
@@ -41,20 +41,20 @@
}
protected void InitProjection(SqlString projectionString, SqlString whereString,
- string orderByString, string groupByString, SqlString havingString, LockMode lockMode)
+ SqlString orderByString, string groupByString, SqlString havingString, LockMode lockMode)
{
WalkEntityTree(persister, Alias);
Persisters = new ILoadable[0];
InitStatementString(projectionString, whereString, orderByString, groupByString, havingString, lockMode);
}
- private void InitStatementString(SqlString condition, string orderBy, LockMode lockMode)
+ private void InitStatementString(SqlString condition, SqlString orderBy, LockMode lockMode)
{
InitStatementString(null, condition, orderBy, string.Empty, null, lockMode);
}
private void InitStatementString(SqlString projection,SqlString condition,
- string orderBy,string groupBy, SqlString having, LockMode lockMode)
+ SqlString orderBy,string groupBy, SqlString having, LockMode lockMode)
{
int joins = CountEntityPersisters(associations);
Suffixes = BasicLoader.GenerateSuffixes(joins + 1);
Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -189,21 +189,21 @@
return condition.ToSqlString();
}
- public string GetOrderBy()
+ public SqlString GetOrderBy()
{
- StringBuilder orderBy = new StringBuilder(30);
+ SqlStringBuilder orderBy = new SqlStringBuilder(30);
bool first = true;
foreach (CriteriaImpl.OrderEntry oe in rootCriteria.IterateOrderings())
{
if (!first)
{
- orderBy.Append(StringHelper.CommaSpace);
+ orderBy.Add(StringHelper.CommaSpace);
}
first = false;
- orderBy.Append(oe.Order.ToSqlString(oe.Criteria, this));
+ orderBy.Add(oe.Order.ToSqlString(oe.Criteria, this));
}
- return orderBy.ToString();
+ return orderBy.ToSqlString();
}
public ISessionFactoryImplementor Factory
@@ -718,4 +718,4 @@
#endregion
}
-}
\ No newline at end of file
+}
Modified: trunk/nhibernate/src/NHibernate/Loader/Entity/CascadeEntityJoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/Entity/CascadeEntityJoinWalker.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Loader/Entity/CascadeEntityJoinWalker.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -19,7 +19,7 @@
//include the discriminator and class-level where, but not filters
.Add(persister.FilterFragment(Alias, new CollectionHelper.EmptyMapClass<string, IFilter>()));
- InitAll(whereCondition.ToSqlString(), string.Empty, LockMode.Read);
+ InitAll(whereCondition.ToSqlString(), SqlString.Empty, LockMode.Read);
}
protected override bool IsJoinedFetchEnabled(IAssociationType type, FetchMode config, CascadeStyle cascadeStyle)
@@ -38,4 +38,4 @@
get { return "load " + Persister.EntityName; }
}
}
-}
\ No newline at end of file
+}
Modified: trunk/nhibernate/src/NHibernate/Loader/Entity/EntityJoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/Entity/EntityJoinWalker.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Loader/Entity/EntityJoinWalker.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -25,7 +25,7 @@
//include the discriminator and class-level where, but not filters
.Add(persister.FilterFragment(Alias, new CollectionHelper.EmptyMapClass<string, IFilter>()));
- InitAll(whereCondition.ToSqlString(), string.Empty, lockMode);
+ InitAll(whereCondition.ToSqlString(), SqlString.Empty, lockMode);
}
/// <summary>
@@ -42,4 +42,4 @@
get { return "load " + Persister.EntityName; }
}
}
-}
\ No newline at end of file
+}
Modified: trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -525,21 +525,34 @@
return !tooDeep && !IsDuplicateAssociation(lhsTable, lhsColumnNames, type);
}
- protected string OrderBy(IList<OuterJoinableAssociation> associations, string orderBy)
+ protected SqlString OrderBy(IList<OuterJoinableAssociation> associations, SqlString orderBy)
{
return MergeOrderings(OrderBy(associations), orderBy);
}
- protected string MergeOrderings(string ass, string orderBy)
+ protected SqlString OrderBy(IList<OuterJoinableAssociation> associations, string orderBy)
{
+ return MergeOrderings(OrderBy(associations), new SqlString(orderBy));
+ }
+
+ protected SqlString MergeOrderings(SqlString ass, SqlString orderBy)
+ {
if (ass.Length == 0)
return orderBy;
else if (orderBy.Length == 0)
return ass;
else
- return ass + StringHelper.CommaSpace + orderBy;
+ return ass.Append(StringHelper.CommaSpace).Append(orderBy);
}
+ protected SqlString MergeOrderings(string ass, SqlString orderBy) {
+ return this.MergeOrderings(new SqlString(ass), orderBy);
+ }
+
+ protected SqlString MergeOrderings(string ass, string orderBy) {
+ return this.MergeOrderings(new SqlString(ass), new SqlString(orderBy));
+ }
+
/// <summary>
/// Generate a sequence of <c>LEFT OUTER JOIN</c> clauses for the given associations.
/// </summary>
@@ -597,9 +610,9 @@
/// <summary>
/// Get the order by string required for collection fetching
/// </summary>
- protected static string OrderBy(IList<OuterJoinableAssociation> associations)
+ protected SqlString OrderBy(IList<OuterJoinableAssociation> associations)
{
- StringBuilder buf = new StringBuilder();
+ SqlStringBuilder buf = new SqlStringBuilder();
OuterJoinableAssociation last = null;
foreach (OuterJoinableAssociation oj in associations)
@@ -612,7 +625,7 @@
if (queryableCollection.HasOrdering)
{
string orderByString = queryableCollection.GetSQLOrderByString(oj.RHSAlias);
- buf.Append(orderByString).Append(StringHelper.CommaSpace);
+ buf.Add(orderByString).Add(StringHelper.CommaSpace);
}
}
else
@@ -627,7 +640,7 @@
if (queryableCollection.HasManyToManyOrdering)
{
string orderByString = queryableCollection.GetManyToManyOrderByString(oj.RHSAlias);
- buf.Append(orderByString).Append(StringHelper.CommaSpace);
+ buf.Add(orderByString).Add(StringHelper.CommaSpace);
}
}
}
@@ -636,10 +649,11 @@
last = oj;
}
- if (buf.Length > 0)
- buf.Length = buf.Length - 2;
+ if (buf.Count > 0) {
+ buf.RemoveAt(buf.Count-1);
+ }
- return buf.ToString();
+ return buf.ToSqlString();
}
/// <summary>
Modified: trunk/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -17,7 +17,7 @@
private SqlString outerJoinsAfterFrom;
private SqlString whereClause;
private SqlString outerJoinsAfterWhere;
- private string orderByClause;
+ private SqlString orderByClause;
private string groupByClause;
private SqlString havingClause;
private LockMode lockMode;
@@ -72,7 +72,7 @@
/// </summary>
/// <param name="orderByClause">The orderByClause to set</param>
/// <returns>The SqlSelectBuilder</returns>
- public SqlSelectBuilder SetOrderByClause(string orderByClause)
+ public SqlSelectBuilder SetOrderByClause(SqlString orderByClause)
{
this.orderByClause = orderByClause;
return this;
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -1675,5 +1675,22 @@
t.Rollback();
s.Close();
}
+
+ [Test]
+ public void OrderProjectionTest() {
+ using (ISession session = this.OpenSession()) {
+ ICriteria criteria = session.CreateCriteria(typeof (Student), "c");
+
+ criteria
+ .AddOrder(Order.Asc(
+ Projections.Conditional(
+ Restrictions.Eq("StudentNumber", (long)1),
+ Projections.Constant(0),
+ Projections.Constant(1)
+ )));
+
+ criteria.List();
+ }
+ }
}
}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Fixture.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -0,0 +1,63 @@
+using System.Collections;
+using System.Collections.Generic;
+using NHibernate.Criterion;
+using NHibernate.Dialect.Function;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH1502
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ protected override void OnTearDown()
+ {
+ base.OnTearDown();
+ using (ISession session = OpenSession())
+ {
+ using (ITransaction tx = session.BeginTransaction())
+ {
+ session.Delete("from Person");
+ tx.Commit();
+ }
+ }
+ }
+
+ protected override void OnSetUp()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ Person e1 = new Person("Joe", 10, 9);
+ Person e2 = new Person("Sally", 100, 8);
+ Person e3 = new Person("Tim", 20, 7); //20
+ Person e4 = new Person("Fred", 40, 40);
+ Person e5 = new Person("Mike", 50, 50);
+ s.Save(e1);
+ s.Save(e2);
+ s.Save(e3);
+ s.Save(e4);
+ s.Save(e5);
+ tx.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void OrderProjectionTest()
+ {
+ ISQLFunction arithmaticMultiplication = new VarArgsSQLFunction("(", "*", ")");
+ using (ISession session = this.OpenSession()) {
+ ICriteria criteria = session.CreateCriteria(typeof (Person), "c");
+
+ criteria.AddOrder(Order.Asc(
+ Projections.SqlFunction(arithmaticMultiplication, NHibernateUtil.GuessType(typeof (int)),
+ Projections.Property("IQ"), Projections.Constant(-1))));
+ IList<Person> results=criteria.List<Person>();
+ Assert.AreEqual(5, results.Count);
+ Assert.AreEqual("Sally", results[0].Name);
+ Assert.AreEqual("Joe", results[4].Name);
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Mappings.hbm.xml 2008-09-26 23:25:05 UTC (rev 3784)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH1502">
+
+ <class name="Person" lazy="false">
+ <id name="Id">
+ <generator class="native" />
+ </id>
+ <property name="Name"/>
+ <property name="IQ"/>
+ <property name="ShoeSize"/>
+ </class>
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Person.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Person.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1502/Person.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -0,0 +1,51 @@
+using System.Collections;
+
+namespace NHibernate.Test.NHSpecificTest.NH1502
+{
+ public class Person
+ {
+ private int id;
+ private int iq;
+ private string name;
+ private IList pets;
+ private int shoeSize;
+
+ public Person()
+ {
+ pets = new ArrayList();
+ }
+
+ public Person(string name, int iq, int shoeSize)
+ {
+ this.name = name;
+ this.iq = iq;
+ this.shoeSize = shoeSize;
+ pets = new ArrayList();
+ }
+
+ public virtual int Id
+ {
+ get { return id; }
+ set { id = value; }
+ }
+
+ public virtual string Name
+ {
+ get { return name; }
+ set { name = value; }
+ }
+
+ public virtual int IQ
+ {
+ get { return iq; }
+ set { iq = value; }
+ }
+
+ public virtual int ShoeSize
+ {
+ get { return shoeSize; }
+ set { shoeSize = value; }
+ }
+
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-3.5.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-3.5.csproj 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-3.5.csproj 2008-09-26 23:25:05 UTC (rev 3784)
@@ -494,6 +494,8 @@
<Compile Include="NHSpecificTest\NH1499\Document.cs" />
<Compile Include="NHSpecificTest\NH1499\Fixture.cs" />
<Compile Include="NHSpecificTest\NH1499\Person.cs" />
+ <Compile Include="NHSpecificTest\NH1502\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH1502\Person.cs" />
<Compile Include="NHSpecificTest\NH280\Fixture.cs" />
<Compile Include="NHSpecificTest\NH280\Foo.cs" />
<Compile Include="NHSpecificTest\NH1018\Employee.cs" />
@@ -1470,6 +1472,9 @@
<EmbeddedResource Include="NHSpecificTest\NH1499\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH1502\Mappings.hbm.xml" />
+ </ItemGroup>
+ <ItemGroup>
<Folder Include="Properties\" />
<Folder Include="Unionsubclass2\" />
</ItemGroup>
Modified: trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlSelectBuilderFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlSelectBuilderFixture.cs 2008-09-26 20:18:17 UTC (rev 3783)
+++ trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlSelectBuilderFixture.cs 2008-09-26 23:25:05 UTC (rev 3784)
@@ -27,7 +27,7 @@
select.SetOuterJoins(
new SqlString(" LEFT OUTER JOIN before ON select_test_alias.column1 = before.column1"),
new SqlString(" after.some_field = after.another_field "));
- select.SetOrderByClause("column1 DESC");
+ select.SetOrderByClause(new SqlString("column1 DESC"));
select.SetWhereClause("select_test_alias", new string[] {"identity_column"}, NHibernateUtil.Int64);
@@ -49,4 +49,4 @@
Assert.AreEqual(1, sqlString.GetParameterCount(), "One parameter");
}
}
-}
\ No newline at end of file
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|