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/08 16:12:03 UTC
[5/7] jena git commit: Add additional test cases for inlining
(JENA-780)
Add additional test cases for inlining (JENA-780)
Adds some more test cases which checks behaviour with inlining through
projections which is possible if the assignment is projected and we're
in a stack of unary operators
Conflicts:
jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/2031b78f
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/2031b78f
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/2031b78f
Branch: refs/heads/master
Commit: 2031b78fdc160e21ca56a60e9434c5c74b608cae
Parents: d0d7664
Author: Rob Vesse <rv...@apache.org>
Authored: Tue Jul 7 17:47:08 2015 +0100
Committer: Rob Vesse <rv...@apache.org>
Committed: Wed Jul 8 15:07:46 2015 +0100
----------------------------------------------------------------------
.../optimize/TransformRemoveAssignment.java | 13 +++++
.../TestTransformEliminateAssignments.java | 52 ++++++++++++++++++++
2 files changed, 65 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/2031b78f/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java
index 564d3b3..833de93 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformRemoveAssignment.java
@@ -113,4 +113,17 @@ public class TransformRemoveAssignment extends TransformCopy {
}
}
+ public Op transform(OpProject opProject, Op subOp) {
+ if (!opProject.getVars().contains(this.var))
+ return super.transform(opProject, subOp);
+
+ List<Var> newVars = opProject.getVars();
+ newVars.remove(this.var);
+ if (newVars.size() > 0) {
+ return new OpProject(subOp, newVars);
+ } else {
+ return subOp;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jena/blob/2031b78f/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java
index 117bd32..13e9c7e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java
@@ -382,6 +382,58 @@ public class TestTransformEliminateAssignments {
}
@Test
+ public void through_project_01() {
+ // We can inline out through a project by also eliminating the variable
+ // from the project
+ //@formatter:off
+ test(StrUtils.strjoinNL("(project (?y)",
+ " (filter (exprlist ?x)",
+ " (project (?x)",
+ " (extend (?x true)",
+ " (table unit)))))"),
+ "(project (?y)",
+ " (filter true",
+ " (table unit)))");
+ //@formatter:on
+ }
+
+ @Test
+ public void through_project_02() {
+ // We can inline out through a project by also eliminating the variable
+ // from the project
+ //@formatter:off
+ test(StrUtils.strjoinNL("(project (?y)",
+ " (filter (exprlist ?x)",
+ " (project (?x ?y)",
+ " (extend (?x true)",
+ " (bgp (triple ?y <urn:pred> <urn:obj>))))))"),
+ "(project (?y)",
+ " (filter true",
+ " (project (?y)",
+ " (bgp (triple ?y <urn:pred> <urn:obj>)))))");
+ //@formatter:on
+ }
+
+ @Test
+ public void through_project_03() {
+ // We can't inline out through a project if the assignment is not
+ // projected
+ // However we can still eliminate it from the inner projection if that
+ // would render it unused
+ //@formatter:off
+ test(StrUtils.strjoinNL("(project (?y)",
+ " (filter (exprlist ?x)",
+ " (project (?y)",
+ " (extend (?x true)",
+ " (table unit)))))"),
+ "(project (?y)",
+ " (filter (exprlist ?x)",
+ " (project (?y)",
+ " (table unit))))");
+ //@formatter:on
+ }
+
+ @Test
public void no_merge_01() {
// We should not merge extends
//@formatter:off