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/12 18:48:19 UTC

[1/2] jena git commit: Don't inline assignments in some unsafe cases (JENA-780)

Repository: jena
Updated Branches:
  refs/heads/master 80dbb451f -> de3222d42


Don't inline assignments in some unsafe cases (JENA-780)

There are some cases where inlining is unsafe around moving an
assignment from within an n-ary expression e.g. join, leftjoin, union,
minus etc because the assignments value could be dependent on the branch
of the query it occurs in and moving it outside the branching operator
could change the semantics of its evaluation.

This commit disables inlining in those cases and adds extra test cases
to ensure that those cases are not subject to inlining.

Conflicts:
	jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java


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

Branch: refs/heads/master
Commit: 310b0968d3c8a19dee4e1c28c96d8a4fbe08794e
Parents: 833bc70
Author: Rob Vesse <rv...@apache.org>
Authored: Tue Jul 7 17:28:14 2015 +0100
Committer: Rob Vesse <rv...@apache.org>
Committed: Wed Jul 8 15:18:31 2015 +0100

----------------------------------------------------------------------
 .../optimize/TransformEliminateAssignments.java | 26 +++++---
 .../algebra/optimize/VariableUsageVisitor.java  |  8 ++-
 .../TestTransformEliminateAssignments.java      | 65 +++++++++++++++++++-
 3 files changed, 83 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/310b0968/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
index 818434b..d1d4135 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
@@ -28,28 +28,38 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.jena.atlas.lib.CollectionUtils;
-
 import org.apache.jena.query.SortCondition;
+import org.apache.jena.sparql.ARQInternalErrorException;
 import org.apache.jena.sparql.algebra.Op;
 import org.apache.jena.sparql.algebra.OpVisitor;
 import org.apache.jena.sparql.algebra.OpVisitorBase;
 import org.apache.jena.sparql.algebra.Transform;
 import org.apache.jena.sparql.algebra.TransformCopy;
 import org.apache.jena.sparql.algebra.Transformer;
+import org.apache.jena.sparql.algebra.op.OpDistinct;
 import org.apache.jena.sparql.algebra.op.OpExt;
 import org.apache.jena.sparql.algebra.op.OpExtend;
 import org.apache.jena.sparql.algebra.op.OpFilter;
 import org.apache.jena.sparql.algebra.op.OpGroup;
+import org.apache.jena.sparql.algebra.op.OpJoin;
+import org.apache.jena.sparql.algebra.op.OpLeftJoin;
+import org.apache.jena.sparql.algebra.op.OpMinus;
 import org.apache.jena.sparql.algebra.op.OpOrder;
 import org.apache.jena.sparql.algebra.op.OpProject;
+import org.apache.jena.sparql.algebra.op.OpReduced;
 import org.apache.jena.sparql.algebra.op.OpTopN;
+import org.apache.jena.sparql.algebra.op.OpUnion;
 import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.core.VarExprList;
+import org.apache.jena.sparql.expr.E_Exists;
+import org.apache.jena.sparql.expr.E_NotExists;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.expr.ExprAggregator;
+import org.apache.jena.sparql.expr.ExprFunctionOp;
 import org.apache.jena.sparql.expr.ExprLib;
 import org.apache.jena.sparql.expr.ExprList;
 import org.apache.jena.sparql.expr.ExprTransform;
+import org.apache.jena.sparql.expr.ExprTransformCopy;
 import org.apache.jena.sparql.expr.ExprTransformSubstitute;
 import org.apache.jena.sparql.expr.ExprTransformer;
 import org.apache.jena.sparql.expr.ExprVars;
@@ -562,12 +572,15 @@ public class TransformEliminateAssignments extends TransformCopy {
             this.tracker.decrementDepth();
         }
 
-<<<<<<< HEAD:jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
-=======
         @Override
         public void visit(OpUnion opUnion) {
             unsafe();
         }
