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 2011/07/14 10:44:17 UTC

svn commit: r1146601 - in /incubator/jena/Jena2/ARQ/trunk: ./ src-dev/dev/ src-test/com/hp/hpl/jena/sparql/algebra/optimize/ src/com/hp/hpl/jena/sparql/engine/ src/com/hp/hpl/jena/sparql/graph/ src/com/hp/hpl/jena/sparql/sse/builders/

Author: andy
Date: Thu Jul 14 08:44:16 2011
New Revision: 1146601

URL: http://svn.apache.org/viewvc?rev=1146601&view=rev
Log:
Bug fix: Expressions in LeftJoin in sub-SELECT were not rewritten correctly.

Added:
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java   (contents, props changed)
      - copied, changed from r1145056, incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenamerVars.java
Removed:
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenamerVars.java
Modified:
    incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt
    incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java
    incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestVarRename.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/VarRename.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/graph/NodeTransformOp.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java

Modified: incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt (original)
+++ incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt Thu Jul 14 08:44:16 2011
@@ -3,7 +3,7 @@ ChangeLog for ARQ
 
 ==== ARQ 2.8.10
 
-+ Bug fix: ORDER BY in sub-selects didn't work if ordering by non-SELECT variables.
++ Bug fix: ORDER BY and FILTERs in sub-selects didn't work if ordering by non-SELECT variables.
 + Bug fix: Equality of algebra operator (order) wasn't checkign all aspects of the op.
 + Bug fix: SUM and AVG over errors didn't generate an error as they should do.
 

Modified: incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java Thu Jul 14 08:44:16 2011
@@ -128,7 +128,7 @@ public class RunARQ
     public static void main(String[] argv) throws Exception
     {
         //arq.sparql.main("--data=D.ttl", "--query=Q.rq") ;
-        arq.qparse.main("--query=testing/ARQ/SubQuery/sub-select-03.rq", "--print=opt") ;
+        arq.qparse.main("--query=Q.rq", "--print=opt") ;
         exit(0) ;
         
         

Modified: incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestVarRename.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestVarRename.java?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestVarRename.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestVarRename.java Thu Jul 14 08:44:16 2011
@@ -59,6 +59,12 @@ public class TestVarRename extends BaseT
                                            "(project (?s) (order (?s ?/p) (bgp (?s ?/p ?/o))))",
                                            true,
                                            "s") ; }
+    
+    @Test public void rename_12() { rename("(leftjoin (bgp (?s ?p ?o)) (bgp (?s ?p ?o1)) () )",
+                                           "(leftjoin (bgp (?s ?/p ?o)) (bgp (?s ?/p ?/o1)) () )",
+                                           true,
+                                           "s", "o") ; }
+    
 
     @Test public void rename_reverse_01() { reverse("(project (?s ?/p) (bgp (?s ?/p ?/o)))",
                                                     "(project (?s ?p) (bgp (?s ?p ?o)))", true ) ; }  

Copied: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java (from r1145056, incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenamerVars.java)
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java?p2=incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java&p1=incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenamerVars.java&r1=1145056&r2=1146601&rev=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenamerVars.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java Thu Jul 14 08:44:16 2011
@@ -14,13 +14,13 @@ import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.sparql.core.Var ;
 import com.hp.hpl.jena.sparql.graph.NodeTransform ;
 
