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 2013/03/22 12:33:32 UTC

svn commit: r1459732 - in /jena/trunk/jena-arq/src: main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java

Author: andy
Date: Fri Mar 22 11:33:31 2013
New Revision: 1459732

URL: http://svn.apache.org/r1459732
Log:
JENA-419

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java?rev=1459732&r1=1459731&r2=1459732&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java Fri Mar 22 11:33:31 2013
@@ -148,7 +148,10 @@ public class SyntaxVarScope
         if ( query.hasGroupBy() )
         {
             VarExprList groupKey = query.getGroupBy() ;
-            List<Var> groupVars = groupKey.getVars() ;
+            
+            // Copy - we need to add variables
+            // SELECT (count(*) AS ?C)  (?C+1 as ?D) 
+            List<Var> inScopeVars = new ArrayList<Var>(groupKey.getVars()) ;
             VarExprList exprList = query.getProject() ;
             
             for ( Iterator<Var> iter = exprList.getVars().iterator() ; iter.hasNext() ; )
@@ -158,7 +161,7 @@ public class SyntaxVarScope
                 Expr e = exprList.getExpr(v) ;
                 if ( e == null )
                 {
-                    if ( ! groupVars.contains(v) )
+                    if ( ! inScopeVars.contains(v) )
                         throw new QueryParseException("Non-group key variable in SELECT: "+v, -1 , -1) ;
                 }
                 else
@@ -166,10 +169,11 @@ public class SyntaxVarScope
                     Set<Var> eVars = e.getVarsMentioned() ;
                     for ( Var v2 : eVars )
                     {
-                        if ( ! groupVars.contains(v2) )
+                        if ( ! inScopeVars.contains(v2) )
                             throw new QueryParseException("Non-group key variable in SELECT: "+v2+" in expression "+e , -1 , -1) ;
                     }
                 }
+                inScopeVars.add(v) ;
             }
         }
     }

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java?rev=1459732&r1=1459731&r2=1459732&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/lang/TestVarScope.java Fri Mar 22 11:33:31 2013
@@ -44,18 +44,24 @@ public class TestVarScope extends BaseTe
     public void scope_05() { scope("SELECT (?o+1 AS ?x) (?o+1 AS ?x) { ?s ?p ?o }") ; }
 
     @Test public void scope_06() { scope("SELECT (?z+1 AS ?x) { ?s ?p ?o } GROUP BY (?o+5 AS ?z)") ; }
-        
+    
     @Test(expected=QueryException.class)
     public void scope_07() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o } GROUP BY (?o+5 AS ?x)") ; }
+
+    @Test public void scope_08() { scope("SELECT (count(*) AS ?X) (?X+1 AS ?Z) { ?s ?p ?o }") ; }
+
+    @Test public void scope_09() { scope("SELECT (count(*) AS ?X) (?X+?o AS ?Z) { ?s ?p ?o } GROUP BY ?o") ; }
     
-    @Test public void scope_08() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o MINUS { ?s ?p ?x} } ") ; }
+    @Test public void scope_10() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o MINUS { ?s ?p ?x} } ") ; }
     
     @Test(expected=QueryException.class)
-    public void scope_09() { scope("SELECT (?o+1 AS ?x) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
+    public void scope_15() { scope("SELECT (?o+1 AS ?x) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
     
-    @Test public void scope_10() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
-    @Test public void scope_11() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o FILTER(?x > 57)} } } ") ; }
+    @Test public void scope_16() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
+
+    @Test public void scope_17() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o FILTER(?x > 57)} } } ") ; }
     
+
     @Test public void scope_20() { scope("SELECT ?x { ?x ?p ?o } GROUP BY ?x") ; }
     
     @Test (expected=QueryException.class)