+        
+        @Override
+        public void visit(OpJoin opJoin) {
+            unsafe();
+        }
 
         @Override
         public void visit(OpLeftJoin opLeftJoin) {
@@ -583,11 +596,6 @@ public class TransformEliminateAssignments extends TransformCopy {
         }
 
         @Override
-        public void visit(OpJoin opJoin) {
-            unsafe();
-        }
-
-        @Override
         public void visit(OpDistinct opDistinct) {
             // Inlining out through the distinct might change the results of the
             // distinct
@@ -607,7 +615,6 @@ public class TransformEliminateAssignments extends TransformCopy {
             // inlining could change the semantics
             tracker.getAssignments().clear();
         }
->>>>>>> 67bb248... Additional tests and fixes for assignment inlining (JENA-780):jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
     }
 
     /**
@@ -645,6 +652,5 @@ public class TransformEliminateAssignments extends TransformCopy {
                 return new E_NotExists(opArg2);
             throw new ARQInternalErrorException("Unrecognized ExprFunctionOp: \n" + funcOp);
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/310b0968/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/VariableUsageVisitor.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/VariableUsageVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/VariableUsageVisitor.java
index 3a86dc9..3a45f3c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/VariableUsageVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/VariableUsageVisitor.java
@@ -64,7 +64,7 @@ public abstract class VariableUsageVisitor extends OpVisitorBase {
     protected abstract void action(Var var);
 
     protected abstract void action(String var);
-    
+
     @Override
     public void visit(OpBGP opBGP) {
         Collection<Var> vars = new ArrayList<>();
@@ -115,8 +115,10 @@ public abstract class VariableUsageVisitor extends OpVisitorBase {
     @Override
     public void visit(OpLeftJoin opLeftJoin) {
         Collection<Var> vars = new ArrayList<>();
-        for (Expr expr : opLeftJoin.getExprs().getList()) {
-            ExprVars.varsMentioned(vars, expr);
+        if (opLeftJoin.getExprs() != null) {
+            for (Expr expr : opLeftJoin.getExprs().getList()) {
+                ExprVars.varsMentioned(vars, expr);
+            }
         }
         action(vars);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/310b0968/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 4c6c7f2..4ca5495 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
@@ -146,7 +146,7 @@ public class TestTransformEliminateAssignments {
              "    (table unit)))");
         //@formatter:on
     }
-    
+
     @Test
     public void extend_02() {
         // Assigned variable used only once can substitute expression for the
@@ -162,7 +162,7 @@ public class TestTransformEliminateAssignments {
              "    (table unit)))");
         //@formatter:on
     }
-    
+
     @Test
     public void extend_03() {
         // Assigned variable used only once can substitute expression for the
@@ -380,7 +380,66 @@ public class TestTransformEliminateAssignments {
                      "      (bgp (triple ?x ?y ?z)))))");
         //@formatter:on
     }
-    
+
+    @Test
+    public void ineligible_05() {
+        // Don't inline if we'd move it from within a n-ary operator as doing so
+        // may change the queries semantics
+        //@formatter:off
+        testNoChange("(project (?s)",
+                    "  (filter (exprlist ?x)",
+                    "    (union",
+                    "      (bgp (triple ?s ?p ?o))",
+                    "      (extend (?x true)",
+                    "        (table unit)))))");
+        //@formatter:on
+    }
+
+    @Test
+    public void ineligible_06() {
+        // Don't inline if we'd move it from within a n-ary operator as doing so
+        // may change the queries semantics
+        //@formatter:off
+        testNoChange("(project (?s)",
+                    "  (filter (exprlist ?x)",
+                    "    (leftjoin",
+                    "      (bgp (triple ?s ?p ?o))",
+                    "      (extend (?x true)",
+                    "        (table unit)))))");
+        //@formatter:on
+    }
+
+    @Test
+    public void ineligible_07() {
+        // Don't inline if we'd move it from within a n-ary operator as doing so
+        // may change the queries semantics
+        //@formatter:off
+        testNoChange("(project (?s)",
+                    "  (filter (exprlist ?x)",
+                    "    (minus",
+                    "      (bgp (triple ?s ?p ?o))",
+                    "      (extend (?x true)",
+                    "        (table unit)))))");
+        //@formatter:on
+    }
+
+    @Test
+    public void ineligible_08() {
+        // Don't inline if we'd move it from within a n-ary operator as doing so
+        // may change the queries semantics
+        // Technically a trivial case like this is probably safe to inline but
+        // the reality is that the assignment expression may depend on the
+        // behaviour of one branch and so it is safer to not inline
+        //@formatter:off
+        testNoChange("(project (?s)",
+                    "  (filter (exprlist ?x)",
+                    "    (join",
+                    "      (bgp (triple ?s ?p ?o))",
+                    "      (extend (?x true)",
+                    "        (table unit)))))");
+        //@formatter:on
+    }
+
     @Test
     public void ineligible_09() {
         // We can't inline if the assignment will be projected out


[2/2] jena git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena

Posted by rv...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena

Conflicts:
	jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java


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

Branch: refs/heads/master
Commit: de3222d425b7a7f04e820e909d7c17e65f6e6065
Parents: 310b096 80dbb45
Author: Rob Vesse <rv...@apache.org>
Authored: Sun Jul 12 18:31:50 2015 +0200
Committer: Rob Vesse <rv...@apache.org>
Committed: Sun Jul 12 18:31:50 2015 +0200

----------------------------------------------------------------------
 .../optimize/TransformEliminateAssignments.java |  64 ++-------
 .../optimize/TransformRemoveAssignment.java     |   2 +-
 .../org/apache/jena/sparql/expr/ExprVars.java   |   5 +-
 .../TestTransformEliminateAssignments.java      |   2 +-
 jena-core/pom.xml                               |  21 ++-
 .../apache/jena/fuseki/build/FusekiConfig.java  |  45 +++---
 .../apache/jena/fuseki/mgt/ActionDatasets.java  | 136 +++++++++++++++++--
 .../java/org/apache/jena/fuseki/ServerTest.java |   2 +
 .../java/org/apache/jena/fuseki/TestAdmin.java  |  61 ++++-----
 jena-parent/pom.xml                             |   4 +-
 10 files changed, 213 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/de3222d4/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformEliminateAssignments.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/jena/blob/de3222d4/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformEliminateAssignments.java
----------------------------------------------------------------------