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/19 21:57:55 UTC
svn commit: r1374833 - in /jena/Scratch/AFS/Jena-Dev/trunk/src/dev: Run.java
TransformFilterEquality2.java
Author: andy
Date: Sun Aug 19 19:57:54 2012
New Revision: 1374833
URL: http://svn.apache.org/viewvc?rev=1374833&view=rev
Log: (empty)
Modified:
jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java
jena/Scratch/AFS/Jena-Dev/trunk/src/dev/TransformFilterEquality2.java
Modified: jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java
URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java?rev=1374833&r1=1374832&r2=1374833&view=diff
==============================================================================
--- jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java (original)
+++ jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java Sun Aug 19 19:57:54 2012
@@ -18,12 +18,16 @@
package dev;
+import java.util.IdentityHashMap ;
+
+import org.openjena.atlas.lib.StrUtils ;
import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.query.* ;
import com.hp.hpl.jena.sparql.algebra.Algebra ;
import com.hp.hpl.jena.sparql.algebra.Op ;
import com.hp.hpl.jena.sparql.algebra.optimize.Optimize ;
+import com.hp.hpl.jena.sparql.algebra.optimize.TransformJoinStrategy ;
import com.hp.hpl.jena.sparql.core.Quad ;
import com.hp.hpl.jena.sparql.mgt.Explain ;
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
@@ -57,12 +61,32 @@ public class Run extends RunBase
public static void main(String[] argv) throws Exception
{
- Query query = QueryFactory.read("FilterEquality/filter-equality-08.rq") ;
- Op op = Algebra.compile(query) ;
- Op op2 = Optimize.apply(new TransformFilterEquality2(false), op) ;
+ String x = StrUtils.strjoinNL(
+ "PREFIX : <http://example.org/>" ,
+ "SELECT *" ,
+ "{ ",
+ //" OPTIONAL { ?x :zpp ?o1 }",
+ " OPTIONAL { ?x :zqq ?o2 }" ,
+ " FILTER ( ?x = :x )",
+ "}") ;
+ // Consider building a mapping of op to scope.
+ // Either cheaper(caching) hash or
+ // Op.fix() -- makes immutable, caches hash, changes equality (!)
+ System.identityHashCode(x) ;
+ new IdentityHashMap<Op, Object/*ScopeMap*/>() ;
+
+ //Query query = QueryFactory.read("FilterEquality/filter-equality-08.rq") ;
+ Query query = QueryFactory.create(x) ;
SerializationContext sCxt = new SerializationContext(query.getPrefixMapping()) ;
+ System.out.println(query) ;
+ Op op = Algebra.compile(query) ;
+
+ op = Optimize.apply(new TransformJoinStrategy(), op) ;
+
WriterOp.output(System.out, op, sCxt) ;
+
+ Op op2 = Optimize.apply(new TransformFilterEquality2(false), op) ;
System.out.println() ;
WriterOp.output(System.out, op2, sCxt) ;
//System.out.println(op2) ;
Modified: jena/Scratch/AFS/Jena-Dev/trunk/src/dev/TransformFilterEquality2.java
URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/TransformFilterEquality2.java?rev=1374833&r1=1374832&r2=1374833&view=diff
==============================================================================
--- jena/Scratch/AFS/Jena-Dev/trunk/src/dev/TransformFilterEquality2.java (original)
+++ jena/Scratch/AFS/Jena-Dev/trunk/src/dev/TransformFilterEquality2.java Sun Aug 19 19:57:54 2012
@@ -33,7 +33,7 @@ import com.hp.hpl.jena.sparql.expr.* ;
public class TransformFilterEquality2 extends TransformCopy
{
- // E_OneOf -- done by expansion earlier.
+ // See LeftJoinClassifier
// TODO (Carefully) transformPlainStrings
// Aggressive on strings goes for efficient over exactlness of xsd:string/plain literal.
@@ -128,19 +128,25 @@ public class TransformFilterEquality2 ex
return false ;
Op opLeft = opleftjoin.getLeft() ;
+ // Special case: { OPTIONAL {...} }
+// if ( isUnitTable(opLeft) )
+// return true ;
+
//Op opRight = opleftjoin.getRight() ;
// See also transform condition for OpConditional transformation.
Set<Var> varsLeft = OpVars.patternVars(opLeft) ;
//Set<Var> varsRight = OpVars.patternVars(opRight) ;
Set<Var> y = ExprVars.getVarsMentioned(exprs) ;
+
+ // If the varsLeft are disjoint from assigned vars,
+ // we may be able to push assign down right
+ // (generalises the unit table case above)
+ // Needs more investigation
- //boolean b1 = SetUtils.isDisjoint(varsLeft, y) ;
- //boolean b2 = varsLeft.containsAll(y) ;
-
- if ( SetUtils.isDisjoint(varsLeft, y) ||
- varsLeft.containsAll(y) )
- //if ( varsLeft.containsAll(y) )
+// if ( SetUtils.isDisjoint(varsLeft, y) ||
+// varsLeft.containsAll(y) )
+ if ( varsLeft.containsAll(y) )
return true ;
return false ;
}
@@ -245,6 +251,9 @@ public class TransformFilterEquality2 ex
{
// Op op = Substitute.substitute(subOp, var, nv.asNode()) ;
// return OpAssign.assign(op, var, nv) ;
+
+ // If it is a leftjon and the lefthand side is unit table, push teh assignment
+ // down the right hand side.
if (subOp instanceof OpConditional || subOp instanceof OpLeftJoin)
{
Op2 op2 = (Op2) subOp;