|
From: <fab...@us...> - 2009-02-08 13:37:29
|
Revision: 4072
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4072&view=rev
Author: fabiomaulo
Date: 2009-02-08 13:37:25 +0000 (Sun, 08 Feb 2009)
Log Message:
-----------
Reorganization of Tests about custom queries and StoredProcedure
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/
trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/
trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/
trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs
Removed Paths:
-------------
trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcs.hbm.xml
trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcsTest.cs
trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLTest.cs
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 13:37:25 UTC (rev 4072)
@@ -931,6 +931,8 @@
<Compile Include="ReflectionOptimizerTest\LcgFixture.cs" />
<Compile Include="SessionFactoryTest\Item.cs" />
<Compile Include="SessionFactoryTest\SessionFactorySerializationFixture.cs" />
+ <Compile Include="SqlTest\Custom\CustomSQLSupportTest.cs" />
+ <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" />
<Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" />
<Compile Include="Tools\hbm2ddl\SchemaUpdate\Version.cs" />
<Compile Include="SecondLevelCacheTest\AnotherItem.cs" />
@@ -950,15 +952,14 @@
<Compile Include="SqlCommandTest\TemplateFixture.cs" />
<Compile Include="SqlTest\Dimension.cs" />
<Compile Include="SqlTest\Employment.cs" />
- <Compile Include="SqlTest\FireBirdTest.cs" />
+ <Compile Include="SqlTest\Custom\Firebird\FireBirdTest.cs" />
<Compile Include="SqlTest\Query\NativeSQLQueriesFixture.cs" />
- <Compile Include="SqlTest\HandSQLTest.cs" />
- <Compile Include="SqlTest\IdentityInsertWithStoredProcsTest.cs" />
+ <Compile Include="SqlTest\Identity\IdentityInsertWithStoredProcsTest.cs" />
<Compile Include="SqlTest\Query\Item.cs" />
<Compile Include="SqlTest\MonetaryAmount.cs" />
<Compile Include="SqlTest\MonetaryAmountUserType.cs" />
- <Compile Include="SqlTest\MSSQLIdentityInsertWithStoredProcsTest.cs" />
- <Compile Include="SqlTest\MSSQLTest.cs" />
+ <Compile Include="SqlTest\Identity\MsSQL\MSSQLIdentityInsertWithStoredProcsTest.cs" />
+ <Compile Include="SqlTest\Custom\MsSQL\MSSQLTest.cs" />
<Compile Include="SqlTest\NullDateUserType.cs" />
<Compile Include="SqlTest\Order.cs" />
<Compile Include="SqlTest\Organization.cs" />
@@ -1252,7 +1253,7 @@
<EmbeddedResource Include="FilterTest\FilterMapping.hbm.xml" />
</ItemGroup>
<ItemGroup>
- <EmbeddedResource Include="SqlTest\MSSQLEmployment.hbm.xml" />
+ <EmbeddedResource Include="SqlTest\Custom\MsSQL\MSSQLEmployment.hbm.xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SqlTest\Query\NativeSQLQueries.hbm.xml" />
@@ -1301,7 +1302,7 @@
<EmbeddedResource Include="NHSpecificTest\NH606\Mapping.hbm.xml" />
</ItemGroup>
<ItemGroup>
- <EmbeddedResource Include="SqlTest\FireBirdEmployment.hbm.xml" />
+ <EmbeddedResource Include="SqlTest\Custom\Firebird\FireBirdEmployment.hbm.xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="NHSpecificTest\NH732\Mappings.hbm.xml" />
@@ -1725,7 +1726,7 @@
<EmbeddedResource Include="EntityModeTest\Xml\Basic\AB.hbm.xml" />
<EmbeddedResource Include="EntityModeTest\Xml\Basic\Account.hbm.xml" />
<EmbeddedResource Include="EntityModeTest\Xml\Basic\Employer.hbm.xml" />
- <EmbeddedResource Include="SqlTest\MSSQLIdentityInsertWithStoredProcs.hbm.xml" />
+ <EmbeddedResource Include="SqlTest\Identity\MsSQL\MSSQLIdentityInsertWithStoredProcs.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1508\Mappings.hbm.xml" />
<EmbeddedResource Include="GenericTest\OrderedSetGeneric\OrderedSetFixture.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1293\Mappings.hbm.xml" />
@@ -1770,7 +1771,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
- <Folder Include="SqlTest\Custom\" />
+ <Folder Include="SqlTest\Custom\Oracle\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,85 @@
+using System;
+using System.Collections;
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Custom
+{
+ public abstract class CustomSQLSupportTest: TestCase
+ {
+ protected override string MappingsAssembly
+ {
+ get { return "NHibernate.Test"; }
+ }
+
+ protected static object GetFirstItem(IEnumerable it)
+ {
+ IEnumerator en = it.GetEnumerator();
+ return en.MoveNext() ? en.Current : null;
+ }
+
+ [Test]
+ public void HandSQL()
+ {
+ ISession s = OpenSession();
+ ITransaction t = s.BeginTransaction();
+ Organization ifa = new Organization("IFA");
+ Organization jboss = new Organization("JBoss");
+ Person gavin = new Person("Gavin");
+ Employment emp = new Employment(gavin, jboss, "AU");
+ object orgId = s.Save(jboss);
+ s.Save(ifa);
+ s.Save(gavin);
+ s.Save(emp);
+ t.Commit();
+
+ t = s.BeginTransaction();
+ Person christian = new Person("Christian");
+ s.Save(christian);
+ Employment emp2 = new Employment(christian, jboss, "EU");
+ s.Save(emp2);
+ t.Commit();
+ s.Close();
+
+ sessions.Evict(typeof(Organization));
+ sessions.Evict(typeof(Person));
+ sessions.Evict(typeof(Employment));
+
+ s = OpenSession();
+ t = s.BeginTransaction();
+ jboss = (Organization)s.Get(typeof(Organization), orgId);
+ Assert.AreEqual(jboss.Employments.Count, 2);
+ emp = (Employment)GetFirstItem(jboss.Employments);
+ gavin = emp.Employee;
+ Assert.AreEqual(gavin.Name, "GAVIN");
+ Assert.AreEqual(s.GetCurrentLockMode(gavin), LockMode.Upgrade);
+ emp.EndDate = DateTime.Today;
+ Employment emp3 = new Employment(gavin, jboss, "US");
+ s.Save(emp3);
+ t.Commit();
+ s.Close();
+
+ s = OpenSession();
+ t = s.BeginTransaction();
+ IEnumerator iter = s.GetNamedQuery("allOrganizationsWithEmployees").List().GetEnumerator();
+ Assert.IsTrue(iter.MoveNext());
+ Organization o = (Organization)iter.Current;
+ Assert.AreEqual(o.Employments.Count, 3);
+
+ foreach (Employment e in o.Employments)
+ {
+ s.Delete(e);
+ }
+
+ foreach (Employment e in o.Employments)
+ {
+ s.Delete(e.Employee);
+ }
+ s.Delete(o);
+ Assert.IsFalse(iter.MoveNext());
+ s.Delete(ifa);
+ t.Commit();
+ s.Close();
+ }
+
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,73 @@
+using System;
+using System.Collections;
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Custom
+{
+ public abstract class CustomStoredProcSupportTest : CustomSQLSupportTest
+ {
+ [Test]
+ public void ScalarStoredProcedure()
+ {
+ ISession s = OpenSession();
+ IQuery namedQuery = s.GetNamedQuery("simpleScalar");
+ namedQuery.SetInt64("number", 43L);
+ IList list = namedQuery.List();
+ object[] o = (object[])list[0];
+ Assert.AreEqual(o[0], "getAll");
+ Assert.AreEqual(o[1], 43L);
+ s.Close();
+ }
+
+ [Test]
+ public void ParameterHandling()
+ {
+ ISession s = OpenSession();
+
+ IQuery namedQuery = s.GetNamedQuery("paramhandling");
+ namedQuery.SetInt64(0, 10L);
+ namedQuery.SetInt64(1, 20L);
+ IList list = namedQuery.List();
+ object[] o = (Object[])list[0];
+ Assert.AreEqual(o[0], 10L);
+ Assert.AreEqual(o[1], 20L);
+
+ namedQuery = s.GetNamedQuery("paramhandling_mixed");
+ namedQuery.SetInt64(0, 10L);
+ namedQuery.SetInt64("second", 20L);
+ list = namedQuery.List();
+ o = (object[])list[0];
+ Assert.AreEqual(o[0], 10L);
+ Assert.AreEqual(o[1], 20L);
+ s.Close();
+ }
+
+ [Test]
+ public void EntityStoredProcedure()
+ {
+ ISession s = OpenSession();
+ ITransaction t = s.BeginTransaction();
+
+ Organization ifa = new Organization("IFA");
+ Organization jboss = new Organization("JBoss");
+ Person gavin = new Person("Gavin");
+ Employment emp = new Employment(gavin, jboss, "AU");
+ s.Save(ifa);
+ s.Save(jboss);
+ s.Save(gavin);
+ s.Save(emp);
+
+ IQuery namedQuery = s.GetNamedQuery("selectAllEmployments");
+ IList list = namedQuery.List();
+ Assert.IsTrue(list[0] is Employment);
+ s.Delete(emp);
+ s.Delete(ifa);
+ s.Delete(jboss);
+ s.Delete(gavin);
+
+ t.Commit();
+ s.Close();
+ }
+
+ }
+}
\ No newline at end of file
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,235 @@
+<?xml version="1.0"?>
+<!--
+
+ This mapping demonstrates the use of Hibernate with
+ all-handwritten SQL!
+
+ This version is for Firebird
+-->
+<hibernate-mapping
+ xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.SqlTest"
+ default-access="field.camelcase">
+
+ <class name="Organization" table="ORGANIZATION">
+ <id name="Id" unsaved-value="0" column="ORGID">
+ <generator class="increment"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <set name="Employments"
+ inverse="true"
+ order-by="DUMMY">
+ <key column="EMPLOYER"/>
+ <!-- only needed for DDL generation -->
+ <one-to-many class="Employment"/>
+ <loader query-ref="organizationEmployments"/>
+ </set>
+ <!-- query-list name="currentEmployments"
+ query-ref="organizationCurrentEmployments"-->
+ <loader query-ref="organization"/>
+ <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert>
+ <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update>
+ <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete>
+ </class>
+
+ <class name="Person" table="PERSON">
+ <id name="Id" unsaved-value="0" column="PERID">
+ <generator class="increment"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <loader query-ref="person"/>
+ <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert>
+ <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update>
+ <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete>
+ </class>
+
+ <class name="Employment" table="EMPLOYMENT">
+ <id name="employmentId" unsaved-value="0" column="EMPID">
+ <generator class="increment"/>
+ </id>
+ <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/>
+ <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/>
+ <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/>
+ <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/>
+ <property name="RegionCode" column="REGIONCODE" update="false"/>
+ <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test">
+ <column name="AVALUE" sql-type="float"/>
+ <column name="CURRENCY"/>
+ </property>
+ <loader query-ref="employment"/>
+ <sql-insert>
+ INSERT INTO EMPLOYMENT
+ (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, AVALUE, CURRENCY, EMPID)
+ VALUES (?, ?, 'NOW', UPPER(?), ?, ?, ?)
+ </sql-insert>
+ <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, AVALUE=?, CURRENCY=? WHERE EMPID=?</sql-update>
+ <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete>
+ </class>
+
+ <resultset name="org-emp-regionCode">
+ <return-scalar column="regionCode" type="string"/>
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ </resultset>
+
+ <resultset name="org-emp-person">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ <return-join alias="pers" property="emp.Employee"/>
+ </resultset>
+
+ <sql-query name="person">
+ <return alias="p" class="Person" lock-mode="upgrade"/>
+ SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? FOR UPDATE
+ </sql-query>
+
+ <sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ SELECT {org.*}, {emp.*}
+ FROM ORGANIZATION org
+ LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
+ WHERE org.ORGID=?
+ </sql-query>
+
+
+ <!--sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION
+ WHERE ORGID=?
+ </sql-query-->
+
+ <sql-query name="allOrganizationsWithEmployees">
+ <!-- TODO H3: add flush-mode="never" -->
+ <return alias="org" class="Organization"/>
+ SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id}
+ FROM ORGANIZATION org
+ INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID
+ </sql-query>
+
+ <sql-query name="employment">
+ <return alias="emp" class="Employment"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}
+ FROM EMPLOYMENT
+ WHERE EMPID = ?
+ </sql-query>
+
+ <sql-query name="organizationEmployments">
+ <load-collection alias="empcol" role="Organization.Employments"/>
+ SELECT {empcol.*}
+ FROM EMPLOYMENT empcol
+ WHERE EMPLOYER = :id
+ ORDER BY STARTDATE ASC, EMPLOYEE ASC
+ </sql-query>
+
+
+ <sql-query name="organizationCurrentEmployments">
+ <return alias="emp" class="Employment">
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="AVALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. -->
+ <return-property name="EndDate" column="myEndDate"/>
+ </return>
+ <synchronize table="EMPLOYMENT"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, AVALUE, CURRENCY
+ FROM EMPLOYMENT
+ WHERE EMPLOYER = :id AND ENDDATE IS NULL
+ ORDER BY STARTDATE ASC
+ </sql-query>
+
+ <sql-query name="simpleScalar">
+ <return-scalar column="name" type="string"/>
+ <return-scalar column="value1" type="long"/>
+ SELECT * FROM simpleScalar(:number)
+ </sql-query>
+
+ <sql-query name="paramhandling">
+ <return-scalar column="value1" type="long"/>
+ <return-scalar column="value2" type="long"/>
+ SELECT * FROM paramHandling( ?, ?)
+ </sql-query>
+
+ <sql-query name="paramhandling_mixed">
+ <return-scalar column="value1" type="long" />
+ <return-scalar column="value2" type="long" />
+ SELECT * FROM paramHandling( ?, :second)
+ </sql-query>
+
+ <sql-query name="selectAllEmployments">
+ <return class="Employment">
+ <return-property name="Employee" column="EMPLOYEE"/>
+ <return-property name="Employer" column="EMPLOYER"/>
+ <return-property name="StartDate" column="STARTDATE"/>
+ <return-property name="EndDate" column="ENDDATE"/>
+ <return-property name="RegionCode" column="REGIONCODE"/>
+ <return-property name="id" column="EMPID"/>
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="AVALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ </return>
+ SELECT * FROM selectAllEmployments
+ </sql-query>
+
+ <database-object>
+ <create>
+CREATE PROCEDURE selectAllEmployments
+RETURNS(EMPLOYEE BIGINT, EMPLOYER BIGINT, STARTDATE TIMESTAMP, ENDDATE DATE,
+REGIONCODE VARCHAR(255) CHARACTER SET WIN1252, EMPID BIGINT, AVALUE FLOAT,
+CURRENCY VARCHAR(3) CHARACTER SET WIN1252)
+AS
+BEGIN
+FOR SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, REGIONCODE, EMPID, AVALUE, CURRENCY FROM EMPLOYMENT
+INTO :EMPLOYEE, :EMPLOYER, :STARTDATE, :ENDDATE, :REGIONCODE, :EMPID, :AVALUE, :CURRENCY DO
+SUSPEND;
+END;
+ </create>
+ <drop>
+ DROP PROCEDURE selectAllEmployments
+ </drop>
+ </database-object>
+
+ <database-object>
+ <create>
+CREATE PROCEDURE paramHandling(J INTEGER, I INTEGER)
+RETURNS(VALUE1 INTEGER, VALUE2 INTEGER)
+AS
+BEGIN
+VALUE1 = :J;
+VALUE2 = :I;
+SUSPEND;
+END;
+ </create>
+ <drop>
+ DROP PROCEDURE paramHandling
+ </drop>
+ </database-object>
+
+ <database-object>
+ <create>
+CREATE PROCEDURE simpleScalar(ANUMBER INTEGER)
+RETURNS(VALUE1 INTEGER, NAME VARCHAR(10) CHARACTER SET UNICODE_FSS)
+AS
+BEGIN
+VALUE1 = :ANUMBER;
+NAME = 'getAll';
+SUSPEND;
+END;
+ </create>
+ <drop>
+ DROP PROCEDURE simpleScalar
+ </drop>
+ </database-object>
+
+</hibernate-mapping>
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,20 @@
+using System.Collections;
+using NHibernate.Dialect;
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Custom.Firebird
+{
+ [TestFixture]
+ public class FireBirdTest : CustomStoredProcSupportTest
+ {
+ protected override IList Mappings
+ {
+ get { return new[] {"SqlTest.Custom.Firebird.FireBirdEmployment.hbm.xml"}; }
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is FirebirdDialect;
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,221 @@
+<?xml version="1.0"?>
+<!--
+
+ This mapping demonstrates the use of Hibernate with
+ all-handwritten SQL!
+
+ This version is for Sybase/mssql
+-->
+<hibernate-mapping
+ xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.SqlTest"
+ default-access="field.camelcase">
+
+ <class name="Organization" table="ORGANIZATION">
+ <id name="Id" unsaved-value="0" column="ORGID">
+ <generator class="increment"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <set name="Employments"
+ inverse="true"
+ order-by="DUMMY">
+ <key column="EMPLOYER"/>
+ <!-- only needed for DDL generation -->
+ <one-to-many class="Employment"/>
+ <loader query-ref="organizationEmployments"/>
+ </set>
+ <!-- query-list name="currentEmployments"
+ query-ref="organizationCurrentEmployments"-->
+ <loader query-ref="organization"/>
+ <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert>
+ <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update>
+ <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete>
+ </class>
+
+ <class name="Person" table="PERSON">
+ <id name="Id" unsaved-value="0" column="PERID">
+ <generator class="increment"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <loader query-ref="person"/>
+ <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert>
+ <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update>
+ <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete>
+ </class>
+
+ <class name="Employment" table="EMPLOYMENT">
+ <id name="employmentId" unsaved-value="0" column="EMPID">
+ <generator class="increment"/>
+ </id>
+ <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/>
+ <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/>
+ <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/>
+ <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/>
+ <property name="RegionCode" column="REGIONCODE" update="false"/>
+ <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test">
+ <column name="VALUE" sql-type="float"/>
+ <column name="CURRENCY"/>
+ </property>
+ <loader query-ref="employment"/>
+ <sql-insert>
+ INSERT INTO EMPLOYMENT
+ (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID)
+ VALUES (?, ?, getdate(), UPPER(?), ?, ?, ?)
+ </sql-insert>
+ <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update>
+ <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete>
+ </class>
+
+ <resultset name="org-emp-regionCode">
+ <return-scalar column="regionCode" type="string"/>
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ </resultset>
+
+ <resultset name="org-emp-person">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ <return-join alias="pers" property="emp.Employee"/>
+ </resultset>
+
+ <sql-query name="person">
+ <return alias="p" class="Person" lock-mode="upgrade"/>
+ SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/
+ </sql-query>
+
+ <sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ SELECT {org.*}, {emp.*}
+ FROM ORGANIZATION org
+ LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
+ WHERE org.ORGID=?
+ </sql-query>
+
+
+ <!--sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION
+ WHERE ORGID=?
+ </sql-query-->
+
+ <sql-query name="allOrganizationsWithEmployees">
+ <!-- TODO H3: add flush-mode="never" -->
+ <return alias="org" class="Organization"/>
+ SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id}
+ FROM ORGANIZATION org
+ INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID
+ </sql-query>
+
+
+
+
+
+ <sql-query name="employment">
+ <return alias="emp" class="Employment"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId}
+ FROM EMPLOYMENT
+ WHERE EMPID = ?
+ </sql-query>
+
+ <sql-query name="organizationEmployments">
+ <load-collection alias="empcol" role="Organization.Employments"/>
+ SELECT {empcol.*}
+ FROM EMPLOYMENT empcol
+ WHERE EMPLOYER = :id
+ ORDER BY STARTDATE ASC, EMPLOYEE ASC
+ </sql-query>
+
+
+ <sql-query name="organizationCurrentEmployments">
+ <return alias="emp" class="Employment">
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="VALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. -->
+ <return-property name="EndDate" column="myEndDate"/>
+ </return>
+ <synchronize table="EMPLOYMENT"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId}, VALUE, CURRENCY
+ FROM EMPLOYMENT
+ WHERE EMPLOYER = :id AND ENDDATE IS NULL
+ ORDER BY STARTDATE ASC
+ </sql-query>
+
+ <sql-query name="simpleScalar">
+ <return-scalar column="name" type="string"/>
+ <return-scalar column="value" type="long"/>
+ exec simpleScalar :number
+ </sql-query>
+
+ <sql-query name="paramhandling">
+ <return-scalar column="value" type="long"/>
+ <return-scalar column="value2" type="long"/>
+ exec paramHandling ?, ?
+ </sql-query>
+
+ <sql-query name="paramhandling_mixed">
+ <return-scalar column="value" type="long" />
+ <return-scalar column="value2" type="long" />
+ exec paramHandling ?, :second
+ </sql-query>
+
+ <sql-query name="selectAllEmployments">
+ <return class="Employment">
+ <return-property name="Employee" column="EMPLOYEE"/>
+ <return-property name="Employer" column="EMPLOYER"/>
+ <return-property name="StartDate" column="STARTDATE"/>
+ <return-property name="EndDate" column="ENDDATE"/>
+ <return-property name="RegionCode" column="REGIONCODE"/>
+ <return-property name="id" column="EMPID"/>
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="VALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ </return>
+ exec selectAllEmployments
+ </sql-query>
+
+ <database-object>
+ <create>
+ CREATE PROCEDURE selectAllEmployments AS
+ SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE,
+ REGIONCODE, EMPID, VALUE, CURRENCY
+ FROM EMPLOYMENT
+ </create>
+ <drop>
+ DROP PROCEDURE selectAllEmployments
+ </drop>
+ </database-object>
+
+ <database-object>
+ <create>
+ CREATE PROCEDURE paramHandling @j int, @i int AS
+ SELECT @j as value, @i as value2
+ </create>
+ <drop>
+ DROP PROCEDURE paramHandling
+ </drop>
+ </database-object>
+
+ <database-object>
+ <create>
+ CREATE PROCEDURE simpleScalar @number int AS
+ SELECT @number as value, 'getAll' as name
+ </create>
+ <drop>
+ DROP PROCEDURE simpleScalar
+ </drop>
+ </database-object>
+
+</hibernate-mapping>
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLTest.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,20 @@
+using System.Collections;
+using NHibernate.Dialect;
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Custom.MsSQL
+{
+ [TestFixture]
+ public class MSSQLTest : CustomStoredProcSupportTest
+ {
+ protected override IList Mappings
+ {
+ get { return new[] { "SqlTest.Custom.MsSQL.MSSQLEmployment.hbm.xml" }; }
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is MsSql2000Dialect;
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs
___________________________________________________________________
Added: svn:mergeinfo
+
Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072)
@@ -1,235 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- This mapping demonstrates the use of Hibernate with
- all-handwritten SQL!
-
- This version is for Firebird
--->
-<hibernate-mapping
- xmlns="urn:nhibernate-mapping-2.2"
- assembly="NHibernate.Test"
- namespace="NHibernate.Test.SqlTest"
- default-access="field.camelcase">
-
- <class name="Organization" table="ORGANIZATION">
- <id name="Id" unsaved-value="0" column="ORGID">
- <generator class="increment"/>
- </id>
- <property name="Name" not-null="true" column="NAME"/>
- <set name="Employments"
- inverse="true"
- order-by="DUMMY">
- <key column="EMPLOYER"/>
- <!-- only needed for DDL generation -->
- <one-to-many class="Employment"/>
- <loader query-ref="organizationEmployments"/>
- </set>
- <!-- query-list name="currentEmployments"
- query-ref="organizationCurrentEmployments"-->
- <loader query-ref="organization"/>
- <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert>
- <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update>
- <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete>
- </class>
-
- <class name="Person" table="PERSON">
- <id name="Id" unsaved-value="0" column="PERID">
- <generator class="increment"/>
- </id>
- <property name="Name" not-null="true" column="NAME"/>
- <loader query-ref="person"/>
- <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert>
- <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update>
- <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete>
- </class>
-
- <class name="Employment" table="EMPLOYMENT">
- <id name="employmentId" unsaved-value="0" column="EMPID">
- <generator class="increment"/>
- </id>
- <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/>
- <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/>
- <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/>
- <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/>
- <property name="RegionCode" column="REGIONCODE" update="false"/>
- <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test">
- <column name="AVALUE" sql-type="float"/>
- <column name="CURRENCY"/>
- </property>
- <loader query-ref="employment"/>
- <sql-insert>
- INSERT INTO EMPLOYMENT
- (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, AVALUE, CURRENCY, EMPID)
- VALUES (?, ?, 'NOW', UPPER(?), ?, ?, ?)
- </sql-insert>
- <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, AVALUE=?, CURRENCY=? WHERE EMPID=?</sql-update>
- <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete>
- </class>
-
- <resultset name="org-emp-regionCode">
- <return-scalar column="regionCode" type="string"/>
- <return alias="org" class="Organization"/>
- <return-join alias="emp" property="org.Employments"/>
- </resultset>
-
- <resultset name="org-emp-person">
- <return alias="org" class="Organization"/>
- <return-join alias="emp" property="org.Employments"/>
- <return-join alias="pers" property="emp.Employee"/>
- </resultset>
-
- <sql-query name="person">
- <return alias="p" class="Person" lock-mode="upgrade"/>
- SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? FOR UPDATE
- </sql-query>
-
- <sql-query name="organization">
- <return alias="org" class="Organization"/>
- <return-join alias="emp" property="org.Employments"/>
- SELECT {org.*}, {emp.*}
- FROM ORGANIZATION org
- LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
- WHERE org.ORGID=?
- </sql-query>
-
-
- <!--sql-query name="organization">
- <return alias="org" class="Organization"/>
- SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION
- WHERE ORGID=?
- </sql-query-->
-
- <sql-query name="allOrganizationsWithEmployees">
- <!-- TODO H3: add flush-mode="never" -->
- <return alias="org" class="Organization"/>
- SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id}
- FROM ORGANIZATION org
- INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID
- </sql-query>
-
- <sql-query name="employment">
- <return alias="emp" class="Employment"/>
- SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
- STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
- REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}
- FROM EMPLOYMENT
- WHERE EMPID = ?
- </sql-query>
-
- <sql-query name="organizationEmployments">
- <load-collection alias="empcol" role="Organization.Employments"/>
- SELECT {empcol.*}
- FROM EMPLOYMENT empcol
- WHERE EMPLOYER = :id
- ORDER BY STARTDATE ASC, EMPLOYEE ASC
- </sql-query>
-
-
- <sql-query name="organizationCurrentEmployments">
- <return alias="emp" class="Employment">
- <return-property name="Salary">
- <!-- as multi column properties are not supported via the
- {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
- <return-column name="AVALUE"/>
- <return-column name="CURRENCY"/>
- </return-property>
- <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. -->
- <return-property name="EndDate" column="myEndDate"/>
- </return>
- <synchronize table="EMPLOYMENT"/>
- SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
- STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
- REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, AVALUE, CURRENCY
- FROM EMPLOYMENT
- WHERE EMPLOYER = :id AND ENDDATE IS NULL
- ORDER BY STARTDATE ASC
- </sql-query>
-
- <sql-query name="simpleScalar">
- <return-scalar column="name" type="string"/>
- <return-scalar column="value1" type="long"/>
- SELECT * FROM simpleScalar(:number)
- </sql-query>
-
- <sql-query name="paramhandling">
- <return-scalar column="value1" type="long"/>
- <return-scalar column="value2" type="long"/>
- SELECT * FROM paramHandling( ?, ?)
- </sql-query>
-
- <sql-query name="paramhandling_mixed">
- <return-scalar column="value1" type="long" />
- <return-scalar column="value2" type="long" />
- SELECT * FROM paramHandling( ?, :second)
- </sql-query>
-
- <sql-query name="selectAllEmployments">
- <return class="Employment">
- <return-property name="Employee" column="EMPLOYEE"/>
- <return-property name="Employer" column="EMPLOYER"/>
- <return-property name="StartDate" column="STARTDATE"/>
- <return-property name="EndDate" column="ENDDATE"/>
- <return-property name="RegionCode" column="REGIONCODE"/>
- <return-property name="id" column="EMPID"/>
- <return-property name="Salary">
- <!-- as multi column properties are not supported via the
- {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
- <return-column name="AVALUE"/>
- <return-column name="CURRENCY"/>
- </return-property>
- </return>
- SELECT * FROM selectAllEmployments
- </sql-query>
-
- <database-object>
- <create>
-CREATE PROCEDURE selectAllEmployments
-RETURNS(EMPLOYEE BIGINT, EMPLOYER BIGINT, STARTDATE TIMESTAMP, ENDDATE DATE,
-REGIONCODE VARCHAR(255) CHARACTER SET WIN1252, EMPID BIGINT, AVALUE FLOAT,
-CURRENCY VARCHAR(3) CHARACTER SET WIN1252)
-AS
-BEGIN
-FOR SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, REGIONCODE, EMPID, AVALUE, CURRENCY FROM EMPLOYMENT
-INTO :EMPLOYEE, :EMPLOYER, :STARTDATE, :ENDDATE, :REGIONCODE, :EMPID, :AVALUE, :CURRENCY DO
-SUSPEND;
-END;
- </create>
- <drop>
- DROP PROCEDURE selectAllEmployments
- </drop>
- </database-object>
-
- <database-object>
- <create>
-CREATE PROCEDURE paramHandling(J INTEGER, I INTEGER)
-RETURNS(VALUE1 INTEGER, VALUE2 INTEGER)
-AS
-BEGIN
-VALUE1 = :J;
-VALUE2 = :I;
-SUSPEND;
-END;
- </create>
- <drop>
- DROP PROCEDURE paramHandling
- </drop>
- </database-object>
-
- <database-object>
- <create>
-CREATE PROCEDURE simpleScalar(ANUMBER INTEGER)
-RETURNS(VALUE1 INTEGER, NAME VARCHAR(10) CHARACTER SET UNICODE_FSS)
-AS
-BEGIN
-VALUE1 = :ANUMBER;
-NAME = 'getAll';
-SUSPEND;
-END;
- </create>
- <drop>
- DROP PROCEDURE simpleScalar
- </drop>
- </database-object>
-
-</hibernate-mapping>
Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -1,21 +0,0 @@
-using System;
-using System.Collections;
-using NHibernate.Dialect;
-using NUnit.Framework;
-
-namespace NHibernate.Test.SqlTest
-{
- [TestFixture]
- public class FireBirdTest : HandSQLTest
- {
- protected override IList Mappings
- {
- get { return new string[] {"SqlTest.FireBirdEmployment.hbm.xml"}; }
- }
-
- protected override System.Type GetDialect()
- {
- return typeof(FirebirdDialect);
- }
- }
-}
\ No newline at end of file
Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -1,162 +0,0 @@
-using System;
-using System.Collections;
-using NHibernate.Cfg;
-using NUnit.Framework;
-
-namespace NHibernate.Test.SqlTest
-{
- public abstract class HandSQLTest : TestCase
- {
- private static object GetFirstItem(IEnumerable it)
- {
- IEnumerator en = it.GetEnumerator();
- return en.MoveNext() ? en.Current : null;
- }
-
- protected override string MappingsAssembly
- {
- get { return "NHibernate.Test"; }
- }
-
- protected abstract System.Type GetDialect();
-
- private void CheckDialect()
- {
- if (!GetDialect().IsInstanceOfType(Dialect))
- Assert.Ignore("This test is specific for " + GetDialect());
- }
-
- protected override void Configure(Configuration cfg)
- {
- CheckDialect();
- base.Configure(cfg);
- }
-
- [Test]
- public void HandSQL()
- {
- ISession s = OpenSession();
- ITransaction t = s.BeginTransaction();
- Organization ifa = new Organization("IFA");
- Organization jboss = new Organization("JBoss");
- Person gavin = new Person("Gavin");
- Employment emp = new Employment(gavin, jboss, "AU");
- object orgId = s.Save(jboss);
- s.Save(ifa);
- s.Save(gavin);
- s.Save(emp);
- t.Commit();
-
- t = s.BeginTransaction();
- Person christian = new Person("Christian");
- s.Save(christian);
- Employment emp2 = new Employment(christian, jboss, "EU");
- s.Save(emp2);
- t.Commit();
- s.Close();
-
- sessions.Evict(typeof(Organization));
- sessions.Evict(typeof(Person));
- sessions.Evict(typeof(Employment));
-
- s = OpenSession();
- t = s.BeginTransaction();
- jboss = (Organization) s.Get(typeof(Organization), orgId);
- Assert.AreEqual(jboss.Employments.Count, 2);
- emp = (Employment) GetFirstItem(jboss.Employments);
- gavin = emp.Employee;
- Assert.AreEqual(gavin.Name, "GAVIN");
- Assert.AreEqual(s.GetCurrentLockMode(gavin), LockMode.Upgrade);
- emp.EndDate = DateTime.Today;
- Employment emp3 = new Employment(gavin, jboss, "US");
- s.Save(emp3);
- t.Commit();
- s.Close();
-
- s = OpenSession();
- t = s.BeginTransaction();
- IEnumerator iter = s.GetNamedQuery("allOrganizationsWithEmployees").List().GetEnumerator();
- Assert.IsTrue(iter.MoveNext());
- Organization o = (Organization) iter.Current;
- Assert.AreEqual(o.Employments.Count, 3);
-
- foreach (Employment e in o.Employments)
- {
- s.Delete(e);
- }
-
- foreach (Employment e in o.Employments)
- {
- s.Delete(e.Employee);
- }
- s.Delete(o);
- Assert.IsFalse(iter.MoveNext());
- s.Delete(ifa);
- t.Commit();
- s.Close();
- }
-
- [Test]
- public void ScalarStoredProcedure()
- {
- ISession s = OpenSession();
- IQuery namedQuery = s.GetNamedQuery("simpleScalar");
- namedQuery.SetInt64("number", 43L);
- IList list = namedQuery.List();
- object[] o = (object[]) list[0];
- Assert.AreEqual(o[0], "getAll");
- Assert.AreEqual(o[1], 43L);
- s.Close();
- }
-
- [Test]
- public void ParameterHandling()
- {
- ISession s = OpenSession();
-
- IQuery namedQuery = s.GetNamedQuery("paramhandling");
- namedQuery.SetInt64(0, 10L);
- namedQuery.SetInt64(1, 20L);
- IList list = namedQuery.List();
- object[] o = (Object[]) list[0];
- Assert.AreEqual(o[0], 10L);
- Assert.AreEqual(o[1], 20L);
-
- namedQuery = s.GetNamedQuery("paramhandling_mixed");
- namedQuery.SetInt64(0, 10L);
- namedQuery.SetInt64("second", 20L);
- list = namedQuery.List();
- o = (object[]) list[0];
- Assert.AreEqual(o[0], 10L);
- Assert.AreEqual(o[1], 20L);
- s.Close();
- }
-
- [Test]
- public void EntityStoredProcedure()
- {
- ISession s = OpenSession();
- ITransaction t = s.BeginTransaction();
-
- Organization ifa = new Organization("IFA");
- Organization jboss = new Organization("JBoss");
- Person gavin = new Person("Gavin");
- Employment emp = new Employment(gavin, jboss, "AU");
- s.Save(ifa);
- s.Save(jboss);
- s.Save(gavin);
- s.Save(emp);
-
- IQuery namedQuery = s.GetNamedQuery("selectAllEmployments");
- IList list = namedQuery.List();
- Assert.IsTrue(list[0] is Employment);
- s.Delete(emp);
- s.Delete(ifa);
- s.Delete(jboss);
- s.Delete(gavin);
-
- t.Commit();
- s.Close();
- }
- }
-}
\ No newline at end of file
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,67 @@
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Identity
+{
+ public abstract class IdentityInsertWithStoredProcsTest : TestCase
+ {
+ protected override string MappingsAssembly
+ {
+ get { return "NHibernate.Test"; }
+ }
+
+ protected abstract string GetExpectedInsertOrgLogStatement(string orgName);
+
+ /// <summary>
+ /// Organization should be mappend with "identity" id strategy AND custom sql-insert (a stored proc).
+ /// The insert stored proc will return the new primary key and NH should recognize it and apply it
+ /// just like a normal insert.
+ /// </summary>
+ [Test]
+ public void InsertUsesStoredProc()
+ {
+ using (var spy = new SqlLogSpy())
+ {
+ Organization ifa;
+ using (ISession s = OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ ifa = new Organization("IFA");
+ s.Save(ifa);
+ t.Commit();
+ }
+
+ Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
+ Assert.AreEqual(1, ifa.Id, "ifa.Id");
+ Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 1");
+ using (ISession s = OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete(ifa);
+ t.Commit();
+ }
+ }
+
+ using (var spy = new SqlLogSpy())
+ {
+ Organization efa;
+ using (ISession s = OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ efa = new Organization("EFA");
+ s.Save(efa);
+ t.Commit();
+ }
+
+ Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
+ Assert.AreEqual(2, efa.Id, "efa.Id");
+ Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 2");
+ using (ISession s = OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete(efa);
+ t.Commit();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcs.hbm.xml)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,201 @@
+<?xml version="1.0"?>
+<!--
+
+ This mapping demonstrates the use of Hibernate with
+ all-handwritten SQL!
+
+ This version is for Sybase/mssql
+-->
+<hibernate-mapping
+ xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.SqlTest"
+ default-access="field.camelcase">
+
+ <class name="Organization" table="ORGANIZATION">
+ <id name="Id" unsaved-value="0" column="ORGID">
+ <generator class="identity"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <set name="Employments"
+ inverse="true"
+ order-by="DUMMY">
+ <key column="EMPLOYER"/>
+ <!-- only needed for DDL generation -->
+ <one-to-many class="Employment"/>
+ <loader query-ref="organizationEmployments"/>
+ </set>
+ <!-- query-list name="currentEmployments"
+ query-ref="organizationCurrentEmployments"-->
+ <loader query-ref="organization"/>
+ <sql-insert>exec nh_organization_native_id_insert ?</sql-insert>
+ <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update>
+ <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete>
+ </class>
+
+ <class name="Person" table="PERSON">
+ <id name="Id" unsaved-value="0" column="PERID">
+ <generator class="increment"/>
+ </id>
+ <property name="Name" not-null="true" column="NAME"/>
+ <loader query-ref="person"/>
+ <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert>
+ <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update>
+ <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete>
+ </class>
+
+ <class name="Employment" table="EMPLOYMENT">
+ <id name="employmentId" unsaved-value="0" column="EMPID">
+ <generator class="increment"/>
+ </id>
+ <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/>
+ <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/>
+ <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/>
+ <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/>
+ <property name="RegionCode" column="REGIONCODE" update="false"/>
+ <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test">
+ <column name="VALUE" sql-type="float"/>
+ <column name="CURRENCY"/>
+ </property>
+ <loader query-ref="employment"/>
+ <sql-insert>
+ INSERT INTO EMPLOYMENT
+ (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID)
+ VALUES (?, ?, getdate(), UPPER(?), ?, ?, ?)
+ </sql-insert>
+ <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update>
+ <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete>
+ </class>
+
+ <resultset name="org-emp-regionCode">
+ <return-scalar column="regionCode" type="string"/>
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ </resultset>
+
+ <resultset name="org-emp-person">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ <return-join alias="pers" property="emp.Employee"/>
+ </resultset>
+
+ <sql-query name="person">
+ <return alias="p" class="Person" lock-mode="upgrade"/>
+ SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/
+ </sql-query>
+
+ <sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ <return-join alias="emp" property="org.Employments"/>
+ SELECT {org.*}, {emp.*}
+ FROM ORGANIZATION org
+ LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
+ WHERE org.ORGID=?
+ </sql-query>
+
+
+ <!--sql-query name="organization">
+ <return alias="org" class="Organization"/>
+ SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION
+ WHERE ORGID=?
+ </sql-query-->
+
+ <sql-query name="allOrganizationsWithEmployees" flush-mode="never">
+ <return alias="org" class="Organization"/>
+ SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id}
+ FROM ORGANIZATION org
+ INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID
+ </sql-query>
+
+ <sql-query name="employment">
+ <return alias="emp" class="Employment"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}
+ FROM EMPLOYMENT
+ WHERE EMPID = ?
+ </sql-query>
+
+ <sql-query name="organizationEmployments">
+ <load-collection alias="empcol" role="Organization.Employments"/>
+ SELECT {empcol.*}
+ FROM EMPLOYMENT empcol
+ WHERE EMPLOYER = :id
+ ORDER BY STARTDATE ASC, EMPLOYEE ASC
+ </sql-query>
+
+
+ <sql-query name="organizationCurrentEmployments">
+ <return alias="emp" class="Employment">
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="VALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. -->
+ <return-property name="EndDate" column="myEndDate"/>
+ </return>
+ <synchronize table="EMPLOYMENT"/>
+ SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer},
+ STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate},
+ REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, VALUE, CURRENCY
+ FROM EMPLOYMENT
+ WHERE EMPLOYER = :id AND ENDDATE IS NULL
+ ORDER BY STARTDATE ASC
+ </sql-query>
+
+ <sql-query name="simpleScalar">
+ <return-scalar column="name" type="string"/>
+ <return-scalar column="value" type="long"/>
+ exec simpleScalar :number
+ </sql-query>
+
+ <sql-query name="paramhandling">
+ <return-scalar column="value" type="long"/>
+ <return-scalar column="value2" type="long"/>
+ exec paramHandling ?, ?
+ </sql-query>
+
+ <sql-query name="paramhandling_mixed">
+ <return-scalar column="value" type="long" />
+ <return-scalar column="value2" type="long" />
+ exec paramHandling ?, :second
+ </sql-query>
+
+ <sql-query name="selectAllEmployments">
+ <return class="Employment">
+ <return-property name="Employee" column="EMPLOYEE"/>
+ <return-property name="Employer" column="EMPLOYER"/>
+ <return-property name="StartDate" column="STARTDATE"/>
+ <return-property name="EndDate" column="ENDDATE"/>
+ <return-property name="RegionCode" column="REGIONCODE"/>
+ <return-property name="id" column="EMPID"/>
+ <return-property name="Salary">
+ <!-- as multi column properties are not supported via the
+ {}-syntax, we need to provide an explicit column list for salary via <return-property> -->
+ <return-column name="VALUE"/>
+ <return-column name="CURRENCY"/>
+ </return-property>
+ </return>
+ exec selectAllEmployments
+ </sql-query>
+
+ <database-object>
+ <create>
+ CREATE PROCEDURE nh_organization_native_id_insert
+ (
+ @NAME as varchar
+ )
+ AS
+ BEGIN
+ INSERT INTO organization(NAME) VALUES(@NAME)
+ SELECT SCOPE_IDENTITY()
+ END
+ </create>
+ <drop>
+ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'dbo.nh_organization_native_id_insert') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
+ DROP PROCEDURE dbo.nh_organization_native_id_insert
+ </drop>
+ </database-object>
+</hibernate-mapping>
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcsTest.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -0,0 +1,25 @@
+using System.Collections;
+using NHibernate.Dialect;
+using NUnit.Framework;
+
+namespace NHibernate.Test.SqlTest.Identity.MsSQL
+{
+ [TestFixture]
+ public class MSSQLIdentityInsertWithStoredProcsTest : IdentityInsertWithStoredProcsTest
+ {
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is MsSql2000Dialect;
+ }
+
+ protected override string GetExpectedInsertOrgLogStatement(string orgName)
+ {
+ return string.Format("exec nh_organization_native_id_insert @p0; @p0 = '{0}'", orgName);
+ }
+
+ protected override IList Mappings
+ {
+ get { return new[] { "SqlTest.Identity.MsSQL.MSSQLIdentityInsertWithStoredProcs.hbm.xml" }; }
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs
___________________________________________________________________
Added: svn:mergeinfo
+
Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072)
@@ -1,68 +0,0 @@
-using NUnit.Framework;
-
-namespace NHibernate.Test.SqlTest
-{
- // http://jira.nhibernate.org/browse/NH-727
- public abstract class IdentityInsertWithStoredProcsTest : TestCase
- {
- protected override string MappingsAssembly
- {
- get { return "NHibernate.Test"; }
- }
-
- protected abstract string GetExpectedInsertOrgLogStatement(string orgName);
-
- /// <summary>
- /// Organization should be mappend with "identity" id strategy AND custom sql-insert (a stored proc).
- /// The insert stored proc will return the new primary key and NH should recognize it and apply it
- /// just like a normal insert.
- /// </summary>
- [Test]
- public void InsertUsesStoredProc()
- {
- using (var spy = new SqlLogSpy())
- {
- Organization ifa;
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
- {
- ifa = new Organization("IFA");
- s.Save(ifa);
- t.Commit();
- }
-
- Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
- Assert.AreEqual(1, ifa.Id, "ifa.Id");
- Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 1");
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
- {
- s.Delete(ifa);
- t.Commit();
- }
- }
-
- using (var spy = new SqlLogSpy())
- {
- Organization efa;
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
- {
- efa = new Organization("EFA");
- s.Save(efa);
- t.Commit();
- }
-
- Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
- Assert.AreEqual(2, efa.Id, "efa.Id");
- Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 2");
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
- {
- s.Delete(efa);
- t.Commit();
- }
- }
- }
- }
-}
\ No newline at end of file
Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071)
+++ trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072)
@@ -1,221 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- This mapping demonstrates the use of Hibernate with
- all-handwritten SQL!
-
- This version is for Sybase/mssql
--->
-<hibernate-mapping
- xmlns="urn:nhibernate-mapping-2.2"
- assembly="NHibernate.Test"
- namespace="NHibernate.Test.SqlTest"
- default-access="field.camelcase">
-
- <class name="Organization" table="ORGANIZATION">
- <id name="Id" unsaved-value="0" column="ORGID">
- <generator class="increment"/>
- </id>
- <property name="Name" not-null="true" column="NAME"/>
- <set name="Employments"
- inverse="true"
- order-by="DUMMY">
- <key column="EMPLOYER"/>
- <!-- only needed for DDL generation -->
- <one-to-many class="Employment"/>
- <loader query-ref="organizationEmployments"/>
- </set>
- <!-- query-list name="currentEmployments"
- query-ref="organizationCurrentEmployments"-->
- <loader query-ref="organization"/>
- <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert>
- <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-upd...
[truncated message content] |