Author: andy
Date: Tue Nov 19 21:28:35 2013
New Revision: 1543581

URL: http://svn.apache.org/r1543581
Log:
Clean up after turning JENA-595 work into a patch file.

Removed:
    jena/Scratch/AFS/Dev/src-dev/opt/Jena383_BadPlanOptionals.java
    jena/Scratch/AFS/Dev/src-dev/opt/JenaNNN_FilterEquality.java
    jena/Scratch/AFS/Dev/src-dev/opt/OpVarsFixed.java
    jena/Scratch/AFS/Dev/src-dev/opt/TestFilterPlacement.java
    jena/Scratch/AFS/Dev/src-dev/opt/TransformFilterPlacement_Rewrite.java
    jena/Scratch/AFS/Dev/src-dev/opt/VarFinder2.java
Modified:
    jena/Scratch/AFS/Dev/src-dev/opt/OptMain.java

Modified: jena/Scratch/AFS/Dev/src-dev/opt/OptMain.java
URL: 
http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/src-dev/opt/OptMain.java?rev=1543581&r1=1543580&r2=1543581&view=diff
==============================================================================
--- jena/Scratch/AFS/Dev/src-dev/opt/OptMain.java (original)
+++ jena/Scratch/AFS/Dev/src-dev/opt/OptMain.java Tue Nov 19 21:28:35 2013
@@ -18,32 +18,21 @@
 
 package opt;
 
-import static com.hp.hpl.jena.sparql.algebra.optimize.Optimize.apply ;
-
-import java.util.Set ;
-
 import org.apache.jena.atlas.lib.StrUtils ;
 
-import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.query.Query ;
 import com.hp.hpl.jena.query.QueryFactory ;
