Return-Path: X-Original-To: apmail-jena-commits-archive@www.apache.org Delivered-To: apmail-jena-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id ED3131840C for ; Tue, 7 Jul 2015 09:24:06 +0000 (UTC) Received: (qmail 89747 invoked by uid 500); 7 Jul 2015 09:24:06 -0000 Delivered-To: apmail-jena-commits-archive@jena.apache.org Received: (qmail 89685 invoked by uid 500); 7 Jul 2015 09:24:06 -0000 Mailing-List: contact commits-help@jena.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jena.apache.org Delivered-To: mailing list commits@jena.apache.org Received: (qmail 89396 invoked by uid 99); 7 Jul 2015 09:24:06 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Jul 2015 09:24:06 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 613F0E3AA7; Tue, 7 Jul 2015 09:24:06 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: rvesse@apache.org To: commits@jena.apache.org Date: Tue, 07 Jul 2015 09:24:22 -0000 Message-Id: <1cdde77c993a4f2f915a25f2b4f389da@git.apache.org> In-Reply-To: <17a0dde198cb419f8f56423c221dd0ee@git.apache.org> References: <17a0dde198cb419f8f56423c221dd0ee@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [17/26] jena git commit: Some clean up of assignment inlining/elimination (JENA-780) 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/jena2 Commit: 39e4fd590d4b859d8cf416bb928b54b749471483 Parents: d6f516d Author: Rob Vesse Authored: Mon Jul 6 16:01:55 2015 +0100 Committer: Rob Vesse 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; *
    *
  • Filter Expressions
  • *
  • Bind and Select Expressions
  • - *
  • Order By Expressions if aggressive in-lining is enabled
  • + *
  • Order By Expressions if aggressive in-lining is enabled or the assigned + * expression is a constant
  • *
*

* 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;