From: <fab...@us...> - 2009-05-07 15:04:39
|
Revision: 4261 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4261&view=rev Author: fabiomaulo Date: 2009-05-07 15:04:34 +0000 (Thu, 07 May 2009) Log Message: ----------- End porting tests for INSERT executable HQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/FooBarCopy.hbm.xml Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-07 10:40:59 UTC (rev 4260) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BulkManipulation.cs 2009-05-07 15:04:34 UTC (rev 4261) @@ -3,6 +3,8 @@ using System.Threading; using NHibernate.Dialect; using NHibernate.Hql.Ast.ANTLR; +using NHibernate.Id; +using NHibernate.Persister.Entity; using NUnit.Framework; namespace NHibernate.Test.HQL.Ast @@ -39,6 +41,7 @@ #endregion #region INSERTS + [Test] public void SimpleInsert() { @@ -61,6 +64,255 @@ data.Cleanup(); } + [Test] + public void InsertWithManyToOne() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + s.CreateQuery( + "insert into Animal (description, bodyWeight, mother) select description, bodyWeight, mother from Human"). + ExecuteUpdate(); + + t.Commit(); + t = s.BeginTransaction(); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + [Test] + public void InsertWithMismatchedTypes() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Assert.Throws<QueryException>( + () => s.CreateQuery("insert into Pickup (Owner, Vin, id) select id, Vin, Owner from Car").ExecuteUpdate(), + "mismatched types did not error"); + + t.Commit(); + t = s.BeginTransaction(); + + s.CreateQuery("delete Vehicle").ExecuteUpdate(); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + [Test] + public void InsertIntoSuperclassPropertiesFails() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Assert.Throws<QueryException>( + () => s.CreateQuery("insert into Human (id, bodyWeight) select id, bodyWeight from Lizard").ExecuteUpdate(), + "superclass prop insertion did not error"); + + t.Commit(); + t = s.BeginTransaction(); + + s.CreateQuery("delete Animal where mother is not null").ExecuteUpdate(); + s.CreateQuery("delete Animal where father is not null").ExecuteUpdate(); + s.CreateQuery("delete Animal").ExecuteUpdate(); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + [Test] + public void InsertAcrossMappedJoinFails() + { + var data = new TestData(this); + data.Prepare(); + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Assert.Throws<QueryException>( + () => s.CreateQuery("insert into Joiner (name, joinedName) select vin, owner from Car").ExecuteUpdate(), + "mapped-join insertion did not error"); + + t.Commit(); + t = s.BeginTransaction(); + + s.CreateQuery("delete Joiner").ExecuteUpdate(); + s.CreateQuery("delete Vehicle").ExecuteUpdate(); + + t.Commit(); + s.Close(); + + data.Cleanup(); + } + + public void InsertWithGeneratedId() + { + // Make sure the env supports bulk inserts with generated ids... + IEntityPersister persister = sessions.GetEntityPersister(typeof (PettingZoo).FullName); + IIdentifierGenerator generator = persister.IdentifierGenerator; + if (!HqlSqlWalker.SupportsIdGenWithBulkInsertion(generator)) + { + return; + } + + // create a Zoo + var zoo = new Zoo {Name = "zoo"}; + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + s.Save(zoo); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + int count = s.CreateQuery("insert into PettingZoo (name) select name from Zoo").ExecuteUpdate(); + t.Commit(); + s.Close(); + Assert.That(count, Is.EqualTo(1), "unexpected insertion count"); + + s = OpenSession(); + t = s.BeginTransaction(); + var pz = (PettingZoo) s.CreateQuery("from PettingZoo").UniqueResult(); + t.Commit(); + s.Close(); + + Assert.That(zoo.Name, Is.EqualTo(pz.Name)); + Assert.That(zoo.Id != pz.Id); + + s = OpenSession(); + t = s.BeginTransaction(); + s.CreateQuery("delete Zoo").ExecuteUpdate(); + t.Commit(); + s.Close(); + } + + [Test] + public void InsertWithGeneratedVersionAndId() + { + // Make sure the env supports bulk inserts with generated ids... + IEntityPersister persister = sessions.GetEntityPersister(typeof (IntegerVersioned).FullName); + IIdentifierGenerator generator = persister.IdentifierGenerator; + if (!HqlSqlWalker.SupportsIdGenWithBulkInsertion(generator)) + { + return; + } + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + var entity = new IntegerVersioned {Name = "int-vers"}; + s.Save(entity); + s.CreateQuery("select id, name, version from IntegerVersioned").List(); + t.Commit(); + s.Close(); + + long initialId = entity.Id; + int initialVersion = entity.Version; + + s = OpenSession(); + t = s.BeginTransaction(); + int count = s.CreateQuery("insert into IntegerVersioned ( name ) select name from IntegerVersioned").ExecuteUpdate(); + t.Commit(); + s.Close(); + + Assert.That(count, Is.EqualTo(1), "unexpected insertion count"); + + s = OpenSession(); + t = s.BeginTransaction(); + var created = + (IntegerVersioned) + s.CreateQuery("from IntegerVersioned where id <> :initialId").SetInt64("initialId", initialId).UniqueResult(); + t.Commit(); + s.Close(); + + Assert.That(created.Version, Is.EqualTo(initialVersion), "version was not seeded"); + + s = OpenSession(); + t = s.BeginTransaction(); + s.CreateQuery("delete IntegerVersioned").ExecuteUpdate(); + t.Commit(); + s.Close(); + } + + [Test] + public void InsertWithGeneratedTimestampVersion() + { + // Make sure the env supports bulk inserts with generated ids... + IEntityPersister persister = sessions.GetEntityPersister(typeof (TimestampVersioned).FullName); + IIdentifierGenerator generator = persister.IdentifierGenerator; + if (!HqlSqlWalker.SupportsIdGenWithBulkInsertion(generator)) + { + return; + } + + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + var entity = new TimestampVersioned {Name = "int-vers"}; + s.Save(entity); + s.CreateQuery("select id, name, version from TimestampVersioned").List(); + t.Commit(); + s.Close(); + + long initialId = entity.Id; + //Date initialVersion = entity.getVersion(); + + s = OpenSession(); + t = s.BeginTransaction(); + int count = + s.CreateQuery("insert into TimestampVersioned ( name ) select name from TimestampVersioned").ExecuteUpdate(); + t.Commit(); + s.Close(); + + Assert.That(count, Is.EqualTo(1), "unexpected insertion count"); + + s = OpenSession(); + t = s.BeginTransaction(); + var created = + (TimestampVersioned) + s.CreateQuery("from TimestampVersioned where id <> :initialId").SetInt64("initialId", initialId).UniqueResult(); + t.Commit(); + s.Close(); + + Assert.That(created.Version, Is.GreaterThan(DateTime.Today)); + + s = OpenSession(); + t = s.BeginTransaction(); + s.CreateQuery("delete TimestampVersioned").ExecuteUpdate(); + t.Commit(); + s.Close(); + } + + [Test] + public void InsertWithSelectListUsingJoins() + { + // this is just checking parsing and syntax... + ISession s = OpenSession(); + s.BeginTransaction(); + s.CreateQuery( + "insert into Animal (description, bodyWeight) select h.description, h.bodyWeight from Human h where h.mother.mother is not null") + .ExecuteUpdate(); + s.CreateQuery("delete from Animal").ExecuteUpdate(); + s.Transaction.Commit(); + s.Close(); + } + #endregion #region UPDATES Deleted: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/FooBarCopy.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/FooBarCopy.hbm.xml 2009-05-07 10:40:59 UTC (rev 4260) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/FooBarCopy.hbm.xml 2009-05-07 15:04:34 UTC (rev 4261) @@ -1,140 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" - assembly="NHibernate.DomainModel" - namespace="NHibernate.DomainModel" - default-lazy="false"> - - <!-- a slightly modified copy of FooBar.hbm.xml from the legacy test package --> - - <class - name="Foo" - table="`foos`" - proxy="FooProxy" - discriminator-value="F" - batch-size="4" - dynamic-insert="true" - dynamic-update="true" - select-before-update="true"> - - <id name="key" type="string"> - <column name="`foo_idcolumnname123`" length="36"/> - <generator class="uuid.hex"> - <param name="seperator">:</param> - </generator> - </id> - - <discriminator column="`foo_subclass_1234`" type="character" force="true"/> - <version name="version"/> - - <many-to-one name="foo" class="Foo"> - <column name="foo" length="36" index="fbmtoidx"/> - </many-to-one> - - <property name="Long"> - <column name="long_" index="fbmtoidx" unique-key="abc" not-null="true"/> - </property> - <property name="Integer"> - <column name="`integer__`" unique-key="abc" not-null="true"/> - </property> - <property name="Float"> - <column name="float_" unique-key="abc" not-null="true" check="float_ > 0.0"/> - </property> - <property name="x"/> - <property name="Double" column="double_"/> - - <primitive-array name="bytes" table="foobytes"> - <key column="id"/> - <index column="i"/> - <element column="byte_" type="byte"/> - </primitive-array> - - <property name="Date" type="date" column="date_"/> - <property name="Timestamp" type="timestamp" column="timestamp_"/> - <property name="Boolean" column="boolean_"/> - <property name="Bool" column="bool_"/> - <property name="Null" column="null_"/> - <property name="Short" column="short_"/> - <property name="Char" column="char_"/> - <property name="Zero" column="zero_"/> - <property name="Int" column="int_"/> - <property name="String"> - <column name="string_" length="48" index="fbstridx"/> - </property> - <property name="Byte" column="byte_"/> - <property name="YesNo" type="yes_no"/> - <!-- - <property name="blob" type="org.hibernate.test.legacy.Foo$Struct" column="blobb_"/> - <property name="nullBlob" type="serializable"/> - <property name="binary" column="bin_"/> - --> - <property name="Locale" column="`localeayzabc123`" access="field.camelcase-underscore" type="locale"/> - - <property name="formula" formula="int_*2"/> - - <property name="Custom" type="NHibernate.DomainModel.DoubleStringType, NHibernate.DomainModel" access="field.camelcase"> - <column name="first_name" length="66"/> - <column name="surname" length="66"/> - </property> - - <component name="nullComponent"> - <property name="name" column="null_cmpnt_"/> - </component> - - <join table="jointable"> - <key column="fooid" on-delete="cascade"/> - <property name="joinedProp"/> - </join> - - <subclass - name="Trivial" - proxy="FooProxy" - discriminator-value="T"/> - - <subclass - name="Abstract" - proxy="AbstractProxy" - discriminator-value="null"> - <set name="abstracts" batch-size="2"> - <key column="abstract_id"/> - <one-to-many class="Abstract"/> - </set> - <property name="time" column="the_time"/> - - <subclass - name="Bar" - proxy="BarProxy" - discriminator-value="B"> - <property name="barString"> - <column name="bar_string" length="24"/> - </property> - <any name="object" meta-type="character" id-type="long" cascade="all"> - <meta-value value="O" class="One"/> - <meta-value value="M" class="Many"/> - <column name="clazz" length="100"/> - <column name="gen_id"/> - </any> - <join table="bar_join_table"> - <key column="bar_id"/> - <property name="name" column="name_name"/> - </join> - </subclass> - </subclass> - </class> - - <class name="One" table="one"> - <id name="key" column="one_key"> - <generator class="native" /> - </id> - <property name="x"/> - <property column="one_value" name="value"/> - </class> - - <class name="Many" table="many"> - <id name="key" column="many_key"> - <generator class="native" /> - </id> - <property name="x"/> - </class> - -</hibernate-mapping> - Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-07 10:40:59 UTC (rev 4260) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-07 15:04:34 UTC (rev 4261) @@ -42,6 +42,10 @@ <UseVSHostingProcess>false</UseVSHostingProcess> </PropertyGroup> <ItemGroup> + <Reference Include="Antlr3.Runtime, Version=3.1.0.39271, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\net\2.0\Antlr3.Runtime.dll</HintPath> + </Reference> <Reference Include="Iesi.Collections, Version=1.0.0.1, Culture=neutral, PublicKeyToken=154fdcb44c4484fc"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\lib\net\2.0\Iesi.Collections.dll</HintPath> @@ -1750,7 +1754,6 @@ <EmbeddedResource Include="HQL\Ast\Animal.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\BooleanLiteralEntity.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\EntityWithCrazyCompositeKey.hbm.xml" /> - <Content Include="HQL\Ast\FooBarCopy.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\KeyManyToOneEntity.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\Multi.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\SimpleEntityWithAssociation.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |