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/08/14 14:25:31 UTC
svn commit: r1372857 -
/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java
Author: andy
Date: Tue Aug 14 12:25:31 2012
New Revision: 1372857
URL: http://svn.apache.org/viewvc?rev=1372857&view=rev
Log:
Add small part of optimizing for unit table.
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=1372857&r1=1372856&r2=1372857&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 Tue Aug 14 12:25:31 2012
@@ -27,14 +27,7 @@ import com.hp.hpl.jena.sparql.algebra.Tr
import com.hp.hpl.jena.sparql.algebra.op.* ;
import com.hp.hpl.jena.sparql.core.Substitute ;
import com.hp.hpl.jena.sparql.core.Var ;
-import com.hp.hpl.jena.sparql.expr.E_Equals ;
-import com.hp.hpl.jena.sparql.expr.E_SameTerm ;
-import com.hp.hpl.jena.sparql.expr.Expr ;
-import com.hp.hpl.jena.sparql.expr.ExprFunction2 ;
-import com.hp.hpl.jena.sparql.expr.ExprList ;
-import com.hp.hpl.jena.sparql.expr.ExprVar ;
-import com.hp.hpl.jena.sparql.expr.ExprVars ;
-import com.hp.hpl.jena.sparql.expr.NodeValue ;
+import com.hp.hpl.jena.sparql.expr.* ;
public class TransformFilterEquality extends TransformCopy
{
@@ -101,7 +94,8 @@ public class TransformFilterEquality ext
private static boolean safeToTransform(ExprList exprs, Op op)
{
- if ( op instanceof OpBGP || op instanceof OpQuadPattern ) return true ;
+ if ( op instanceof OpBGP || op instanceof OpQuadPattern )
+ return true ;
// This will be applied also in sub-calls of the Transform but queries
// are very rarely so deep that it matters.
@@ -132,10 +126,19 @@ public class TransformFilterEquality ext
return false ;
Op opLeft = opleftjoin.getLeft() ;
- // ?? Slightly stronger condition that OpConditional transformation.
- Set<Var> x = OpVars.patternVars(opLeft) ;
+ //Op opRight = opleftjoin.getRight() ;
+ // ?? Slightly stronger condition than OpConditional transformation.
+ // ** Extract out the (conditional) condition
+ // ** Reorder so join optimization does first and be more aggregsssive if (conditional).
+ // The requirment is that all expression vars are certainy bound.
+
+ Set<Var> varsLeft = OpVars.patternVars(opLeft) ;
+ //Set<Var> varsRight = OpVars.patternVars(opRight) ;
Set<Var> y = ExprVars.getVarsMentioned(exprs) ;
- if ( x.containsAll(y) )
+
+ //if ( varsLeft.containsAll(y) )
+
+ if ( varsLeft.containsAll(y) )
return true ;
return false ;
}
@@ -146,6 +149,12 @@ public class TransformFilterEquality ext
return safeToTransform(exprs, opg.getSubOp()) ;
}
+ if (op instanceof OpTable )
+ {
+ if ( ((OpTable)op).isJoinIdentity() )
+ return true;
+ }
+
return false ;
}
@@ -196,6 +205,10 @@ public class TransformFilterEquality ext
return null ;
if ( !patternVars.contains(var) )
+ // The underlying op does not define the variable.
+ // The filter will fail. Could remove all together.
+ //return OpTable.empty() ;
+ // For now, play safe in this (rare?) case.
return null ;
// Corner case: sameTerm is false for string/plain literal,