Author: steve.ebersole(a)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
}
Show replies by date