[hibernate-commits] Hibernate SVN: r18826 - in core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria: predicate and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 18 00:07:21 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-02-18 00:07:20 -0500 (Thu, 18 Feb 2010)
New Revision: 18826

Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/CriteriaBuilderImpl.java
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/predicate/CompoundPredicate.java
Log:
HHH-4583 - Incorrect handling of empty conjunction and disjunction


Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/CriteriaBuilderImpl.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/CriteriaBuilderImpl.java	2010-02-18 04:31:08 UTC (rev 18825)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/CriteriaBuilderImpl.java	2010-02-18 05:07:20 UTC (rev 18826)
@@ -314,6 +314,17 @@
 	 * {@inheritDoc}
 	 */
 	public Predicate isTrue(Expression<Boolean> expression) {
+		if ( CompoundPredicate.class.isInstance( expression ) ) {
+			final CompoundPredicate predicate = (CompoundPredicate) expression;
+			if ( predicate.getOperator() == Predicate.BooleanOperator.OR
+					&& predicate.getExpressions().size() == 0 ) {
+				predicate.not();
+			}
+			return predicate;
+		}
+		else if ( Predicate.class.isInstance( expression ) ) {
+			return (Predicate) expression;
+		}
 		return new BooleanAssertionPredicate( this, expression, Boolean.TRUE );
 	}
 
@@ -321,6 +332,22 @@
 	 * {@inheritDoc}
 	 */
 	public Predicate isFalse(Expression<Boolean> expression) {
+		if ( CompoundPredicate.class.isInstance( expression ) ) {
+			final CompoundPredicate predicate = (CompoundPredicate) expression;
+			if ( predicate.getOperator() == Predicate.BooleanOperator.OR
+					&& predicate.getExpressions().size() == 0 ) {
+				// nothing to do
+			}
+			else {
+				predicate.not();
+			}
+			return predicate;
+		}
+		else if ( Predicate.class.isInstance( expression ) ) {
+			final Predicate predicate = (Predicate) expression;
+			predicate.not();
+			return predicate;
+		}
 		return new BooleanAssertionPredicate( this, expression, Boolean.FALSE );
 	}
 

Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/predicate/CompoundPredicate.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/predicate/CompoundPredicate.java	2010-02-18 04:31:08 UTC (rev 18825)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/predicate/CompoundPredicate.java	2010-02-18 05:07:20 UTC (rev 18826)
@@ -116,7 +116,11 @@
 
 	public String render(CriteriaQueryCompiler.RenderingContext renderingContext) {
 		if ( getExpressions().size() == 0 ) {
-			return getOperator() == BooleanOperator.AND
+			boolean implicitTrue = getOperator() == BooleanOperator.AND;
+			if ( isNegated() ) {
+				implicitTrue = !implicitTrue;
+			}
+			return implicitTrue
 					? "1=1" // true
 					: "0=1"; // false
 		}



More information about the hibernate-commits mailing list