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;