[hibernate-commits] Hibernate SVN: r19724 - in core/branches/Branch_3_5: testsuite/src/test/java/org/hibernate/test/criteria and 1 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Jun 14 01:28:19 EDT 2010
Author: gbadner
Date: 2010-06-14 01:28:18 -0400 (Mon, 14 Jun 2010)
New Revision: 19724
Modified:
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/DB2Dialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Dialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/H2Dialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/HSQLDialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Oracle9iDialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/PostgreSQLDialect.java
core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/SQLServerDialect.java
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/criteria/CriteriaQueryTest.java
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/hql/CriteriaHQLAlignmentTest.java
Log:
HHH-5220 HHH-5231 : Fix unit test failures and DB lockups for SELECT COUNT(DISTINCT arg1, arg2) tests
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/DB2Dialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/DB2Dialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/DB2Dialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -432,4 +432,8 @@
public boolean doesReadCommittedCauseWritersToBlockReaders() {
return true;
}
+
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Dialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Dialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Dialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -1999,4 +1999,23 @@
public boolean supportsBindAsCallableArgument() {
return true;
}
+
+ /**
+ * Does this dialect support `count(a,b)`?
+ *
+ * @return True if the database supports counting tuples; false otherwise.
+ */
+ public boolean supportsTupleCounts() {
+ return false;
+ }
+
+ /**
+ * Does this dialect support `count(distinct a,b)`?
+ *
+ * @return True if the database supports counting disintct tuples; false otherwise.
+ */
+ public boolean supportsTupleDistinctCounts() {
+ // oddly most database in fact seem to, so true is the default.
+ return true;
+ }
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/H2Dialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/H2Dialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/H2Dialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -309,4 +309,8 @@
public boolean supportsLobValueChangePropogation() {
return false;
}
+
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/HSQLDialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/HSQLDialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/HSQLDialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -334,4 +334,8 @@
public boolean supportsLobValueChangePropogation() {
return false;
}
+
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Oracle9iDialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Oracle9iDialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/Oracle9iDialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -131,8 +131,12 @@
* HHH-4907, I don't know if oracle 8 supports this syntax, so I'd think it is better add this
* method here. Reopen this issue if you found/know 8 supports it.
*/
- public boolean supportsRowValueConstructorSyntaxInInList() {
- return true;
- }
+ public boolean supportsRowValueConstructorSyntaxInInList() {
+ return true;
+ }
+
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/PostgreSQLDialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/PostgreSQLDialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/PostgreSQLDialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -290,6 +290,10 @@
return "select now()";
}
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
+
public String toBooleanValueString(boolean bool) {
return bool ? "true" : "false";
}
Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/SQLServerDialect.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/SQLServerDialect.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/dialect/SQLServerDialect.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -164,4 +164,8 @@
public boolean doesRepeatableReadCauseReadersToBlockWriters() {
return false; // here assume SQLServer2005 using snapshot isolation, which does not have this problem
}
+
+ public boolean supportsTupleDistinctCounts() {
+ return false;
+ }
}
Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/criteria/CriteriaQueryTest.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/criteria/CriteriaQueryTest.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/criteria/CriteriaQueryTest.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -27,7 +27,6 @@
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
-import org.hibernate.dialect.HSQLDialect;
import org.hibernate.exception.SQLGrammarException;
import org.hibernate.junit.functional.FunctionalTestCase;
import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
@@ -1001,11 +1000,16 @@
result = s.createCriteria( Student.class )
.setProjection( Projections.countDistinct( "cityState" ) )
.uniqueResult();
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
assertEquals( 1, ( ( Long ) result ).longValue() );
}
catch ( SQLGrammarException ex ) {
- // HSQLDB's cannot handle more than 1 argument in SELECT COUNT( DISTINCT ... ) )
- if ( ! ( getDialect() instanceof HSQLDialect ) ) {
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ // expected
+ }
+ else {
throw ex;
}
}
@@ -1277,10 +1281,16 @@
t = s.beginTransaction();
try {
Object result = s.createCriteria( CourseMeeting.class).setProjection( Projections.countDistinct( "id" ) ).list();
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
+ assertEquals( 1, ( ( Long ) result ).longValue() );
}
catch ( SQLGrammarException ex ) {
- // HSQLDB's cannot handle more than 1 argument in SELECT COUNT( DISTINCT ... ) )
- if ( ! ( getDialect() instanceof HSQLDialect ) ) {
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ // expected
+ }
+ else {
throw ex;
}
}
Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/hql/CriteriaHQLAlignmentTest.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/hql/CriteriaHQLAlignmentTest.java 2010-06-14 05:19:07 UTC (rev 19723)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/hql/CriteriaHQLAlignmentTest.java 2010-06-14 05:28:18 UTC (rev 19724)
@@ -4,6 +4,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collections;
+import java.util.List;
import junit.framework.Test;
@@ -33,6 +34,12 @@
SelectClause.VERSION2_SQL = true;
}
+ public String[] getMappings() {
+ return new String[] {
+ "hql/Animal.hbm.xml",
+ };
+ }
+
public boolean createSchema() {
return true; // needed for the Criteria return type test
}
@@ -119,6 +126,7 @@
// HHH-1724 Align Criteria with HQL aggregation return types.
public void testCriteriaAggregationReturnType() {
Session s = openSession();
+ s.beginTransaction();
Human human = new Human();
human.setBigIntegerValue( new BigInteger("42") );
human.setBigDecimalValue( new BigDecimal(45) );
@@ -172,6 +180,7 @@
s.delete( human );
s.flush();
+ s.getTransaction().commit();
s.close();
}
@@ -224,19 +233,24 @@
.setProjection( Projections.count( "nickName" ).setDistinct() )
.uniqueResult();
assertEquals( 2, count.longValue() );
- s.clear();
+ s.close();
s = openSession();
t = s.beginTransaction();
try {
count = ( Long ) s.createQuery( "select count( distinct name ) from Human" ).uniqueResult();
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
assertEquals( 2, count.longValue() );
}
catch ( SQLGrammarException ex ) {
- // HSQLDB's cannot handle more than 1 argument in SELECT COUNT( DISTINCT ... ) )
- if ( ! ( getDialect() instanceof HSQLDialect ) ) {
- throw ex;
- }
+ if ( ! getDialect().supportsTupleCounts() ) {
+ // expected
+ }
+ else {
+ throw ex;
+ }
}
finally {
t.rollback();
@@ -249,13 +263,18 @@
count = ( Long ) s.createCriteria( Human.class )
.setProjection( Projections.count( "name" ).setDistinct() )
.uniqueResult();
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
assertEquals( 2, count.longValue() );
}
catch ( SQLGrammarException ex ) {
- // HSQLDB's cannot handle more than 1 argument in SELECT COUNT( DISTINCT ... ) )
- if ( ! ( getDialect() instanceof HSQLDialect ) ) {
- throw ex;
- }
+ if ( ! getDialect().supportsTupleCounts() ) {
+ // expected
+ }
+ else {
+ throw ex;
+ }
}
finally {
t.rollback();
@@ -278,10 +297,17 @@
t = s.beginTransaction();
try {
count = ( Long ) s.createQuery( "select count( name ) from Human" ).uniqueResult();
- fail( "should have failed due to SQLGrammarException" );
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
}
catch ( SQLGrammarException ex ) {
- // expected
+ if ( ! getDialect().supportsTupleCounts() ) {
+ // expected
+ }
+ else {
+ throw ex;
+ }
}
finally {
t.rollback();
@@ -294,10 +320,17 @@
count = ( Long ) s.createCriteria( Human.class )
.setProjection( Projections.count( "name" ) )
.uniqueResult();
- fail( "should have failed due to SQLGrammarException" );
+ if ( ! getDialect().supportsTupleDistinctCounts() ) {
+ fail( "expected SQLGrammarException" );
+ }
}
catch ( SQLGrammarException ex ) {
- // expected
+ if ( ! getDialect().supportsTupleCounts() ) {
+ // expected
+ }
+ else {
+ throw ex;
+ }
}
finally {
t.rollback();
@@ -310,5 +343,4 @@
t.commit();
s.close();
}
-
}
More information about the hibernate-commits
mailing list