You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/06/21 11:21:36 UTC

[2/3] jena git commit: JENA-1198: Handling placement through property functions.

JENA-1198: Handling placement through property functions.


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

Branch: refs/heads/master
Commit: e16531f87bc38f3127a6afac683d6f5511fb847b
Parents: 53db4e5
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jun 21 12:06:23 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jun 21 12:06:23 2016 +0100

----------------------------------------------------------------------
 .../optimize/TransformFilterPlacement.java      | 40 +++++++++++---------
 1 file changed, 23 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/e16531f8/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
index 973c758..3384e08 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
@@ -79,7 +79,7 @@ public class TransformFilterPlacement extends TransformCopy {
     
     private static Placement result(Op op, ExprList remaining) { 
         if ( op == null )
-            return null ;
+            return noChangePlacement ;
         return new Placement(op, remaining) ; 
     }
     
@@ -88,7 +88,11 @@ public class TransformFilterPlacement extends TransformCopy {
     }
     
     private boolean isNoChange(Placement placement) { 
-        return placement == noChangePlacement ;
+        return ! isChange(placement) ;
+    }
+
+    private boolean isChange(Placement placement) { 
+        return placement != noChangePlacement ;
     }
 
     /** Apply filter placement to a BGP */
@@ -157,7 +161,7 @@ public class TransformFilterPlacement extends TransformCopy {
         }
         
         Placement placement = transform(exprs, x) ;
-        if ( placement == null )  
+        if ( isNoChange(placement) )  
             // Didn't do anything.
             return super.transform(opFilter, x) ;
         Op op = buildFilter(placement) ;
@@ -170,7 +174,7 @@ public class TransformFilterPlacement extends TransformCopy {
     /** Transform and always at least wrap the op with the exprs */
     private Op transformOpAlways(ExprList exprs, Op x) {
         Placement placement = transform(exprs, x) ;
-        if ( placement == null )
+        if ( isNoChange(placement) )
             return buildFilter(exprs, x) ;
         return buildFilter(placement) ;
     }
@@ -246,7 +250,7 @@ public class TransformFilterPlacement extends TransformCopy {
 
         // Outer
         Placement p = transform(exprsOuter, input.getSubOp()) ;
-        if ( p != null ) {
+        if ( isChange(p) ) {
             op = p.op ;
             exprsOuter = p.unplaced ;
         }
@@ -316,10 +320,11 @@ public class TransformFilterPlacement extends TransformCopy {
         }
         
         // Can't push anything into a filter around this BGP
-        if (pushed.size() == 0) return null;
-        
+        if (pushed.size() == 0) 
+            return noChangePlacement ;
         // Safe to place some conditions around the BGP
-        return new Placement(OpFilter.filter(pushed, new OpBGP(pattern)), unpushed);
+        Op opx = OpFilter.filter(pushed, new OpBGP(pattern)) ;
+        return result(opx, unpushed);
 
     }
 
@@ -450,6 +455,8 @@ public class TransformFilterPlacement extends TransformCopy {
         }
         if ( ! exprListPlaceable.isEmpty() ) {
             Placement p = transform(exprListPlaceable, op.getSubOp()) ;
+            if ( isNoChange(p) )
+                return resultNoChange(op);
             Op newOp = op.copy(p.op) ;
             p.unplaced.addAll(exprListRetain);
             return result(newOp, p.unplaced) ;
@@ -480,8 +487,7 @@ public class TransformFilterPlacement extends TransformCopy {
             op = insertAnyFilter$( exprs, varScope, op );
             Op seqElt = op1;
             Placement p = transform( exprs, seqElt );
-            if ( p != null )
-            {
+            if ( isChange(p) ) {
                 exprs = p.unplaced;
                 seqElt = p.op;
             }
@@ -560,7 +566,7 @@ public class TransformFilterPlacement extends TransformCopy {
         Op left = opConditional.getLeft() ;
         Op right = opConditional.getRight() ;
         Placement nLeft = transform(exprs, left) ;
-        if ( nLeft == null )
+        if ( isNoChange(nLeft) )
             return result(opConditional, exprs) ;
         Op op = new OpConditional(nLeft.op, right) ;
         return result(op, nLeft.unplaced) ;
@@ -571,7 +577,7 @@ public class TransformFilterPlacement extends TransformCopy {
         Op left = opLeftJoin.getLeft() ;
         Op right = opLeftJoin.getRight() ;
         Placement nLeft = transform(exprs, left) ;
-        if ( nLeft == null )
+        if ( isNoChange(nLeft) )
             return result(opLeftJoin, exprs) ;
         Op op = OpLeftJoin.create(nLeft.op, right, opLeftJoin.getExprs()) ;
         return result(op, nLeft.unplaced) ;
@@ -622,8 +628,8 @@ public class TransformFilterPlacement extends TransformCopy {
         ExprList exprs2 = null ;
         
         for ( Expr expr : exprs ) {
-            boolean unplacedLeft =  ( pLeft == null  || pLeft.unplaced.getList().contains(expr) ) ;
-            boolean unplacedRight = ( pRight == null || pRight.unplaced.getList().contains(expr) ) ;
+            boolean unplacedLeft =  ( isNoChange(pLeft)  || pLeft.unplaced.getList().contains(expr) ) ;
+            boolean unplacedRight = ( isNoChange(pRight) || pRight.unplaced.getList().contains(expr) ) ;
             
 //            if ( unplacedLeft && unplacedRight ) {
 //                System.out.println("Unplaced:     "+expr) ;
@@ -678,7 +684,7 @@ public class TransformFilterPlacement extends TransformCopy {
         // Case 1 : Do as much inner placement as possible.
         ExprList remaining = exprs ;
         Placement p = transform(exprs, input.getSubOp()) ;
-        if ( p != null ) {
+        if ( isChange(p) ) {
             subOp = p.op ;
             remaining = p.unplaced ;
         }
@@ -740,7 +746,7 @@ public class TransformFilterPlacement extends TransformCopy {
     private Placement processSubOp1(ExprList pushed, ExprList unpushed, Op1 input) {
         Op opSub = input.getSubOp() ;
         Placement subPlacement = transform(pushed, opSub) ;
-        if ( subPlacement == null ) {
+        if ( isNoChange(subPlacement) ) {
             // (Same as if a placement of the exprlist and op passed in is given).
             // Didn't make any changes below, so add a filter for the 'pushed' and
             // return a placement for the unpushed. 
@@ -761,7 +767,7 @@ public class TransformFilterPlacement extends TransformCopy {
         Op subOp = input.getSubOp() ;
         Placement p = transform(exprs, subOp) ;
 
-        if ( p == null )
+        if ( isNoChange(p) )
             // No effect - we do not manage to make a change.
             return resultNoChange(input) ;