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

Modified Files:
      Tag: MMBase-1_8
        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.49.2.2
retrieving revision 1.49.2.3
diff -u -b -r1.49.2.2 -r1.49.2.3
--- InsRel.java 12 Oct 2006 11:33:42 -0000      1.49.2.2
+++ InsRel.java 28 Jul 2008 16:07:07 -0000      1.49.2.3
@@ -29,7 +29,7 @@
  *
  * @author Daniel Ockeloen
  * @author Pierre van Rooden
- * @version $Id: InsRel.java,v 1.49.2.2 2006/10/12 11:33:42 pierre Exp $
+ * @version $Id: InsRel.java,v 1.49.2.3 2008/07/28 16:07:07 michiel Exp $
  */
 public class InsRel extends MMObjectBuilder {
 
@@ -426,27 +426,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 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 nodes =  new org.mmbase.util.ChainedList();
+        nodes.addList(builder.getNodes(query1));
+        nodes.addList(builder.getNodes(query2));
         return nodes;
     }
 
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to