[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