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