|
From: <te...@us...> - 2009-01-27 15:01:23
|
Revision: 4005
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4005&view=rev
Author: tehlike
Date: 2009-01-27 15:01:15 +0000 (Tue, 27 Jan 2009)
Log Message:
-----------
Adding Where to Extra Lazy queries. Fix for NH-1627
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
trunk/nhibernate/src/NHibernate.Test/Extralazy/ExtraLazyFixture.cs
trunk/nhibernate/src/NHibernate.Test/Extralazy/User.cs
trunk/nhibernate/src/NHibernate.Test/Extralazy/UserGroup.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/Extralazy/Photo.cs
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2009-01-27 04:23:01 UTC (rev 4004)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2009-01-27 15:01:15 UTC (rev 4005)
@@ -836,15 +836,25 @@
return frag.ToSqlStringFragment(false);
}
-
+ private SqlString AddWhereFragment(SqlString sql)
+ {
+ if (!hasWhere)
+ return sql;
+ var sqlStringBuilder = new SqlStringBuilder(sql);
+ sqlStringBuilder.Add(" and ").Add(sqlWhereString);
+ return sqlStringBuilder.ToSqlString();
+ }
private SqlString GenerateSelectSizeString(bool isIntegerIndexed)
{
string selectValue = isIntegerIndexed
? "max(" + IndexColumnNames[0] + ") + 1"
: "count(" + ElementColumnNames[0] + ")"; //sets, maps, bags
- return
- new SqlSimpleSelectBuilder(dialect, factory).SetTableName(TableName).AddWhereFragment(KeyColumnNames, KeyType, "=").
- AddColumn(selectValue).ToSqlString();
+
+ var sqlString=new SqlSimpleSelectBuilder(dialect, factory)
+ .SetTableName(TableName)
+ .AddWhereFragment(KeyColumnNames, KeyType, "=")
+ .AddColumn(selectValue).ToSqlString();
+ return AddWhereFragment(sqlString);
}
private SqlString GenerateDetectRowByIndexString()
@@ -855,10 +865,14 @@
}
// TODO NH: may be we need something else when Index is mixed with Formula
- return
- new SqlSimpleSelectBuilder(dialect, factory).SetTableName(TableName).AddWhereFragment(KeyColumnNames, KeyType, "=").
- AddWhereFragment(IndexColumnNames, IndexType, "=").AddWhereFragment(indexFormulas, IndexType, "=").AddColumn("1").
- ToSqlString();
+ var sqlString=
+ new SqlSimpleSelectBuilder(dialect, factory)
+ .SetTableName(TableName)
+ .AddWhereFragment(KeyColumnNames, KeyType, "=")
+ .AddWhereFragment(IndexColumnNames, IndexType, "=")
+ .AddWhereFragment(indexFormulas, IndexType, "=")
+ .AddColumn("1").ToSqlString();
+ return AddWhereFragment(sqlString);
}
private SqlString GenerateSelectRowByIndexString()
@@ -868,18 +882,26 @@
return null;
}
- return
- new SqlSimpleSelectBuilder(dialect, factory).SetTableName(TableName).AddWhereFragment(KeyColumnNames, KeyType, "=").
- AddWhereFragment(IndexColumnNames, IndexType, "=").AddWhereFragment(indexFormulas, IndexType, "=").AddColumns(
- ElementColumnNames, elementColumnAliases).AddColumns(indexFormulas, indexColumnAliases).ToSqlString();
+ var sqlString=new SqlSimpleSelectBuilder(dialect, factory)
+ .SetTableName(TableName)
+ .AddWhereFragment(KeyColumnNames, KeyType, "=")
+ .AddWhereFragment(IndexColumnNames, IndexType, "=")
+ .AddWhereFragment(indexFormulas, IndexType, "=")
+ .AddColumns(ElementColumnNames, elementColumnAliases)
+ .AddColumns(indexFormulas, indexColumnAliases).ToSqlString();
+ return AddWhereFragment(sqlString);
}
private SqlString GenerateDetectRowByElementString()
{
- return
- new SqlSimpleSelectBuilder(dialect, factory).SetTableName(TableName).AddWhereFragment(KeyColumnNames, KeyType, "=").
- AddWhereFragment(ElementColumnNames, ElementType, "=").AddWhereFragment(elementFormulas, ElementType, "=").
- AddColumn("1").ToSqlString();
+ var sqlString=
+ new SqlSimpleSelectBuilder(dialect, factory)
+ .SetTableName(TableName)
+ .AddWhereFragment(KeyColumnNames, KeyType, "=")
+ .AddWhereFragment(ElementColumnNames, ElementType, "=")
+ .AddWhereFragment(elementFormulas, ElementType, "=")
+ .AddColumn("1").ToSqlString();
+ return AddWhereFragment(sqlString);
}
protected virtual SelectFragment GenerateSelectFragment(string alias, string columnSuffix)
Modified: trunk/nhibernate/src/NHibernate.Test/Extralazy/ExtraLazyFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Extralazy/ExtraLazyFixture.cs 2009-01-27 04:23:01 UTC (rev 4004)
+++ trunk/nhibernate/src/NHibernate.Test/Extralazy/ExtraLazyFixture.cs 2009-01-27 15:01:15 UTC (rev 4005)
@@ -21,7 +21,40 @@
{
get { return null; }
}
+ [Test]
+ public void ExtraLazyWithWhereClause()
+ {
+ using(ISession s = OpenSession())
+ using(ITransaction t=s.BeginTransaction())
+ {
+ s.CreateSQLQuery("insert into Users (Name,Password) values('gavin','secret')")
+ .UniqueResult();
+ s.CreateSQLQuery("insert into Photos (Title,Owner) values('PRVaaa','gavin')")
+ .UniqueResult();
+ s.CreateSQLQuery("insert into Photos (Title,Owner) values('PUBbbb','gavin')")
+ .UniqueResult();
+ t.Commit();
+ }
+ using(ISession s = OpenSession())
+ {
+ var gavin = s.Get<User>("gavin");
+ Assert.AreEqual(1, gavin.Photos.Count);
+ Assert.IsFalse(NHibernateUtil.IsInitialized(gavin.Documents));
+ }
+ using(ISession s=OpenSession())
+ using(ITransaction t=s.BeginTransaction())
+ {
+ s.CreateSQLQuery("delete from Photos")
+ .UniqueResult();
+ s.CreateSQLQuery("delete from Users")
+ .UniqueResult();
+
+ t.Commit();
+ }
+ sessions.Evict(typeof(User));
+ sessions.Evict(typeof(Photo));
+ }
[Test]
public void OrphanDelete()
{
Added: trunk/nhibernate/src/NHibernate.Test/Extralazy/Photo.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Extralazy/Photo.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Extralazy/Photo.cs 2009-01-27 15:01:15 UTC (rev 4005)
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace NHibernate.Test.Extralazy
+{
+ public class Photo
+ {
+
+ protected Photo() {}
+ public Photo(string title, User owner)
+ {
+ this.Title = title;
+ this.Owner = owner;
+ }
+
+ public virtual string Title
+ {
+ get; set;
+ }
+
+ public virtual User Owner
+ {
+ get; set;
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/Extralazy/User.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Extralazy/User.cs 2009-01-27 04:23:01 UTC (rev 4004)
+++ trunk/nhibernate/src/NHibernate.Test/Extralazy/User.cs 2009-01-27 15:01:15 UTC (rev 4005)
@@ -9,6 +9,7 @@
private string password;
private IDictionary session = new Hashtable();
private ISet documents = new HashedSet();
+ private ISet photos = new HashedSet();
protected User() {}
public User(string name, string password)
{
@@ -39,5 +40,12 @@
get { return documents; }
set { documents = value; }
}
+
+
+ public virtual ISet Photos
+ {
+ get { return photos; }
+ set { photos = value; }
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/Extralazy/UserGroup.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Extralazy/UserGroup.hbm.xml 2009-01-27 04:23:01 UTC (rev 4004)
+++ trunk/nhibernate/src/NHibernate.Test/Extralazy/UserGroup.hbm.xml 2009-01-27 15:01:15 UTC (rev 4005)
@@ -25,8 +25,15 @@
<key column="owner"/>
<one-to-many class="Document"/>
</set>
+ <set name="Photos" inverse="true" lazy="true" where="Title like 'PRV%'" cascade="all,delete-orphan">
+ <key column="owner"/>
+ <one-to-many class="Photo"/>
+ </set>
</class>
-
+ <class name="Photo" table="photos">
+ <id name="Title"/>
+ <many-to-one name="Owner" not-null="true"/>
+ </class>
<class name="Document" table="documents">
<id name="Title"/>
<property name="Content" type="string" length="10000"/>
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-01-27 04:23:01 UTC (rev 4004)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-01-27 15:01:15 UTC (rev 4005)
@@ -224,6 +224,7 @@
<Compile Include="Extralazy\Document.cs" />
<Compile Include="Extralazy\ExtraLazyFixture.cs" />
<Compile Include="Extralazy\Group.cs" />
+ <Compile Include="Extralazy\Photo.cs" />
<Compile Include="Extralazy\SessionAttribute.cs" />
<Compile Include="Extralazy\User.cs" />
<Compile Include="FilterTest\BinaryFiltered.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|