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

Reply via email to