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