You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2015/07/06 17:22:25 UTC

jena git commit: Some clean up of assignment inlining/elimination (JENA-780)

Repository: jena
Updated Branches:
  refs/heads/eliminate-assignments d6f516dec -> 39e4fd590


Some clean up of assignment inlining/elimination (JENA-780)

- Add context keys to control it as part of standard optimizer (disabled
  by default)
- When applying it don't apply inside of SERVICE


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/39e4fd59
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/39e4fd59
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/39e4fd59

Branch: refs/heads/eliminate-assignments
Commit: 39e4fd590d4b859d8cf416bb928b54b749471483
Parents: d6f516d
Author: Rob Vesse <rv...@apache.org>
Authored: Mon Jul 6 16:01:55 2015 +0100
Committer: Rob Vesse <rv...@apache.org>
Committed: Mon Jul 6 16:01:55 2015 +0100

----------------------------------------------------------------------
 jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java   | 12 ++++++++++++
 .../hp/hpl/jena/sparql/algebra/optimize/Optimize.java   |  4 ++++
 .../algebra/optimize/TransformEliminateAssignments.java |  5 +++--
 3 files changed, 19 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/39e4fd59/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java b/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
index 5262c7e..3ebe3bc 100644
--- a/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
@@ -403,6 +403,18 @@ public class ARQ
     public static final Symbol optIndexJoinStrategy = ARQConstants.allocSymbol("optIndexJoinStrategy");
     
     /**
+     * Context key controlling whether the standard optimizer applies optimizations where by some
+     * assignments may be eliminated/inlined into the operators where their values are used only once
+     */
+    public static final Symbol optInlineAssignments = ARQConstants.allocSymbol("optInlineAssignments");
+    
+    /**
+     * Context key controlling whether the standard optimizer aggressively inlines assignments whose
+     * values are used only once into operators where those expressions may be evaluated multiple times e.g. order
+     */
+    public static final Symbol optInlineAssignmentsAggressive = ARQConstants.allocSymbol("optInlineAssignmentsAggressive");
+    
+    /**
      * Context key controlling whether the standard optimizater applies optimizations to joined BGPs to
      * merge them into single BGPs.
      * By default, this transformation is applied.

http://git-wip-us.apache.org/repos/asf/jena/blob/39e4fd59/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
index 150e122..180bfd4 100644
--- a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
+++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
@@ -236,6 +236,10 @@ public class Optimize implements Rewrite
         if ( context.isTrue(ARQ.optFilterInequality) )
             op = apply("Filter Inequality", new TransformFilterInequality(), op);
         
+        // Eliminate/Inline assignments where possible
+        if ( context.isTrue(ARQ.optInlineAssignments) )
+            op = TransformEliminateAssignments.eliminate(op, context.isTrue(ARQ.optInlineAssignmentsAggressive));
+        
         // Promote table empty as late as possible since this will only be produced by other 
         // optimizations and never directly from algebra generation
         if ( context.isTrueOrUndef(ARQ.optPromoteTableEmpty) )

http://git-wip-us.apache.org/repos/asf/jena/blob/39e4fd59/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
index 59e77c2..c468272 100644
--- a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
+++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
@@ -78,7 +78,8 @@ import com.hp.hpl.jena.sparql.expr.NodeValue;
  * <ul>
  * <li>Filter Expressions</li>
  * <li>Bind and Select Expressions</li>
- * <li>Order By Expressions if aggressive in-lining is enabled</li>
+ * <li>Order By Expressions if aggressive in-lining is enabled or the assigned
+ * expression is a constant</li>
  * </ul>
  * <p>
  * In the case of order by we only in-line assignments when aggressive mode is
@@ -99,7 +100,7 @@ public class TransformEliminateAssignments extends TransformCopy {
         AssignmentPopper popper = new AssignmentPopper(tracker);
         Transform transform = new TransformEliminateAssignments(tracker, pusher, popper, aggressive);
 
-        return Transformer.transform(transform, op, pusher, popper);
+        return Transformer.transformSkipService(transform, op, pusher, popper);
     }
 
     private final OpVisitor before, after;