Update of /var/cvs/src/org/mmbase/module/corebuilders
In directory james.mmbase.org:/tmp/cvs-serv11417

Modified Files:
        InsRel.java 
Log Message:
another fix for   MMB-1597. avoid unnecessary dreaded OR queries


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/module/corebuilders
See also: http://www.mmbase.org/jira/browse/MMB-1597


Index: InsRel.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/module/corebuilders/InsRel.java,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -b -r1.56 -r1.57
--- InsRel.java 18 Jul 2008 05:24:02 -0000      1.56
+++ InsRel.java 28 Jul 2008 15:27:40 -0000      1.57
@@ -29,7 +29,7 @@
  *
  * @author Daniel Ockeloen
  * @author Pierre van Rooden
- * @version $Id: InsRel.java,v 1.56 2008/07/18 05:24:02 michiel Exp $
+ * @version $Id: InsRel.java,v 1.57 2008/07/28 15:27:40 michiel Exp $
  */
 public class InsRel extends MMObjectBuilder {
 
@@ -431,27 +431,37 @@
         if (role != -1) {
             builder = mmb.getRelDef().getBuilder(role);
         }
-        NodeSearchQuery query = new NodeSearchQuery(builder);
-        BasicCompositeConstraint constraint = new 
BasicCompositeConstraint(CompositeConstraint.LOGICAL_OR);
-        constraint.addChild(getNumberConstraint(query,FIELD_SOURCE, source));
-        Constraint destinationConstraint = 
getNumberConstraint(query,FIELD_DESTINATION, source);
-        if (useDirectionality) {
-            BasicFieldValueConstraint dirConstraint = 
getNumberConstraint(query,FIELD_DIRECTIONALITY, 1);
-            dirConstraint.setOperator(FieldCompareConstraint.NOT_EQUAL);
-            BasicCompositeConstraint compositeConstraint = new 
BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND);
-            compositeConstraint.addChild(destinationConstraint);
-            compositeConstraint.addChild(dirConstraint);
-            destinationConstraint = compositeConstraint;
-        }
-        constraint.addChild(destinationConstraint);
+        NodeSearchQuery query1 = new NodeSearchQuery(builder);
+        {
+            Constraint constraint = (getNumberConstraint(query1, FIELD_SOURCE, 
source));
         if (role != -1) {
             BasicCompositeConstraint roleConstraint = new 
BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND);
             roleConstraint.addChild(constraint);
-            roleConstraint.addChild(getNumberConstraint(query,FIELD_ROLE, 
role));
+                roleConstraint.addChild(getNumberConstraint(query1, 
FIELD_ROLE, role));
             constraint = roleConstraint;
         }
-        query.setConstraint(constraint);
-        List<MMObjectNode> nodes = builder.getNodes(query);
+            query1.setConstraint(constraint);
+        }
+        NodeSearchQuery query2 = new NodeSearchQuery(builder);
+        {
+            BasicCompositeConstraint constraint = new 
BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND);
+            constraint.addChild(getNumberConstraint(query2, FIELD_DESTINATION, 
source));
+            BasicFieldValueConstraint sourceConstraint = 
getNumberConstraint(query2, FIELD_SOURCE, source);
+            sourceConstraint.setOperator(FieldCompareConstraint.NOT_EQUAL);
+            constraint.addChild(sourceConstraint);
+            if (useDirectionality) {
+                BasicFieldValueConstraint dirConstraint = 
getNumberConstraint(query2, FIELD_DIRECTIONALITY, 1);
+                dirConstraint.setOperator(FieldCompareConstraint.NOT_EQUAL);
+                constraint.addChild(dirConstraint);
+            }
+            if (role != -1) {
+                constraint.addChild(getNumberConstraint(query2, FIELD_ROLE, 
role));
+            }
+            query2.setConstraint(constraint);
+        }
+        org.mmbase.util.ChainedList<MMObjectNode> nodes =  new 
org.mmbase.util.ChainedList<MMObjectNode>();
+        nodes.addList(getNodes(query1));
+        nodes.addList(getNodes(query2));
         return nodes;
     }
 
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to