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