-import com.hp.hpl.jena.sparql.ARQConstants ;
-import com.hp.hpl.jena.sparql.algebra.* ;
-import com.hp.hpl.jena.sparql.algebra.op.OpJoin ;
-import com.hp.hpl.jena.sparql.algebra.op.OpLabel ;
-import com.hp.hpl.jena.sparql.algebra.optimize.* ;
-import com.hp.hpl.jena.sparql.algebra.optimize.Optimize.RewriterFactory ;
-import com.hp.hpl.jena.sparql.core.Var ;
-import com.hp.hpl.jena.sparql.engine.main.JoinClassifier ;
+import com.hp.hpl.jena.sparql.algebra.Algebra ;
+import com.hp.hpl.jena.sparql.algebra.Op ;
+import com.hp.hpl.jena.sparql.algebra.Transform ;
+import com.hp.hpl.jena.sparql.algebra.Transformer ;
+import com.hp.hpl.jena.sparql.algebra.optimize.TransformFilterPlacement ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
-import com.hp.hpl.jena.sparql.util.Context ;
 
 public class OptMain {
-    // LeftJoin - Fixed vars only (LHS) OpVars.  VarFinder.fixed(null)
-    // UNION - fixed : intersection
-    // Test - UNION
-
-    // Also TransformDistinctToReduced (JENA-585)and 
TransformOrderByDistincApplication 
+    
+    
+    // Also TransformDistinctToReduced (JENA-585) and 
TransformOrderByDistincApplication 
     
     // JENA-383 : The query optimizer generates a suboptimal query plan in 
case of nested optionals followed by a filter
 
@@ -54,125 +43,21 @@ public class OptMain {
     // Was Op.equals a good idea?
     // Calculate vars for an expr once and cache : op.getVars.
     
-    // Checking:
-    // filter-equality-13 -- scope issue for leftjoin, conditional in a 
sequence.   
-    //   Can't push in the filer to the sequence as may yield no binding -> 
need fixed vars  
-    // TestTranformFilters : 
-    //    optionalEqualitySubQuery_01 -- looks OK -- JENA-432
-    //    optionalEquality_01 JENA-383 -- WRONG - Lost RHS of conditional
-    //    optionalEqualityScope_01 -- WRONG - 
-    
-    // Double push in a sequence of conditional then BGP.
-    // JoinStartegy and FilterPlacement interaction.
-
     public static void main(String... argv) {
-        fixedVars() ; 
         placement() ;
     }
             
-    public static void fixedVars() {
-        //. FILTERs
-     // See alt VarFinder
-//        String sx = StrUtils.strjoinNL
-//            ("(union",
-//             "  (leftJoin (filter (= ?x 123) (bgp (?s ?p ?o1)))  (bgp (?s ?p 
?o2)) )",
-//             "  (leftJoin (bgp (?s ?p2 ?o1)) (bgp (?x ?p1 ?o2)) )",
-//             ")"
-//             ) ;
-        String sx = "(filter (= ?x 123) (extend (?x 567) (bgp (?s ?p ?o1)) ))" 
;
-        //Op op = SSE.parseOp("(union (bgp (?s ?p ?o1)) (bgp (?s ?p ?o2)))") ;
-        Op op = SSE.parseOp(sx) ;
-        System.out.println(op);
-        Set<Var> x = OpVarsFixed.fixed(op) ;
-        System.out.println(x) ;
-        System.exit(0) ;
-    }
-    
-    public static void testFailure() {       
-        String DIR = "/home/afs/Jena/jena-arq/testing/ARQ/OptFilterEquality" ;
-
-        arq.sparql.main(                
"--query="+DIR+"/filter-equality-13.rq", "--data="+DIR+"/data-4.ttl");
-        rewire() ;
-        arq.sparql.main(                
"--query="+DIR+"/filter-equality-13.rq", "--data="+DIR+"/data-4.ttl");
-        dewire() ;
-//        arq.sparql.main(                
"--query="+DIR+"/filter-equality-13.rq", "--data="+DIR+"/data-4.ttl");
-//        System.exit(0) ;
-
-        Query q = QueryFactory.read(DIR+"/filter-equality-13.rq") ;
-        Op op1 = Algebra.compile(q) ;
-        Op op2 = Algebra.optimize(op1) ;
-        System.out.println(op2);
-        rewire() ;
-        // Pushing filter over the (conditional) is wrong
-        // Need to look for MUST be fixed variables, which is not what OpVars. 
mentioned vars is.
-        // nor is VarFinder.fixed (but is that wrong?)
-        
-/*        
-(filter (= ?x <http://example.org/x1>)
-  (sequence
-    (conditional
-      (table unit)
-      (bgp (triple ?x <http://example.org/qq> ?o2)))
-    (bgp (triple ?x <http://example.org/p> ?o1))))
-
-Rewrite2
-(sequence
-  (filter (= ?x <http://example.org/x1>)
-    (conditional
-      (table unit)
-      (bgp (triple ?x <http://example.org/qq> ?o2))))
-  (filter (= ?x <http://example.org/x1>)
-    (bgp (triple ?x <http://example.org/p> ?o1))))
-*/
-        op2 = Algebra.optimize(op1) ;
-        System.out.println(op2);
-
-        System.exit(0) ;
-    }
-    
-    static void varFinder() {
-        if ( false )
-        {
-            Op op = SSE.parseOp("(union (bgp (?s ?p ?o1)) (bgp (?s ?p ?o2)))") 
;
-            System.out.println(op) ;
-            // ** WRONG?? Exact meaning of "defined"?
-            System.out.println(VarFinder2.fixed(op)) ;
-            System.out.println(VarFinder2.optDefined(op)) ;
-            System.exit(0) ;
-        }
-        {
-            // See alt VarFinder
-            String[] x = {
-                "(join (bgp (?s ?p ?o)) (union (bgp (?s ?p ?o)) (bgp (?s ?p 
?o1))) )",
-                "(join (bgp (?s ?p ?o)) (union (bgp (?s ?p ?z)) (bgp (?s ?p1 
?z))) )"
-            } ;
-            
-            for (String s : x ) {
-                System.out.println("--------") ;
-                Op op = SSE.parseOp(s) ;
-                System.out.println(op) ;
-                System.out.println("fixed: "+VarFinder2.fixed(op)) ;
-                System.out.println("Opt:   "+VarFinder2.optDefined(op)) ;
-                boolean nonLinear = JoinClassifier.isLinear((OpJoin)op) ;
-                System.out.println(nonLinear) ;
-            }
-            System.exit(0) ;
-        }
-    }
-    
     static void placement() {
         if ( false ) {
             //String input = "(filter (?x 123) (sequence (conditional (table 
unit) 
             String input = StrUtils.strjoinNL
                 ("(filter (= ?x <http://example/x>)",
                  "  (sequence",
-                 "    (conditional",
-                 "      (table unit)",
-                 "      (bgp (triple ?x <http://example/q> ?o)))",
+                 "    (bgp (triple ?x <http://example/p> ?o2))",
                  "    (bgp (triple ?x <http://example/p> ?o2))))"
                     ) ;
                       
-            Transform t_placement = new TransformFilterPlacement_Rewrite() ;
+            Transform t_placement = new TransformFilterPlacement() ;
             Op op1 = SSE.parseOp(input) ;
             Op op2 = op1 ;
             op2 = Algebra.optimize(op1) ;
@@ -219,30 +104,20 @@ SELECT *
                   , "    ?x :p ?o2"
                   , "}"
                     ) ;
-            
+            String qs4 = StrUtils.strjoinNL
+            ("SELECT *"
+            , "WHERE {"
+            , "    ?test ?p1 ?X." 
+            , "    FILTER ( ?test = <http://localhost/t1> )"
+            , "    { SELECT ?s1 ?test { ?test ?p2 ?o2 } }"
+            , "}") ; 
 
-            Query query = QueryFactory.create(qs3) ;
+            Query query = QueryFactory.create(qs4) ;
             Op op1 = Algebra.compile(query) ;
             System.out.println("** Input") ;
             System.out.println(op1) ;
-            { 
-                System.out.println("** OLD") ;
-                Op op2 = Algebra.optimize(op1) ;
-                System.out.println(op2) ;
-            }
-            System.out.println("** NEW : Place/Join") ;
-            rewire() ;
-            //Op op2 = new Rewrite2(ARQ.getContext()).rewrite(op1) ;
-            Op op2 = op1 ;
-            op2 = Transformer.transform(new TransformJoinStrategy(), op2) ;
-            op2 = placement(op2) ;
-            System.out.println(op2) ;
-            System.out.println("** NEW : Join/Place") ;
-            
-            op2 = op1 ;
-            op2 = placement(op2) ;
-            op2 = Transformer.transform(new TransformJoinStrategy(), op2) ;
-
+            System.out.println("** OPTIMIZE") ;
+            Op op2 = Algebra.optimize(op1) ;
             System.out.println(op2) ;
             System.exit(0) ;
         }
