Skip to content

Commit a1e25b0

Browse files
author
Sergey Koshcheyev
committed
Ported the rest of custom SQL support
SVN: trunk@2242
1 parent 72ab849 commit a1e25b0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2863
-612
lines changed

src/NHibernate.Test/NHibernate.Test-2.0.csproj

+9
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,20 @@
329329
<Compile Include="SqlCommandTest\SqlStringParameterFixture.cs" />
330330
<Compile Include="SqlCommandTest\SqlUpdateBuilderFixture.cs" />
331331
<Compile Include="SqlCommandTest\TemplateFixture.cs" />
332+
<Compile Include="SqlTest\Dimension.cs" />
332333
<Compile Include="SqlTest\Employment.cs" />
334+
<Compile Include="SqlTest\GeneralTest.cs" />
333335
<Compile Include="SqlTest\HandSQLTest.cs" />
334336
<Compile Include="SqlTest\MonetaryAmount.cs" />
335337
<Compile Include="SqlTest\MonetaryAmountUserType.cs" />
336338
<Compile Include="SqlTest\MSSQLTest.cs" />
337339
<Compile Include="SqlTest\NullDateUserType.cs" />
340+
<Compile Include="SqlTest\Order.cs" />
338341
<Compile Include="SqlTest\Organization.cs" />
339342
<Compile Include="SqlTest\Person.cs" />
343+
<Compile Include="SqlTest\Product.cs" />
344+
<Compile Include="SqlTest\SpaceShip.cs" />
345+
<Compile Include="SqlTest\Speech.cs" />
340346
<Compile Include="Subclass\SubclassAssert.cs" />
341347
<Compile Include="Subclass\SubclassBase.cs" />
342348
<Compile Include="Subclass\SubclassExtendsFixture.cs" />
@@ -554,6 +560,9 @@
554560
<ItemGroup>
555561
<EmbeddedResource Include="SqlTest\MSSQLEmployment.hbm.xml" />
556562
</ItemGroup>
563+
<ItemGroup>
564+
<EmbeddedResource Include="SqlTest\General.hbm.xml" />
565+
</ItemGroup>
557566
<ItemGroup>
558567
<Folder Include="Properties\" />
559568
</ItemGroup>
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
3+
namespace NHibernate.Test.SqlTest
4+
{
5+
public class Dimension
6+
{
7+
private long id;
8+
private int length;
9+
private int width;
10+
11+
public Dimension()
12+
{
13+
}
14+
15+
public Dimension(int length, int width)
16+
{
17+
this.length = length;
18+
this.width = width;
19+
}
20+
21+
public virtual long Id
22+
{
23+
get { return id; }
24+
set { id = value; }
25+
}
26+
27+
public virtual int Length
28+
{
29+
get { return length; }
30+
set { length = value; }
31+
}
32+
33+
public virtual int Width
34+
{
35+
get { return width; }
36+
set { width = value; }
37+
}
38+
}
39+
}
+263
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<!--
3+
4+
This mapping demonstrates the use of Hibernate with
5+
all-handwritten SQL!
6+
7+
This version is for Sybase/mssql
8+
-->
9+
10+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-access="field.camelcase"
11+
namespace="NHibernate.Test.SqlTest"
12+
assembly="NHibernate.Test">
13+
14+
<class name="Organization" table="ORGANIZATION">
15+
<id name="id" unsaved-value="0" column="ORGID">
16+
<generator class="increment"/>
17+
</id>
18+
<property name="name" column="NAME" not-null="true"/>
19+
<set lazy="true" name="employments"
20+
inverse="true">
21+
<key column="EMPLOYER"/>
22+
<!-- only needed for DDL generation -->
23+
<one-to-many class="Employment"/>
24+
</set>
25+
</class>
26+
27+
<class name="Person" table="PERSON">
28+
<id name="id" unsaved-value="0" column="PERID">
29+
<generator class="increment"/>
30+
</id>
31+
<property name="name" column="NAME" not-null="true"/>
32+
33+
</class>
34+
35+
<class name="Employment" table="EMPLOYMENT">
36+
<id name="employmentId" unsaved-value="0" column="EMPID">
37+
<generator class="increment"/>
38+
</id>
39+
<many-to-one name="employee" column="EMPLOYEE" not-null="true" update="false"/>
40+
<many-to-one name="employer" column="EMPLOYER" not-null="true" update="false"/>
41+
<property name="startDate" column="STARTDATE" not-null="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" />
42+
<property name="endDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" />
43+
<property name="regionCode" column="REGIONCODE" update="false"/>
44+
<property name="salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test">
45+
<column name="VALUE" sql-type="float"/>
46+
<column name="CURRENCY"/>
47+
</property>
48+
</class>
49+
50+
<class name="Order" table="TBL_ORDER">
51+
<composite-id name="orderId" class="Order+OrderIdType">
52+
<key-property name="orgid"/>
53+
<key-property name="ordernumber"/>
54+
</composite-id>
55+
56+
<many-to-one name="product">
57+
<column name="PROD_ORGID"/>
58+
<column name="PROD_NO"/>
59+
</many-to-one>
60+
<many-to-one name="person"/>
61+
</class>
62+
63+
<class name="Product">
64+
<composite-id name="productId" class="Product+ProductIdType">
65+
<key-property name="orgid"/>
66+
<key-property name="productnumber"/>
67+
</composite-id>
68+
69+
<property name="name"/>
70+
71+
<set name="orders" inverse="true">
72+
<key>
73+
<column name="PROD_ORGID"/>
74+
<column name="PROD_NO"/>
75+
</key>
76+
<one-to-many class="Order"/>
77+
</set>
78+
</class>
79+
80+
<class name="Dimension">
81+
<id name="id" type="long">
82+
<generator class="increment"/>
83+
</id>
84+
<property name="length" column="d_len"/>
85+
<property name="width" column="d_width"/>
86+
</class>
87+
88+
<class name="SpaceShip">
89+
<id name="id" type="integer">
90+
<generator class="increment"/>
91+
</id>
92+
<property name="name" column="fld_name"/>
93+
<property name="model" column="fld_model"/>
94+
<property name="speed" column="fld_speed"/>
95+
<component name="dimensions">
96+
<property name="length" column="fld_length"/>
97+
<property name="width" column="fld_width"/>
98+
</component>
99+
</class>
100+
101+
<class name="Speech">
102+
<id name="id" type="integer">
103+
<generator class="increment"/>
104+
</id>
105+
<property name="name" column="name"/>
106+
<property name="length" column="flength"/>
107+
</class>
108+
109+
<resultset name="org-emp-regionCode">
110+
<return-scalar column="regionCode" type="string"/>
111+
<return alias="org" class="Organization"/>
112+
<return-join alias="emp" property="org.employments"/>
113+
</resultset>
114+
115+
<resultset name="org-emp-person">
116+
<return alias="org" class="Organization"/>
117+
<return-join alias="emp" property="org.employments"/>
118+
<return-join alias="pers" property="emp.employee"/>
119+
</resultset>
120+
121+
122+
<resultset name="org-description">
123+
<return alias="org" class="Organization"/>
124+
<return-join alias="emp" property="org.employments"/>
125+
</resultset>
126+
127+
<resultset name="spaceship-vol">
128+
<return alias="sps" class="SpaceShip">
129+
<return-property name="id" column="id"/>
130+
<return-property name="name" column="name"/>
131+
<return-property name="model" column="model"/>
132+
<return-property name="speed" column="speed"/>
133+
<return-property name="dimensions.length" column="length"/>
134+
<return-property name="dimensions.width" column="width"/>
135+
</return>
136+
<return-scalar column="surface" type="double" />
137+
<return-scalar column="volume" type="double" />
138+
</resultset>
139+
140+
<resultset name="speech">
141+
<return alias="sp" class="Speech">
142+
<return-property name="id" column="id"/>
143+
<return-property name="name" column="name"/>
144+
<return-property name="length" column="flength"/>
145+
</return>
146+
<return-scalar column="scalarName" type="string" />
147+
</resultset>
148+
149+
<sql-query name="spaceship" resultset-ref="spaceship-vol">
150+
select id as id,
151+
fld_name as name,
152+
fld_model as model,
153+
fld_speed as speed,
154+
fld_length as length,
155+
fld_width as width,
156+
fld_length * fld_width as surface,
157+
fld_length * fld_width *10 as volume
158+
from SpaceShip
159+
</sql-query>
160+
161+
<sql-query name="orgNamesOnly">
162+
<return-scalar column="NAME" type="string"/>
163+
SELECT org.NAME FROM ORGANIZATION org
164+
</sql-query>
165+
166+
<sql-query name="orgNamesAndOrgs">
167+
<return-scalar column="thename" type="string"/>
168+
<return alias="org" class="Organization"/>
169+
SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id}
170+
FROM ORGANIZATION org
171+
ORDER BY thename
172+
</sql-query>
173+
174+
<sql-query name="orgsAndOrgNames">
175+
<return alias="org" class="Organization"/>
176+
<return-scalar column="thename" type="string"/>
177+
SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id}
178+
FROM ORGANIZATION org
179+
ORDER BY thename
180+
</sql-query>
181+
182+
<sql-query name="orgIdsAndOrgNames">
183+
<return-scalar column="orgid" type="long"/>
184+
<return-scalar column="thename" type="string"/>
185+
SELECT NAME AS thename, ORGID AS orgid
186+
FROM ORGANIZATION
187+
ORDER BY thename
188+
</sql-query>
189+
190+
<sql-query name="AllEmploymentAsMapped">
191+
<return class="Employment"/>
192+
SELECT * FROM EMPLOYMENT
193+
</sql-query>
194+
195+
<sql-query name="EmploymentAndPerson">
196+
<return class="Employment"/>
197+
<return class="Person"/>
198+
SELECT * FROM EMPLOYMENT, PERSON
199+
</sql-query>
200+
201+
<sql-query name="organizationEmploymentsExplicitAliases">
202+
<load-collection alias="empcol" role="Organization.employments"/>
203+
SELECT empcol.EMPLOYER as {empcol.key}, empcol.EMPID as {empcol.element}, {empcol.element.*}
204+
FROM EMPLOYMENT empcol
205+
WHERE EMPLOYER = :id
206+
ORDER BY STARTDATE ASC, EMPLOYEE ASC
207+
</sql-query>
208+
209+
<sql-query name="organizationreturnproperty">
210+
<return alias="org" class="Organization">
211+
<return-property name="id" column="ORGID"/>
212+
<return-property name="name" column="NAME"/>
213+
</return>
214+
<return-join alias="emp" property="org.employments">
215+
<return-property name="key" column="EMPLOYER"/>
216+
<return-property name="element" column="EMPID"/>
217+
<return-property name="element.employee" column="EMPLOYEE"/>
218+
<return-property name="element.employer" column="EMPLOYER"/>
219+
<return-property name="element.startDate" column="XSTARTDATE"/>
220+
<return-property name="element.endDate" column="ENDDATE"/>
221+
<return-property name="element.regionCode" column="REGIONCODE"/>
222+
<return-property name="element.employmentId" column="EMPID"/>
223+
<return-property name="element.salary">
224+
<return-column name="VALUE"/>
225+
<return-column name="CURRENCY"/>
226+
</return-property>
227+
</return-join>
228+
SELECT org.ORGID as orgid,
229+
org.NAME as name,
230+
emp.EMPLOYER as employer,
231+
emp.EMPID as empid,
232+
emp.EMPLOYEE as employee,
233+
emp.EMPLOYER as employer,
234+
emp.STARTDATE as xstartDate,
235+
emp.ENDDATE as endDate,
236+
emp.REGIONCODE as regionCode,
237+
emp.VALUE as VALUE,
238+
emp.CURRENCY as CURRENCY
239+
FROM ORGANIZATION org
240+
LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
241+
</sql-query>
242+
243+
244+
<sql-query name="organizationautodetect" resultset-ref="org-description">
245+
<!-- equal to "organizationpropertyreturn" but since no {} nor return-property are used hibernate will fallback to use the columns directly from the mapping -->
246+
<return alias="org" class="Organization"/>
247+
<return-join alias="emp" property="org.employments"/>
248+
SELECT org.ORGID as orgid,
249+
org.NAME as name,
250+
emp.EMPLOYER as employer,
251+
emp.EMPID as empid,
252+
emp.EMPLOYEE as employee,
253+
emp.EMPLOYER as employer,
254+
emp.STARTDATE as startDate,
255+
emp.ENDDATE as endDate,
256+
emp.REGIONCODE as regionCode,
257+
emp.VALUE as VALUE,
258+
emp.CURRENCY as CURRENCY
259+
FROM ORGANIZATION org
260+
LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
261+
</sql-query>
262+
263+
</hibernate-mapping>

0 commit comments

Comments
 (0)