Author: claude
Date: Sun Nov 24 13:18:06 2013
New Revision: 1544967

URL: http://svn.apache.org/r1544967
Log:
Fixes issue with  JENA-595

Modified:
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
    
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java?rev=1544967&r1=1544966&r2=1544967&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
 (original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
 Sun Nov 24 13:18:06 2013
@@ -432,7 +432,18 @@ public class TransformFilterPlacement ex
             Op op2 = input.copy(op1) ; //, input.getVarExprList()) ; 
//OpExtend.extend(op1, input.getVarExprList()) ;
             return result(op2, unpushed) ;
         }
-        Op op1 = OpFilter.filter(p.unplaced, p.op) ;
+        // handle the case where the filter is being to a surrounding sequence 
or other bgp container 
+        // and may apply to the assignation variables.
+        // in this case disjoint var sets indicate the expression is unused.
+        pushed = new ExprList() ;
+        for ( Expr expr : p.unplaced ) {
+            Set<Var> exprVars = expr.getVarsMentioned() ;
+            if ( disjoint(vars1, exprVars) )
+                unpushed.add(expr);
+            else
+                pushed.add(expr) ;
+        }
+        Op op1 = OpFilter.filter(pushed, p.op) ;
         Op op2 = input.copy(op1) ;
         return result(op2, unpushed) ;
     }

Modified: 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java?rev=1544967&r1=1544966&r2=1544967&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
 (original)
+++ 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
 Sun Nov 24 13:18:06 2013
@@ -123,6 +123,15 @@ public class TestTransformFilterPlacemen
         test("(sequence (bgp (?s ?p ?x)) (filter (= ?z 123) (bgp (?s ?p ?z))) 
)",
              null) ;
     }
+    
+    @Test public void place_sequence_with_bind() {
+       test("(filter (= ?foo 1) " +
+                       "(sequence  " +
+                               "(extend " +
+                               "       ((?bound (if ?v_binder 'Y' 'N'))) " +
+                               "       (bgp (triple ?foob 
<http://example.com/binding> ?v_binder)))" +
+                               "(bgp (triple ?foob 
<http://www.w3.org/2000/01/rdf-schema#label> ?foo))))", null );
+    }
 
     // Join : one sided push.
     @Test public void place_join_01() {


Reply via email to