@@ -112,6 +112,9 @@ public void ScrollCriteria()
112
112
[ Test ]
113
113
public void AllowToSetLimitOnSubqueries ( )
114
114
{
115
+ if ( ! TestDialect . SupportsNakedSubqueryInWhereClause )
116
+ Assert . Ignore ( Dialect . GetType ( ) . Name + " does not support subqueries in where clause" ) ;
117
+
115
118
using ( ISession session = OpenSession ( ) )
116
119
{
117
120
DetachedCriteria dc = DetachedCriteria . For ( typeof ( Student ) )
@@ -129,6 +132,9 @@ public void AllowToSetLimitOnSubqueries()
129
132
[ Test ]
130
133
public void TestSubcriteriaBeingNull ( )
131
134
{
135
+ if ( ! TestDialect . SupportsNakedSubqueryInWhereClause )
136
+ Assert . Ignore ( Dialect . GetType ( ) . Name + " does not support subqueries in where clause" ) ;
137
+
132
138
ISession session = OpenSession ( ) ;
133
139
ITransaction t = session . BeginTransaction ( ) ;
134
140
@@ -205,37 +211,40 @@ public void Subselect()
205
211
. Add ( Subqueries . In ( "Gavin King" , dc ) )
206
212
. List ( ) ;
207
213
208
- DetachedCriteria dc2 = DetachedCriteria . For ( typeof ( Student ) , "st" )
209
- . Add ( Property . ForName ( "st.StudentNumber" ) . EqProperty ( "e.StudentNumber" ) )
210
- . SetProjection ( Property . ForName ( "Name" ) ) ;
214
+ if ( TestDialect . SupportsNakedSubqueryInWhereClause )
215
+ {
216
+ DetachedCriteria dc2 = DetachedCriteria . For ( typeof ( Student ) , "st" )
217
+ . Add ( Property . ForName ( "st.StudentNumber" ) . EqProperty ( "e.StudentNumber" ) )
218
+ . SetProjection ( Property . ForName ( "Name" ) ) ;
211
219
212
- session . CreateCriteria ( typeof ( Enrolment ) , "e" )
213
- . Add ( Subqueries . Eq ( "Gavin King" , dc2 ) )
214
- . List ( ) ;
220
+ session . CreateCriteria ( typeof ( Enrolment ) , "e" )
221
+ . Add ( Subqueries . Eq ( "Gavin King" , dc2 ) )
222
+ . List ( ) ;
215
223
216
- DetachedCriteria dc3 = DetachedCriteria . For ( typeof ( Student ) , "st" )
217
- . CreateCriteria ( "Enrolments" )
218
- . CreateCriteria ( "Course" )
219
- . Add ( Property . ForName ( "Description" ) . Eq ( "Hibernate Training" ) )
220
- . SetProjection ( Property . ForName ( "st.Name" ) ) ;
224
+ DetachedCriteria dc3 = DetachedCriteria . For ( typeof ( Student ) , "st" )
225
+ . CreateCriteria ( "Enrolments" )
226
+ . CreateCriteria ( "Course" )
227
+ . Add ( Property . ForName ( "Description" ) . Eq ( "Hibernate Training" ) )
228
+ . SetProjection ( Property . ForName ( "st.Name" ) ) ;
221
229
222
- session . CreateCriteria ( typeof ( Enrolment ) , "e" )
223
- . Add ( Subqueries . Eq ( "Gavin King" , dc3 ) )
224
- . List ( ) ;
230
+ session . CreateCriteria ( typeof ( Enrolment ) , "e" )
231
+ . Add ( Subqueries . Eq ( "Gavin King" , dc3 ) )
232
+ . List ( ) ;
225
233
226
- DetachedCriteria courseCriteria = DetachedCriteria . For ( typeof ( Course ) )
227
- . Add ( Property . ForName ( "Description" ) . Eq ( "Hibernate Training" ) )
228
- . SetProjection ( Projections . Property ( "CourseCode" ) ) ;
234
+ DetachedCriteria courseCriteria = DetachedCriteria . For ( typeof ( Course ) )
235
+ . Add ( Property . ForName ( "Description" ) . Eq ( "Hibernate Training" ) )
236
+ . SetProjection ( Projections . Property ( "CourseCode" ) ) ;
229
237
230
- DetachedCriteria enrolmentCriteria = DetachedCriteria . For ( typeof ( Enrolment ) )
231
- . Add ( Property . ForName ( "CourseCode" ) . Eq ( courseCriteria ) )
232
- . SetProjection ( Projections . Property ( "CourseCode" ) ) ;
238
+ DetachedCriteria enrolmentCriteria = DetachedCriteria . For ( typeof ( Enrolment ) )
239
+ . Add ( Property . ForName ( "CourseCode" ) . Eq ( courseCriteria ) )
240
+ . SetProjection ( Projections . Property ( "CourseCode" ) ) ;
233
241
234
- DetachedCriteria studentCriteria = DetachedCriteria . For ( typeof ( Student ) )
235
- . Add ( Subqueries . Exists ( enrolmentCriteria ) ) ;
242
+ DetachedCriteria studentCriteria = DetachedCriteria . For ( typeof ( Student ) )
243
+ . Add ( Subqueries . Exists ( enrolmentCriteria ) ) ;
236
244
237
- object result = studentCriteria . GetExecutableCriteria ( session ) . UniqueResult ( ) ;
238
- Assert . AreSame ( gavin , result ) ;
245
+ object result = studentCriteria . GetExecutableCriteria ( session ) . UniqueResult ( ) ;
246
+ Assert . AreSame ( gavin , result ) ;
247
+ }
239
248
240
249
session . Delete ( enrolment2 ) ;
241
250
session . Delete ( gavin ) ;
@@ -929,10 +938,13 @@ public void ProjectionsTest()
929
938
930
939
//s.flush();
931
940
932
- int count = ( int ) s . CreateCriteria ( typeof ( Enrolment ) )
933
- . SetProjection ( Projections . Count ( "StudentNumber" ) . SetDistinct ( ) )
934
- . UniqueResult ( ) ;
935
- Assert . AreEqual ( 2 , count ) ;
941
+ if ( TestDialect . SupportsCountDistinct )
942
+ {
943
+ int count = ( int ) s . CreateCriteria ( typeof ( Enrolment ) )
944
+ . SetProjection ( Projections . Count ( "StudentNumber" ) . SetDistinct ( ) )
945
+ . UniqueResult ( ) ;
946
+ Assert . AreEqual ( 2 , count ) ;
947
+ }
936
948
937
949
object obj = s . CreateCriteria ( typeof ( Enrolment ) )
938
950
. SetProjection ( Projections . ProjectionList ( )
@@ -1043,17 +1055,20 @@ public void ProjectionsTest()
1043
1055
. UniqueResult ( ) ;
1044
1056
Assert . AreEqual ( typeof ( Int64 ) , r . GetType ( ) ) ;
1045
1057
1046
- IList list = s . CreateCriteria ( typeof ( Enrolment ) )
1047
- . CreateAlias ( "Student" , "st" )
1048
- . CreateAlias ( "Course" , "co" )
1049
- . SetProjection ( Projections . ProjectionList ( )
1050
- . Add ( Projections . GroupProperty ( "co.CourseCode" ) )
1051
- . Add ( Projections . Count ( "st.StudentNumber" ) . SetDistinct ( ) )
1052
- . Add ( Projections . GroupProperty ( "Year" ) )
1053
- )
1054
- . List ( ) ;
1058
+ if ( TestDialect . SupportsCountDistinct )
1059
+ {
1060
+ IList list = s . CreateCriteria ( typeof ( Enrolment ) )
1061
+ . CreateAlias ( "Student" , "st" )
1062
+ . CreateAlias ( "Course" , "co" )
1063
+ . SetProjection ( Projections . ProjectionList ( )
1064
+ . Add ( Projections . GroupProperty ( "co.CourseCode" ) )
1065
+ . Add ( Projections . Count ( "st.StudentNumber" ) . SetDistinct ( ) )
1066
+ . Add ( Projections . GroupProperty ( "Year" ) )
1067
+ )
1068
+ . List ( ) ;
1055
1069
1056
- Assert . AreEqual ( 2 , list . Count ) ;
1070
+ Assert . AreEqual ( 2 , list . Count ) ;
1071
+ }
1057
1072
1058
1073
object g = s . CreateCriteria ( typeof ( Student ) )
1059
1074
. Add ( Expression . IdEq ( 667L ) )
@@ -1113,11 +1128,14 @@ public void CloningProjectionsTest()
1113
1128
1114
1129
//s.flush();
1115
1130
1116
- ICriteria criteriaToBeCloned = s . CreateCriteria ( typeof ( Enrolment ) )
1117
- . SetProjection ( Projections . Count ( "StudentNumber" ) . SetDistinct ( ) ) ;
1118
- int count = ( int ) CriteriaTransformer . Clone ( criteriaToBeCloned )
1119
- . UniqueResult ( ) ;
1120
- Assert . AreEqual ( 2 , count ) ;
1131
+ if ( TestDialect . SupportsCountDistinct )
1132
+ {
1133
+ ICriteria criteriaToBeCloned = s . CreateCriteria ( typeof ( Enrolment ) )
1134
+ . SetProjection ( Projections . Count ( "StudentNumber" ) . SetDistinct ( ) ) ;
1135
+ int count = ( int ) CriteriaTransformer . Clone ( criteriaToBeCloned )
1136
+ . UniqueResult ( ) ;
1137
+ Assert . AreEqual ( 2 , count ) ;
1138
+ }
1121
1139
1122
1140
ICriteria criteriaToClone = s . CreateCriteria ( typeof ( Enrolment ) )
1123
1141
. SetProjection ( Projections . ProjectionList ( )
@@ -1226,18 +1244,21 @@ public void CloningProjectionsTest()
1226
1244
1227
1245
Assert . AreEqual ( 7 , array . Length ) ;
1228
1246
1229
- ICriteria criteriaToClone5 = s . CreateCriteria ( typeof ( Enrolment ) )
1230
- . CreateAlias ( "Student" , "st" )
1231
- . CreateAlias ( "Course" , "co" )
1232
- . SetProjection ( Projections . ProjectionList ( )
1233
- . Add ( Projections . GroupProperty ( "co.CourseCode" ) )
1234
- . Add ( Projections . Count ( "st.StudentNumber" ) . SetDistinct ( ) )
1235
- . Add ( Projections . GroupProperty ( "Year" ) )
1236
- ) ;
1237
- IList list = CriteriaTransformer . Clone ( criteriaToClone5 )
1238
- . List ( ) ;
1247
+ if ( TestDialect . SupportsCountDistinct )
1248
+ {
1249
+ ICriteria criteriaToClone5 = s . CreateCriteria ( typeof ( Enrolment ) )
1250
+ . CreateAlias ( "Student" , "st" )
1251
+ . CreateAlias ( "Course" , "co" )
1252
+ . SetProjection ( Projections . ProjectionList ( )
1253
+ . Add ( Projections . GroupProperty ( "co.CourseCode" ) )
1254
+ . Add ( Projections . Count ( "st.StudentNumber" ) . SetDistinct ( ) )
1255
+ . Add ( Projections . GroupProperty ( "Year" ) )
1256
+ ) ;
1257
+ IList list = CriteriaTransformer . Clone ( criteriaToClone5 )
1258
+ . List ( ) ;
1239
1259
1240
- Assert . AreEqual ( 2 , list . Count ) ;
1260
+ Assert . AreEqual ( 2 , list . Count ) ;
1261
+ }
1241
1262
1242
1263
ICriteria criteriaToClone6 = s . CreateCriteria ( typeof ( Student ) )
1243
1264
. Add ( Expression . IdEq ( 667L ) )
@@ -1377,13 +1398,17 @@ public void ProjectionsUsingProperty()
1377
1398
Assert . That ( aResult [ 1 ] , Is . InstanceOf < string > ( ) ) ;
1378
1399
Assert . That ( aResult [ 2 ] , Is . InstanceOf < CityState > ( ) ) ;
1379
1400
Assert . That ( aResult [ 3 ] , Is . InstanceOf < Course > ( ) ) ;
1380
-
1401
+
1381
1402
// Subtest #5
1382
- int count = ( int ) s . CreateCriteria ( typeof ( Enrolment ) )
1383
- . SetProjection ( Property . ForName ( "StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1384
- . UniqueResult ( ) ;
1385
-
1386
- Assert . AreEqual ( 2 , count ) ;
1403
+
1404
+ if ( TestDialect . SupportsCountDistinct )
1405
+ {
1406
+ int count = ( int ) s . CreateCriteria ( typeof ( Enrolment ) )
1407
+ . SetProjection ( Property . ForName ( "StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1408
+ . UniqueResult ( ) ;
1409
+
1410
+ Assert . AreEqual ( 2 , count ) ;
1411
+ }
1387
1412
1388
1413
// Subtest #6
1389
1414
object obj = s . CreateCriteria ( typeof ( Enrolment ) )
@@ -1518,48 +1543,53 @@ public void ProjectionsUsingProperty()
1518
1543
1519
1544
Assert . AreEqual ( 7 , array . Length ) ;
1520
1545
1521
- // Subtest #15
1522
- IList list = s . CreateCriteria ( typeof ( Enrolment ) )
1523
- . CreateAlias ( "Student" , "st" )
1524
- . CreateAlias ( "Course" , "co" )
1525
- . SetProjection ( Projections . ProjectionList ( )
1526
- . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) )
1527
- . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1528
- . Add ( Property . ForName ( "Year" ) . Group ( ) )
1529
- )
1530
- . List ( ) ;
1546
+ IList list ;
1531
1547
1532
- Assert . AreEqual ( 2 , list . Count ) ;
1548
+ if ( TestDialect . SupportsCountDistinct )
1549
+ {
1550
+ // Subtest #15
1551
+ list = s . CreateCriteria ( typeof ( Enrolment ) )
1552
+ . CreateAlias ( "Student" , "st" )
1553
+ . CreateAlias ( "Course" , "co" )
1554
+ . SetProjection ( Projections . ProjectionList ( )
1555
+ . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) )
1556
+ . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1557
+ . Add ( Property . ForName ( "Year" ) . Group ( ) )
1558
+ )
1559
+ . List ( ) ;
1533
1560
1534
- // Subtest #16
1535
- list = s . CreateCriteria < Enrolment > ( )
1536
- . CreateAlias ( "Student" , "st" )
1537
- . CreateAlias ( "Course" , "co" )
1538
- . SetProjection ( Projections . ProjectionList ( )
1539
- . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) . As ( "courseCode" ) )
1540
- . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) . As ( "studentNumber" ) )
1541
- . Add ( Property . ForName ( "Year" ) . Group ( ) )
1542
- )
1543
- . AddOrder ( Order . Asc ( "courseCode" ) )
1544
- . AddOrder ( Order . Asc ( "studentNumber" ) )
1545
- . List ( ) ;
1561
+ Assert . AreEqual ( 2 , list . Count ) ;
1562
+
1563
+ // Subtest #16
1564
+ list = s . CreateCriteria < Enrolment > ( )
1565
+ . CreateAlias ( "Student" , "st" )
1566
+ . CreateAlias ( "Course" , "co" )
1567
+ . SetProjection ( Projections . ProjectionList ( )
1568
+ . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) . As ( "courseCode" ) )
1569
+ . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) . As ( "studentNumber" ) )
1570
+ . Add ( Property . ForName ( "Year" ) . Group ( ) )
1571
+ )
1572
+ . AddOrder ( Order . Asc ( "courseCode" ) )
1573
+ . AddOrder ( Order . Asc ( "studentNumber" ) )
1574
+ . List ( ) ;
1546
1575
1547
- Assert . That ( list . Count , Is . EqualTo ( 2 ) ) ;
1576
+ Assert . That ( list . Count , Is . EqualTo ( 2 ) ) ;
1548
1577
1549
- // Subtest #17
1550
- list = s . CreateCriteria < Enrolment > ( )
1551
- . CreateAlias ( "Student" , "st" )
1552
- . CreateAlias ( "Course" , "co" )
1553
- . SetProjection ( Projections . ProjectionList ( )
1554
- . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) . As ( "cCode" ) )
1555
- . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) . As ( "stNumber" ) )
1556
- . Add ( Property . ForName ( "Year" ) . Group ( ) )
1557
- )
1558
- . AddOrder ( Order . Asc ( "cCode" ) )
1559
- . AddOrder ( Order . Asc ( "stNumber" ) )
1560
- . List ( ) ;
1578
+ // Subtest #17
1579
+ list = s . CreateCriteria < Enrolment > ( )
1580
+ . CreateAlias ( "Student" , "st" )
1581
+ . CreateAlias ( "Course" , "co" )
1582
+ . SetProjection ( Projections . ProjectionList ( )
1583
+ . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) . As ( "cCode" ) )
1584
+ . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) . As ( "stNumber" ) )
1585
+ . Add ( Property . ForName ( "Year" ) . Group ( ) )
1586
+ )
1587
+ . AddOrder ( Order . Asc ( "cCode" ) )
1588
+ . AddOrder ( Order . Asc ( "stNumber" ) )
1589
+ . List ( ) ;
1561
1590
1562
- Assert . That ( list . Count , Is . EqualTo ( 2 ) ) ;
1591
+ Assert . That ( list . Count , Is . EqualTo ( 2 ) ) ;
1592
+ }
1563
1593
1564
1594
s . Delete ( gavin ) ;
1565
1595
s . Delete ( xam ) ;
@@ -1636,13 +1666,16 @@ public void DistinctProjectionsOfComponents()
1636
1666
. UniqueResult ( ) ;
1637
1667
1638
1668
Assert . That ( result , Is . EqualTo ( 2 ) ) ;
1639
-
1640
- result = s . CreateCriteria < Student > ( )
1641
- . SetProjection ( Projections . CountDistinct ( "CityState.City" ) )
1642
- . UniqueResult ( ) ;
1643
-
1644
- Assert . That ( result , Is . EqualTo ( 1 ) ) ;
1645
-
1669
+
1670
+ if ( TestDialect . SupportsCountDistinct )
1671
+ {
1672
+ result = s . CreateCriteria < Student > ( )
1673
+ . SetProjection ( Projections . CountDistinct ( "CityState.City" ) )
1674
+ . UniqueResult ( ) ;
1675
+
1676
+ Assert . That ( result , Is . EqualTo ( 1 ) ) ;
1677
+ }
1678
+
1646
1679
t . Commit ( ) ;
1647
1680
s . Close ( ) ;
1648
1681
@@ -1880,11 +1913,13 @@ public void CloningProjectionsUsingProperty()
1880
1913
s . Save ( enrolment ) ;
1881
1914
s . Flush ( ) ;
1882
1915
1883
- int count = ( int ) CriteriaTransformer . Clone ( s . CreateCriteria ( typeof ( Enrolment ) )
1884
- . SetProjection ( Property . ForName ( "StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1885
- )
1886
- . UniqueResult ( ) ;
1887
- Assert . AreEqual ( 2 , count ) ;
1916
+ if ( TestDialect . SupportsCountDistinct )
1917
+ {
1918
+ int count = ( int ) CriteriaTransformer . Clone (
1919
+ s . CreateCriteria ( typeof ( Enrolment ) ) . SetProjection ( Property . ForName ( "StudentNumber" ) . Count ( ) . SetDistinct ( ) )
1920
+ ) . UniqueResult ( ) ;
1921
+ Assert . AreEqual ( 2 , count ) ;
1922
+ }
1888
1923
1889
1924
object obj = CriteriaTransformer . Clone ( s . CreateCriteria ( typeof ( Enrolment ) )
1890
1925
. SetProjection ( Projections . ProjectionList ( )
@@ -2003,18 +2038,22 @@ public void CloningProjectionsUsingProperty()
2003
2038
. UniqueResult ( ) ;
2004
2039
Assert . AreEqual ( 7 , array . Length ) ;
2005
2040
2006
- IList list = CriteriaTransformer . Clone ( s . CreateCriteria ( typeof ( Enrolment ) )
2007
- . CreateAlias ( "Student" , "st" )
2008
- . CreateAlias ( "Course" , "co" )
2009
- . SetProjection ( Projections . ProjectionList ( )
2010
- . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) )
2011
- . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) )
2012
- . Add ( Property . ForName ( "Year" ) . Group ( ) )
2013
- )
2014
- )
2015
- . List ( ) ;
2041
+ if ( TestDialect . SupportsCountDistinct )
2042
+ {
2043
+ IList list = CriteriaTransformer . Clone (
2044
+ s . CreateCriteria ( typeof ( Enrolment ) )
2045
+ . CreateAlias ( "Student" , "st" )
2046
+ . CreateAlias ( "Course" , "co" )
2047
+ . SetProjection (
2048
+ Projections . ProjectionList ( )
2049
+ . Add ( Property . ForName ( "co.CourseCode" ) . Group ( ) )
2050
+ . Add ( Property . ForName ( "st.StudentNumber" ) . Count ( ) . SetDistinct ( ) )
2051
+ . Add ( Property . ForName ( "Year" ) . Group ( ) )
2052
+ )
2053
+ ) . List ( ) ;
2016
2054
2017
- Assert . AreEqual ( 2 , list . Count ) ;
2055
+ Assert . AreEqual ( 2 , list . Count ) ;
2056
+ }
2018
2057
2019
2058
s . Delete ( gavin ) ;
2020
2059
s . Delete ( xam ) ;
0 commit comments