From: <fab...@us...> - 2009-05-04 23:45:32
|
Revision: 4240 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4240&view=rev Author: fabiomaulo Date: 2009-05-04 23:45:28 +0000 (Mon, 04 May 2009) Log Message: ----------- End porting tests for DELETE executable HQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleAssociatedEntity.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleEntityWithAssociation.cs Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-04 23:18:12 UTC (rev 4239) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-04 23:45:28 UTC (rev 4240) @@ -35,7 +35,49 @@ #endregion + #region DELETES + [Test] + public void DeleteWithSubquery() + { + // setup the test data... + ISession s = OpenSession(); + s.BeginTransaction(); + var owner = new SimpleEntityWithAssociation { Name = "myEntity-1" }; + owner.AddAssociation("assoc-1"); + owner.AddAssociation("assoc-2"); + owner.AddAssociation("assoc-3"); + s.Save(owner); + var owner2 = new SimpleEntityWithAssociation { Name = "myEntity-2" }; + owner2.AddAssociation("assoc-1"); + owner2.AddAssociation("assoc-2"); + owner2.AddAssociation("assoc-3"); + owner2.AddAssociation("assoc-4"); + s.Save(owner2); + var owner3 = new SimpleEntityWithAssociation { Name = "myEntity-3" }; + s.Save(owner3); + s.Transaction.Commit(); + s.Close(); + + // now try the bulk delete + s = OpenSession(); + s.BeginTransaction(); + int count = s.CreateQuery("delete SimpleEntityWithAssociation e where size(e.AssociatedEntities ) = 0 and e.Name like '%'") + .ExecuteUpdate(); + Assert.That(count, Is.EqualTo(1), "Incorrect delete count"); + s.Transaction.Commit(); + s.Close(); + + // finally, clean up + s = OpenSession(); + s.BeginTransaction(); + s.CreateQuery("delete SimpleAssociatedEntity").ExecuteUpdate(); + s.CreateQuery("delete SimpleEntityWithAssociation").ExecuteUpdate(); + s.Transaction.Commit(); + s.Close(); + } + + [Test] public void SimpleDeleteOnAnimal() { if (Dialect.HasSelfReferentialForeignKeyBug) @@ -246,6 +288,8 @@ s.Close(); } + #endregion + private class TestData { private readonly BulkManipulation tc; Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleAssociatedEntity.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleAssociatedEntity.cs 2009-05-04 23:18:12 UTC (rev 4239) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleAssociatedEntity.cs 2009-05-04 23:45:28 UTC (rev 4240) @@ -30,12 +30,12 @@ if (owner != this.owner) { UnbindFromCurrentOwner(); - if (owner != null) - { - owner.AssociatedEntities.Add(this); - } } this.owner = owner; + if (owner != null) + { + owner.AssociatedEntities.Add(this); + } } public virtual void UnbindFromCurrentOwner() Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleEntityWithAssociation.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleEntityWithAssociation.cs 2009-05-04 23:18:12 UTC (rev 4239) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleEntityWithAssociation.cs 2009-05-04 23:45:28 UTC (rev 4240) @@ -1,3 +1,4 @@ +using System; using Iesi.Collections; namespace NHibernate.Test.HQL.Ast @@ -32,5 +33,29 @@ get { return manyToManyAssociatedEntities; } set { manyToManyAssociatedEntities = value; } } + + public virtual SimpleAssociatedEntity AddAssociation(string aName) + { + var result = new SimpleAssociatedEntity {Name = aName, Owner = this}; + AddAssociation(result); + return result; + } + + public virtual void AddAssociation(SimpleAssociatedEntity association) + { + association.BindToOwner(this); + } + + public virtual void RemoveAssociation(SimpleAssociatedEntity association) + { + if (AssociatedEntities.Contains(association)) + { + association.UnbindFromCurrentOwner(); + } + else + { + throw new ArgumentException("SimpleAssociatedEntity [" + association + "] not currently bound to this [" + this + "]"); + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |