You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/09/03 15:16:44 UTC

svn commit: r1380228 - /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java

Author: andy
Date: Mon Sep  3 13:16:44 2012
New Revision: 1380228

URL: http://svn.apache.org/viewvc?rev=1380228&view=rev
Log:
Add the case of equality filter over patterns involving other filters inside them.

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java?rev=1380228&r1=1380227&r2=1380228&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java Mon Sep  3 13:16:44 2012
@@ -23,6 +23,7 @@ import java.util.Collection ;
 import java.util.List ;
 import java.util.Set ;
 
+import static org.openjena.atlas.lib.CollectionUtils.disjoint ;
 import org.openjena.atlas.lib.Pair ;
 
 import com.hp.hpl.jena.query.ARQ ;
@@ -105,7 +106,7 @@ public class TransformFilterEquality ext
     {
         List<Pair<Var, NodeValue>> exprsFilterEquality = new ArrayList<Pair<Var, NodeValue>>() ;
         ExprList exprsOther = new ExprList() ;
-        for (  Expr e : exprs.getList() )
+        for ( Expr e : exprs.getList() )
         {
             Pair<Var, NodeValue> p = preprocess(e) ;
             if ( p != null )
@@ -176,6 +177,16 @@ public class TransformFilterEquality ext
         if ( op instanceof OpBGP || op instanceof OpQuadPattern )
             return true ;
         
+        if ( op instanceof OpFilter )
+        {
+            OpFilter opf = (OpFilter)op ;
+            
+            Collection<Var> fvars = opf.getExprs().getVarsMentioned() ;
+            if ( ! disjoint(fvars, varsEquality) )
+                return false ;
+            return safeToTransform(varsEquality, opf.getSubOp()) ;
+        }
+        
         // This will be applied also in sub-calls of the Transform but queries 
         // are very rarely so deep that it matters. 
         if ( op instanceof OpSequence )