From: <fab...@us...> - 2009-05-06 16:10:30
|
Revision: 4254 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4254&view=rev Author: fabiomaulo Date: 2009-05-06 16:10:29 +0000 (Wed, 06 May 2009) Log Message: ----------- End porting tests for UPDATE executable HQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/AssignmentSpecification.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/AssignmentSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/AssignmentSpecification.cs 2009-05-06 14:54:55 UTC (rev 4253) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/AssignmentSpecification.cs 2009-05-06 16:10:29 UTC (rev 4254) @@ -37,7 +37,16 @@ // knows about the property-ref path in the correct format; it is either this, or // recurse over the DotNodes constructing the property path just like DotNode does // internally - var lhs = (DotNode)eq.GetFirstChild(); + DotNode lhs; + try + { + lhs = (DotNode)eq.GetFirstChild(); + } + catch (InvalidCastException e) + { + throw new QueryException( + string.Format("Left side of assigment should be a case sensitive property or a field (depending on mapping); found '{0}'", eq.GetFirstChild()), e); + } var rhs = (SqlNode)lhs.NextSibling; ValidateLhs(lhs); Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-06 14:54:55 UTC (rev 4253) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-06 16:10:29 UTC (rev 4254) @@ -357,6 +357,86 @@ s.Close(); data.Cleanup(); + } + + [Test] + public void UpdateSetNullUnionSubclass() + { + var data = new TestData(this); + data.Prepare(); + + // These should reach out into *all* subclass tables... + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + int count = s.CreateQuery("update Vehicle set Owner = 'Steve'").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(4), "incorrect restricted update count"); + count = s.CreateQuery("update Vehicle set Owner = null where Owner = 'Steve'").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(4), "incorrect restricted update count"); + + count = s.CreateQuery("delete Vehicle where Owner is null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(4), "incorrect restricted update count"); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + [Test] + public void WrongPropertyNameThrowQueryException() + { + using (ISession s = OpenSession()) + { + var e = Assert.Throws<QueryException>(() => s.CreateQuery("update Vehicle set owner = null where owner = 'Steve'").ExecuteUpdate()); + Assert.That(e.Message, Text.StartsWith("Left side of assigment should be a case sensitive property or a field")); + } + } + + [Test] + public void UpdateSetNullOnDiscriminatorSubclass() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + int count = s.CreateQuery("update PettingZoo set address.city = null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(1), "Incorrect discrim subclass delete count"); + count = s.CreateQuery("delete Zoo where address.city is null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(1), "Incorrect discrim subclass delete count"); + + count = s.CreateQuery("update Zoo set address.city = null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(1), "Incorrect discrim subclass delete count"); + count = s.CreateQuery("delete Zoo where address.city is null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(1), "Incorrect discrim subclass delete count"); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + [Test] + public void UpdateSetNullOnJoinedSubclass() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + int count = s.CreateQuery("update Mammal set bodyWeight = null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(2), "Incorrect deletion count on joined subclass"); + + count = s.CreateQuery("delete Animal where bodyWeight = null").ExecuteUpdate(); + Assert.That(count, Is.EqualTo(2), "Incorrect deletion count on joined subclass"); + + t.Commit(); + s.Close(); + + data.Cleanup(); } #endregion This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |