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/03/16 00:19:46 UTC

jena git commit: JENA-1157: Check expression variables as they are carried forward.

Repository: jena
Updated Branches:
  refs/heads/master 4c143d062 -> 04b9fffcf


JENA-1157: Check expression variables as they are carried forward.

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

Branch: refs/heads/master
Commit: 04b9fffcffda09c00a327dd86e63593a9ad5ed38
Parents: 4c143d0
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 15 23:19:35 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 15 23:19:35 2016 +0000

----------------------------------------------------------------------
 .../org/apache/jena/sparql/core/VarExprList.java  | 13 ++++---------
 .../apache/jena/sparql/lang/SyntaxVarScope.java   | 12 ++++++------
 .../org/apache/jena/sparql/lang/TestVarScope.java | 18 +++++++++++++++---
 jena-arq/testing/ARQ/README                       |  8 +++++++-
 jena-arq/testing/ARQ/Syntax/syn-arq.sh            | 12 ++++++++++++
 5 files changed, 44 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/04b9fffc/jena-arq/src/main/java/org/apache/jena/sparql/core/VarExprList.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/VarExprList.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/VarExprList.java
index 9d5f47a..6bce51e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/VarExprList.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/VarExprList.java
@@ -20,7 +20,6 @@ package org.apache.jena.sparql.core;
 
 import java.util.* ;
 import java.util.function.BiConsumer ;
-import java.util.function.Consumer ;
 
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.ARQInternalErrorException ;
@@ -33,24 +32,24 @@ import org.apache.jena.sparql.function.FunctionEnv ;
 public class VarExprList
 {
     private List<Var> vars  ;
-    private Map<Var, Expr> exprs  ;
+    private LinkedHashMap<Var, Expr> exprs  ;   // Preserve order.
     
     public VarExprList(List<Var> vars)
     {
         this.vars = new ArrayList<>(vars) ;
-        this.exprs = new HashMap<>() ;
+        this.exprs = new LinkedHashMap<>() ;
     }
     
     public VarExprList(VarExprList other)
     {
         this.vars = new ArrayList<>(other.vars) ;
-        this.exprs = new HashMap<>(other.exprs) ;
+        this.exprs = new LinkedHashMap<>(other.exprs) ;
     }
 
     public VarExprList()
     {
         this.vars = new ArrayList<>() ;
-        this.exprs = new HashMap<>() ;
+        this.exprs = new LinkedHashMap<>() ;
     }
     
     public VarExprList(Var var, Expr expr)
@@ -62,10 +61,6 @@ public class VarExprList
     public List<Var> getVars()          { return vars ; }
     public Map<Var, Expr> getExprs()    { return exprs ; }
     
-    public void forEachExpr(Consumer<Expr> action) {
-        exprs.values().forEach(action); 
-    }
-    
     public void forEach(BiConsumer<Var, Expr> action) {
         exprs.forEach(action); 
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/04b9fffc/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
index 90a1eba..684b440 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
@@ -132,14 +132,14 @@ public class SyntaxVarScope
     private static void checkExprListAssignment(Collection<Var> vars, VarExprList exprList)
     {
         Set<Var> vars2 = new LinkedHashSet<>(vars) ;
-
-        for ( Var v : exprList.getVars() )
-        {
-            // In scope?
-            Expr e = exprList.getExpr( v );
+        exprList.forEach((v,e) -> {
+            Set<Var> varInExpr = e.getVarsMentioned() ;
+            // Include mentioned variables
+            // These may be unused in the query (in vars) but stil contribute.
+            vars2.addAll(varInExpr) ;
             checkAssignment( vars2, e, v );
             vars2.add( v );
-        }
+        }) ;
     }
     
     private static void checkExprVarUse(Query query)

http://git-wip-us.apache.org/repos/asf/jena/blob/04b9fffc/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestVarScope.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestVarScope.java b/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestVarScope.java
index 98d033f..15597a8 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestVarScope.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestVarScope.java
@@ -56,10 +56,11 @@ public class TestVarScope extends BaseTest
     @Test(expected=QueryException.class)
     public void scope_15() { scope("SELECT (?o+1 AS ?x) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
     
-    @Test public void scope_16() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
+    @Test(expected=QueryException.class)
+    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(expected=QueryException.class)
+    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") ; }
     
@@ -131,5 +132,16 @@ public class TestVarScope extends BaseTest
         scope("SELECT * { { { ?s ?p ?o1 BIND(5 AS ?o1) } } }") ;
     }
         
+    @Test(expected=QueryException.class)
+    public void scope_65()
+    {
+        scope("SELECT ( (?x+1) AS ?x ) {}") ;
+    }
+
 
+    @Test(expected=QueryException.class)
+    public void scope_66()
+    {
+        scope("SELECT ( (?x+1) AS ?y)  (2 AS ?x) {}") ;
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/04b9fffc/jena-arq/testing/ARQ/README
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/README b/jena-arq/testing/ARQ/README
index 89a274b..a8b6286 100644
--- a/jena-arq/testing/ARQ/README
+++ b/jena-arq/testing/ARQ/README
@@ -1,3 +1,9 @@
-There are manaifest generating scripts for Syntax/ and Serlaization/
+There are manifest generating scripts for Syntax/ and Serialization/
 Look for *.sh
 
+syntax scripts not up to date with the
+
+BINDIGS/VALUES
+CONSTRUCT QUADS
+
+

http://git-wip-us.apache.org/repos/asf/jena/blob/04b9fffc/jena-arq/testing/ARQ/Syntax/syn-arq.sh
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/syn-arq.sh b/jena-arq/testing/ARQ/Syntax/syn-arq.sh
index 508d29b..c028144 100644
--- a/jena-arq/testing/ARQ/Syntax/syn-arq.sh
+++ b/jena-arq/testing/ARQ/Syntax/syn-arq.sh
@@ -1,5 +1,17 @@
 #!/bin/bash
 
+## ---- Additional tests
+
+N=0
+
+N=$((N+1)) ; testBad $ARQ $(fname "syntax-scope-bad-" $N arq) <<EOF
+SELECT ( (?x+1) AS ?x ) {}
+EOF
+
+N=$((N+1)) ; testBad $ARQ $(fname "syntax-scope-bad-" $N arq) <<EOF
+SELECT ( (?x+1) AS ?y)  (2 AS ?x) {}
+EOF
+
 ## ---- Expressions in SELECT
 
 N=0