-public class RenamerVars implements NodeTransform
+public class RenameVars implements NodeTransform
 {
     private final Map<Var, Var> aliases = new HashMap<Var, Var>() ;
     private final Collection<Var> constants ;
     private final String varPrefix ;
     
-    public RenamerVars(Collection<Var> constants, String varPrefix)
+    public RenameVars(Collection<Var> constants, String varPrefix)
     {
         this.constants = constants ;
         this.varPrefix = varPrefix ;

Propchange: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/RenameVars.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/VarRename.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/VarRename.java?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/VarRename.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/engine/VarRename.java Thu Jul 14 08:44:16 2011
@@ -28,19 +28,19 @@ public class VarRename
     /** Rename all variables in a pattern, EXCEPT for those named as constant */ 
     public static Op rename(Op op, Collection<Var> constants)
     {
-        return NodeTransformLib.transform(new RenamerVars(constants, prefix), op) ;
+        return NodeTransformLib.transform(new RenameVars(constants, prefix), op) ;
     }
 
     /** Rename all variables in an expression, EXCEPT for those named as constant */ 
     public static ExprList rename(ExprList exprList, Set<Var> constants)
     {
-        NodeTransform renamer = new RenamerVars(constants, prefix) ;
+        NodeTransform renamer = new RenameVars(constants, prefix) ;
         return NodeTransformLib.transform(renamer, exprList) ;
     }
         
     public static Expr rename(Expr expr, Set<Var> constants)
     {
-        NodeTransform renamer = new RenamerVars(constants, prefix) ;
+        NodeTransform renamer = new RenameVars(constants, prefix) ;
         return NodeTransformLib.transform(renamer, expr) ;
     }
     

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/graph/NodeTransformOp.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/graph/NodeTransformOp.java?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/graph/NodeTransformOp.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/graph/NodeTransformOp.java Thu Jul 14 08:44:16 2011
@@ -22,6 +22,7 @@ import com.hp.hpl.jena.sparql.algebra.op
 import com.hp.hpl.jena.sparql.algebra.op.OpFilter ;
 import com.hp.hpl.jena.sparql.algebra.op.OpGraph ;
 import com.hp.hpl.jena.sparql.algebra.op.OpGroup ;
+import com.hp.hpl.jena.sparql.algebra.op.OpLeftJoin ;
 import com.hp.hpl.jena.sparql.algebra.op.OpOrder ;
 import com.hp.hpl.jena.sparql.algebra.op.OpPath ;
 import com.hp.hpl.jena.sparql.algebra.op.OpProject ;
@@ -38,6 +39,17 @@ import com.hp.hpl.jena.sparql.path.Path 
 
 class NodeTransformOp extends TransformCopy
 {
+    // This finds everywhere that node can lurk in an alegra expression:
+    //   BGPs, paths, triples, quads
+    //   GRAPH, GRAPH{} (DatasetNames)
+    //   Filters, including inside EXISTS and expressions in LeftJoin
+    //   OrderBy, GroupBy
+    //   Extend, Assign
+    //   Tables
+    //   Projects
+    // Not:
+    //   Conditional (no expression)
+    
     private final NodeTransform transform ;
     NodeTransformOp(NodeTransform transform)
     {
@@ -131,6 +143,19 @@ class NodeTransformOp extends TransformC
         //return null ;
     }
     
+    @Override public Op transform(OpLeftJoin opLeftJoin, Op left, Op right)
+    {
+        ExprList exprList = opLeftJoin.getExprs() ;
+        ExprList exprList2 = exprList ;
+        if ( exprList != null )
+            exprList2 = NodeTransformLib.transform(transform, exprList) ;
+        if ( exprList2 == exprList )
+            return super.transform(opLeftJoin, left, right) ;
+        return OpLeftJoin.create(left, right, exprList2) ;
+    }
+    
+    // Not OpConditional - no expression.
+    
     @Override public Op transform(OpProject opProject, Op subOp)
     { 
         List<Var> x = opProject.getVars() ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java?rev=1146601&r1=1146600&r2=1146601&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java Thu Jul 14 08:44:16 2011
@@ -341,8 +341,15 @@ public class BuilderOp
             Op left = build(list, 1) ;
             Op right  = build(list, 2) ;
             Expr expr = null ;
-            if ( list.size() == 4 ) 
-                expr = buildExpr(list.get(3)) ;
+            if ( list.size() == 4 )
+            {
+                Item exprItem = list.get(3) ;
+                // Allow empty 
+                if ( exprItem.isList() && exprItem.getList().isEmpty() )
+                {}
+                else
+                    expr = buildExpr(exprItem) ;
+            }
             Op op = OpLeftJoin.create(left, right, expr) ;
             return op ;
         }