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