|
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.
|