@@ -250,138 +125,7 @@ SELECT *
     }
     
     static Op placement(Op op) {
-        return Transformer.transform(new TransformFilterPlacement_Rewrite(), 
op) ;
-    }
-    
-    private static void rewire() {
-        Optimize.setFactory(new RewriterFactory2()); 
-    }
-    
-    private static void dewire() {
-        Optimize.setFactory(Optimize.stdOptimizationFactory) ;
-    }
-
-    static class RewriterFactory2 implements RewriterFactory {
-
-        @Override
-        public Rewrite create(Context context) {
-            return new Rewrite2(context) ;
-        }
-    }
-    
-    static class Rewrite2 implements Rewrite {
-        
-        private Context context ;
-
-        public Rewrite2(Context context) {
-            this.context = context ;
-        }
-
-        @Override
-        public Op rewrite(Op op)
-        {
-            System.out.println("Rewrite2") ;
-            Context context = ARQ.getContext() ; 
-            // Record optimizer
-            if ( context.get(ARQConstants.sysOptimizer) == null )
-                context.set(ARQConstants.sysOptimizer, this) ;
-            
-            if ( false )
-            {
-                // Removal of "group of one" join (AKA SPARQL 
"simplification") 
-                // is done during algebra generation in AlgebraGenerator
-                op = apply("Simplify", new TransformSimplify(), op) ;
-                op = apply("Delabel", new TransformRemoveLabels(), op) ;
-            }
-
-            // ** TransformScopeRename::
-            // This is a requirement for the linearization execution that the 
default
-            // ARQ query engine uses where possible.  
-            // This transformation must be done (e.g. by QueryEngineBase) if 
no other optimization is done. 
-            op = TransformScopeRename.transform(op) ;
-            
-            // Prepare expressions.
-            OpWalker.walk(op, new OpVisitorExprPrepare(context)) ;
-            
-            // Need to allow subsystems to play with this list.
-            
-            if ( context.isTrueOrUndef(ARQ.propertyFunctions) )
-                op = apply("Property Functions", new 
TransformPropertyFunction(context), op) ;
-
-            if ( context.isTrueOrUndef(ARQ.optFilterConjunction) )
-                op = apply("filter conjunctions to ExprLists", new 
TransformFilterConjunction(), op) ;
-
-            if ( context.isTrueOrUndef(ARQ.optFilterExpandOneOf) )
-                op = apply("Break up IN and NOT IN", new 
TransformExpandOneOf(), op) ;
-
-            // Either, do filter placement and other sequence generating 
transformations.
-            // or improve to place in a sequence (latter is better?)
-                    
-            if ( context.isTrueOrUndef(ARQ.optFilterImplicitJoin) )
-                op = apply("Filter Implicit Join", new 
TransformFilterImplicitJoin(), op);
-            
-            if ( context.isTrueOrUndef(ARQ.optImplicitLeftJoin) )
-                op = apply("Implicit Left Join", new 
TransformImplicitLeftJoin(), op);
-            
-            if ( context.isTrueOrUndef(ARQ.optFilterEquality) )
-            {
-                //boolean termStrings = context.isDefined(ARQ.optTermStrings) ;
-                op = apply("Filter Equality", new TransformFilterEquality(), 
op) ;
-            }
-            
-            // Can promote table empty at this point since only the implicit 
join optimizations 
-            // are currently capable of introducing it
-            if ( context.isTrueOrUndef(ARQ.optPromoteTableEmpty) )
-                op = apply("Table Empty Promotion", new 
TransformPromoteTableEmpty(), op) ;
-            
-            if ( context.isTrueOrUndef(ARQ.optFilterDisjunction) )
-                op = apply("Filter Disjunction", new 
TransformFilterDisjunction(), op) ;
-            
-            // ***** After JoinStrategy (or don't push left and right in join).
-            if ( context.isTrueOrUndef(ARQ.optFilterPlacement) )
-                // *****
-                op = apply("Filter Placement", new 
TransformFilterPlacement_Rewrite(), op) ;
-            
-
-            if ( context.isTrueOrUndef(ARQ.optTopNSorting) )
-                op = apply("TopN Sorting", new TransformTopN(), op) ;
-            
-            // ORDER BY+DISTINCT optimizations
-            // We apply the one that changes evaluation order first since when 
it does apply it will give much
-            // better performance than just transforming DISTINCT to REDUCED
-            
-            if ( context.isTrueOrUndef(ARQ.optOrderByDistinctApplication) )
-                op = apply("Apply DISTINCT prior to ORDER BY where possible", 
new TransformOrderByDistinctAppplication(), op);
-
-            // Transform some DISTINCT to REDUCED, slightly more liberal 
transform that ORDER BY+DISTINCT application
-            // but doesn't improve performance as much though should keep 
memory usage down
-            if ( context.isTrueOrUndef(ARQ.optDistinctToReduced) )
-                op = apply("Distinct replaced with reduced", new 
TransformDistinctToReduced(), op) ;
-            
-            // Convert paths to triple patterns. 
-            // Also done in the AlgebraGenerator so this transform step 
catches programmatically built op expressions 
-            op = apply("Path flattening", new TransformPathFlattern(), op) ;
-            
-            // Find joins/leftJoin that can be done by index joins (generally 
preferred as fixed memory overhead).
-            if ( context.isTrueOrUndef(ARQ.optIndexJoinStrategy) )
-                op = apply("Index Join strategy", new TransformJoinStrategy(), 
op) ;
-            
-//            // ***** After JoinStrategy (or don't push left and right in 
join).
-//            if ( context.isTrueOrUndef(ARQ.optFilterPlacement) )
-//                // *****
-//                op = apply("Filter Placement", new 
TransformFilterPlacement_Rewrite(), op) ;
-            
-            // Merge adjacent BGPs
-            if ( context.isTrueOrUndef(ARQ.optMergeBGPs) )
-                op = apply("Merge BGPs", new TransformMergeBGPs(), op) ;
-            
-            // Mark
-            if ( false )
-                op = OpLabel.create("Transformed", op) ;
-            return op ;
-        }
-
-        
+        return Transformer.transform(new TransformFilterPlacement(), op) ;
     }
     
 }


Reply via email to