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 )