Author: michiel
Date: 2010-01-26 15:01:48 +0100 (Tue, 26 Jan 2010)
New Revision: 40730
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/database/BasicSqlHandler.java
Log:
MMB-1919
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/database/BasicSqlHandler.java
===================================================================
---
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/database/BasicSqlHandler.java
2010-01-26 13:59:19 UTC (rev 40729)
+++
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/database/BasicSqlHandler.java
2010-01-26 14:01:48 UTC (rev 40730)
@@ -1042,7 +1042,22 @@
// Test for at least 1 child.
if (childs.isEmpty()) {
- throw new IllegalStateException("Composite constraint has no child
(at least 1 child is required).");
+ if ((compositeConstraint.getLogicalOperator() ==
CompositeConstraint.LOGICAL_AND && ! compositeConstraint.isInverse())
+ || (compositeConstraint.getLogicalOperator() ==
CompositeConstraint.LOGICAL_OR && compositeConstraint.isInverse())
+ ) {
+ // An empty AND constraint is the same as no constraint at all
+ // An empty inverse OR constraint too
+ sb.append("(1 = 1)");
+ return;
+ }
+ if ((compositeConstraint.getLogicalOperator() ==
CompositeConstraint.LOGICAL_OR && ! compositeConstraint.isInverse())
+ || (compositeConstraint.getLogicalOperator() ==
CompositeConstraint.LOGICAL_AND && compositeConstraint.isInverse())) {
+ // OR means 'at least one'. So if no childs, it's always false.
+ // AND means 'all', so inverse ALL is always false, because if
there are none, they are all always true.
+ sb.append("(1 = 0)");
+ return;
+
+ }
}
boolean hasMultipleChilds = childs.size() > 1;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs