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 2025/05/05 10:34:57 UTC
(jena) branch main updated (3b6fb69d4e -> ff27e3df40)
This is an automated email from the ASF dual-hosted git repository.
andy pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
from 3b6fb69d4e Bump com.opencsv:opencsv from 5.10 to 5.11
new 4a473e32d3 GH-3164: Scope handling of trailing VALUES and clean-up
new ff27e3df40 Format white space
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../apache/jena/sparql/lang/LabelToNodeMap.java | 46 +++---
.../apache/jena/sparql/lang/ParserSPARQL10.java | 30 ++--
.../apache/jena/sparql/lang/ParserSPARQL11.java | 24 +--
.../jena/sparql/lang/ParserSPARQL11Update.java | 18 +--
.../apache/jena/sparql/lang/ParserSPARQL12.java | 24 +--
.../jena/sparql/lang/ParserSPARQL12Update.java | 18 +--
.../apache/jena/sparql/lang/QueryParserBase.java | 22 +--
.../org/apache/jena/sparql/lang/SPARQLParser.java | 14 +-
.../apache/jena/sparql/lang/SPARQLParserBase.java | 122 +++++++--------
.../jena/sparql/lang/SPARQLParserFactory.java | 2 +-
.../apache/jena/sparql/lang/SyntaxVarScope.java | 122 +++++++--------
.../org/apache/jena/sparql/lang/UpdateParser.java | 12 +-
.../jena/sparql/lang/UpdateParserFactory.java | 2 +-
.../jena/sparql/lang/UpdateParserRegistry.java | 46 +++---
.../org/apache/jena/sparql/lang/TestUnescape.java | 56 +++----
.../org/apache/jena/sparql/lang/TestVarScope.java | 165 +++++++++++----------
16 files changed, 358 insertions(+), 365 deletions(-)
(jena) 01/02: GH-3164: Scope handling of trailing VALUES and clean-up
Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
commit 4a473e32d318138ee81d2c547e8a799580ffda27
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun May 4 09:19:41 2025 +0100
GH-3164: Scope handling of trailing VALUES and clean-up
---
.../apache/jena/sparql/lang/SPARQLParserBase.java | 2 +-
.../apache/jena/sparql/lang/SyntaxVarScope.java | 122 ++++++++++-----------
2 files changed, 57 insertions(+), 67 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
index 53c1164466..4af45c042f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
@@ -176,7 +176,7 @@ public class SPARQLParserBase extends QueryParserBase {
private static UpdateVisitor v = new UpdateVisitorBase() {
@Override
public void visit(UpdateModify mod) {
- SyntaxVarScope.check(mod.getWherePattern()) ;
+ SyntaxVarScope.checkElement(mod.getWherePattern()) ;
}
} ;
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 dea4f3b302..5fb847d667 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
@@ -55,19 +55,50 @@ public class SyntaxVarScope {
*/
//@formatter:on
+ /**
+ * Apply the SPARQL scope rules to a query.
+ * Throw {@link QueryParseException} if there is a violation.
+ */
public static void check(Query query) {
- if ( query.getQueryPattern() == null )
- // DESCRIBE may not have a pattern
+ Element queryPattern = query.getQueryPattern();
+ if ( queryPattern == null ) {
+ // DESCRIBE may not have a pattern in which case there are no checks to perform.
return;
- check(query.getQueryPattern());
- // Check this level.
- checkQueryScope(query);
- // Other checks.
- Collection<Var> vars = varsOfQuery(query);
- check(query, vars);
+ }
+
+ checkElement(queryPattern);
+
+ // Check scoping at this level (SELECT, GROUP BY)
+ // Does not include variables in trailing VALUES.
+ // A trailing VALUES is joined to the query results, including SELECT clause,
+ // and so does not affect scope at this level.
+ Collection<Var> vars = PatternVars.vars(query.getQueryPattern());
+
+ // SELECT expressions
+ checkExprListAssignment(vars, query.getProject());
+
+ // Check for SELECT * GROUP BY
+ // Legal in ARQ, not in SPARQL 1.1, 1.2
+ if ( !Syntax.syntaxARQ.equals(query.getSyntax()) ) {
+ if ( query.isQueryResultStar() && query.hasGroupBy() )
+ throw new QueryParseException("SELECT * not legal with GROUP BY", -1, -1);
+ }
+
+ // Check any variable in an expression is in scope (if GROUP BY)
+ checkExprVarGroupBy(query);
}
- public static void check(Element queryPattern) {
+ /**
+ * @deprecated use {@link checkElement}
+ */
+ @Deprecated(forRemoval = true)
+ public static void check(Element queryPattern) { checkElement(queryPattern); }
+
+ /**
+ * Apply the SPARQL scope rules to a query element (part or all of a WEHERE clause).
+ * Throw {@link QueryParseException} if there is a violation.
+ */
+ public static void checkElement(Element queryPattern) {
checkSubQuery(queryPattern);
checkPatternAssign(queryPattern);
}
@@ -86,44 +117,6 @@ public class SyntaxVarScope {
ElementWalker.walk(el, v);
}
- // Check one level of query - SELECT expressions
- private static void checkQueryScope(Query query) {
- Collection<Var> vars = varsOfQuery(query);
- checkExprListAssignment(vars, query.getProject());
- }
-
- // get all vars of a query
- private static Collection<Var> varsOfQuery(Query query) {
- Collection<Var> vars = PatternVars.vars(query.getQueryPattern());
- if ( query.hasValues() )
- vars.addAll(query.getValuesVariables());
- return vars;
- }
-
- // Other check (not scoping at this level) of a query
- private static void check(Query query, Collection<Var> vars) {
- // Check any expressions are assigned to fresh variables.
- checkExprListAssignment(vars, query.getProject());
-
- // Check for SELECT * GROUP BY
- // Legal in ARQ, not in SPARQL 1.1
- if ( !Syntax.syntaxARQ.equals(query.getSyntax()) ) {
- if ( query.isQueryResultStar() && query.hasGroupBy() )
- throw new QueryParseException("SELECT * not legal with GROUP BY", -1, -1);
- }
-
- // Check any variable in an expression is in scope (if GROUP BY)
- checkExprVarUse(query);
-
- // Check GROUP BY AS
- // ENABLE
- if ( false && query.hasGroupBy() ) {
- VarExprList exprList2 = query.getGroupBy();
- checkExprListAssignment(vars, exprList2);
- // CHECK
- }
- }
-
private static void checkExprListAssignment(Collection<Var> vars, VarExprList exprList) {
Set<Var> vars2 = new LinkedHashSet<>(vars);
exprList.forEachExpr((v, e) -> {
@@ -136,7 +129,7 @@ public class SyntaxVarScope {
});
}
- private static void checkExprVarUse(Query query) {
+ private static void checkExprVarGroupBy(Query query) {
if ( query.hasGroupBy() ) {
VarExprList groupKey = query.getGroupBy();
@@ -171,7 +164,7 @@ public class SyntaxVarScope {
return;
// expr not null
if ( scope.contains(var) )
- throw new QueryParseException("Variable used when already in-scope: "+var+" in "+fmtAssignment(expr, var), -1 , -1) ;
+ throw new QueryParseException("Variable used when already in-scope: "+var+" in "+fmtAssignment(expr, var), -1 , -1);
// test for impossible variables - bound() is a bit odd.
if ( false ) {
@@ -183,32 +176,29 @@ public class SyntaxVarScope {
}
}
- private static String fmtExprList(VarExprList exprList) {
- StringBuilder sb = new StringBuilder();
- boolean first = true;
- for ( Var v : exprList.getVars() ) {
- Expr e = exprList.getExpr(v);
- if ( !first ) {
- sb.append(" ");
- }
- first = false;
- sb.append("(").append(e).append(" AS ").append(v).append(")");
- }
- return sb.toString();
- }
+// private static String fmtExprList(VarExprList exprList) {
+// StringBuilder sb = new StringBuilder();
+// boolean first = true;
+// for ( Var v : exprList.getVars() ) {
+// Expr e = exprList.getExpr(v);
+// if ( !first ) {
+// sb.append(" ");
+// }
+// first = false;
+// sb.append("(").append(e).append(" AS ").append(v).append(")");
+// }
+// return sb.toString();
+// }
private static String fmtAssignment(Expr expr, Var var) {
return "(" + expr + " AS " + var + ")";
}
- // Modified walked for variables.
-
/** Visitor for subqueries scope rules . */
private static class SubQueryScopeChecker extends ElementVisitorBase {
@Override
public void visit(ElementSubQuery el) {
Query query = el.getQuery();
- checkQueryScope(query);
// Recursively check sub-queries in sub-queries.
check(el.getQuery());
}
@@ -255,7 +245,7 @@ public class SyntaxVarScope {
/** Calculate scope, working forwards */
private static Collection<Var> calcScope(List<Element> elements, int start, int finish) {
Collection<Var> accScope = new HashSet<>();
- for ( int i = start ; i < finish ; i++ ) {
+ for ( int i = start; i < finish; i++ ) {
Element e = elements.get(i);
PatternVars.vars(accScope, e);
}
(jena) 02/02: Format white space
Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
commit ff27e3df401ca5cbff414906d64ad9d026e16d7f
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun May 4 10:34:24 2025 +0100
Format white space
---
.../apache/jena/sparql/lang/LabelToNodeMap.java | 46 +++---
.../apache/jena/sparql/lang/ParserSPARQL10.java | 30 ++--
.../apache/jena/sparql/lang/ParserSPARQL11.java | 24 +--
.../jena/sparql/lang/ParserSPARQL11Update.java | 18 +--
.../apache/jena/sparql/lang/ParserSPARQL12.java | 24 +--
.../jena/sparql/lang/ParserSPARQL12Update.java | 18 +--
.../apache/jena/sparql/lang/QueryParserBase.java | 22 +--
.../org/apache/jena/sparql/lang/SPARQLParser.java | 14 +-
.../apache/jena/sparql/lang/SPARQLParserBase.java | 122 +++++++--------
.../jena/sparql/lang/SPARQLParserFactory.java | 2 +-
.../org/apache/jena/sparql/lang/UpdateParser.java | 12 +-
.../jena/sparql/lang/UpdateParserFactory.java | 2 +-
.../jena/sparql/lang/UpdateParserRegistry.java | 46 +++---
.../org/apache/jena/sparql/lang/TestUnescape.java | 56 +++----
.../org/apache/jena/sparql/lang/TestVarScope.java | 165 +++++++++++----------
15 files changed, 302 insertions(+), 299 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/LabelToNodeMap.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/LabelToNodeMap.java
index 532f6c168b..a7d2bb93bd 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/LabelToNodeMap.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/LabelToNodeMap.java
@@ -18,15 +18,15 @@
package org.apache.jena.sparql.lang;
-import java.util.HashMap ;
-import java.util.Map ;
-import java.util.Set ;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
import org.apache.jena.riot.lang.LabelToNode;
-import org.apache.jena.sparql.ARQConstants ;
-import org.apache.jena.sparql.core.VarAlloc ;
+import org.apache.jena.sparql.ARQConstants;
+import org.apache.jena.sparql.core.VarAlloc;
/** Map from _:* form to bNodes or variables.
@@ -36,13 +36,13 @@ import org.apache.jena.sparql.core.VarAlloc ;
public class LabelToNodeMap
{
- private Map<String, Node> bNodeLabels = new HashMap<>() ;
+ private Map<String, Node> bNodeLabels = new HashMap<>();
// Variables or bNodes?
// True means variables (query pattern)
// False means blank node (construct template)
- boolean generateVars = false ;
- VarAlloc allocator = null ;
+ boolean generateVars = false;
+ VarAlloc allocator = null;
/**
* Create blank nodes, with the same blank node returned for the same label.
@@ -52,7 +52,7 @@ public class LabelToNodeMap
*/
@Deprecated
public static LabelToNodeMap createBNodeMap()
- { return new LabelToNodeMap(false, null) ; }
+ { return new LabelToNodeMap(false, null); }
/**
* Create variables (Var), starting from zero each time This means that parsing a
@@ -62,32 +62,32 @@ public class LabelToNodeMap
* @return LabelToNodeMap
*/
public static LabelToNodeMap createVarMap()
- { return new LabelToNodeMap(true, new VarAlloc(ARQConstants.allocParserAnonVars) ) ; }
+ { return new LabelToNodeMap(true, new VarAlloc(ARQConstants.allocParserAnonVars) ); }
private LabelToNodeMap(boolean genVars, VarAlloc allocator) {
- generateVars = genVars ;
- this.allocator = allocator ;
+ generateVars = genVars;
+ this.allocator = allocator;
}
- public Set<String> getLabels() { return bNodeLabels.keySet() ; }
+ public Set<String> getLabels() { return bNodeLabels.keySet(); }
public Node asNode(String label) {
- Node n = bNodeLabels.get(label) ;
+ Node n = bNodeLabels.get(label);
if ( n != null )
- return n ;
- n = allocNode() ;
- bNodeLabels.put(label, n) ;
- return n ;
+ return n;
+ n = allocNode();
+ bNodeLabels.put(label, n);
+ return n;
}
public Node allocNode() {
if ( generateVars )
- return allocAnonVariable() ;
- return NodeFactory.createBlankNode() ;
+ return allocAnonVariable();
+ return NodeFactory.createBlankNode();
}
private Node allocAnonVariable() {
- return allocator.allocVar() ;
+ return allocator.allocVar();
}
public void clear() {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL10.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL10.java
index 1474ca4777..e0c7999b3e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL10.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL10.java
@@ -18,22 +18,22 @@
package org.apache.jena.sparql.lang;
-import java.io.Reader ;
-import java.io.StringReader ;
+import java.io.Reader;
+import java.io.StringReader;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.query.Syntax ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.sparql.lang.sparql_10.SPARQLParser10 ;
-import org.apache.jena.sparql.syntax.Element ;
-import org.apache.jena.sparql.syntax.Template ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.lang.sparql_10.SPARQLParser10;
+import org.apache.jena.sparql.syntax.Element;
+import org.apache.jena.sparql.syntax.Template;
public class ParserSPARQL10 extends SPARQLParser
{
- private interface Action { void exec(SPARQLParser10 parser) throws Exception ; }
+ private interface Action { void exec(SPARQLParser10 parser) throws Exception; }
@Override
protected Query parse$(final Query query, String queryString) {
@@ -67,8 +67,8 @@ public class ParserSPARQL10 extends SPARQLParser
// All throwable handling.
private static void perform(Query query, String string, Action action) {
- Reader in = new StringReader(string) ;
- SPARQLParser10 parser = new SPARQLParser10(in) ;
+ Reader in = new StringReader(string);
+ SPARQLParser10 parser = new SPARQLParser10(in);
try {
query.setStrict(true);
parser.setQuery(query);
@@ -92,7 +92,7 @@ public class ParserSPARQL10 extends SPARQLParser
throw new QueryParseException(err.getMessage(), err, -1, -1);
} catch (Throwable th) {
Log.warn(ParserSPARQL10.class, "Unexpected throwable: ", th);
- throw new QueryException(th.getMessage(), th) ;
+ throw new QueryException(th.getMessage(), th);
}
}
}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
index f40b04f009..fc0b8fea77 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
@@ -18,22 +18,22 @@
package org.apache.jena.sparql.lang;
-import java.io.Reader ;
-import java.io.StringReader ;
+import java.io.Reader;
+import java.io.StringReader;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.query.Syntax ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11 ;
-import org.apache.jena.sparql.syntax.Element ;
-import org.apache.jena.sparql.syntax.Template ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
+import org.apache.jena.sparql.syntax.Element;
+import org.apache.jena.sparql.syntax.Template;
public class ParserSPARQL11 extends SPARQLParser
{
- private interface Action { void exec(SPARQLParser11 parser) throws Exception ; }
+ private interface Action { void exec(SPARQLParser11 parser) throws Exception; }
@Override
protected Query parse$(final Query query, String queryString) {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11Update.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11Update.java
index ae9a1b66a6..e76e1503cf 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11Update.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11Update.java
@@ -18,16 +18,16 @@
package org.apache.jena.sparql.lang;
-import java.io.Reader ;
+import java.io.Reader;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.shared.JenaException ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.shared.JenaException;
import org.apache.jena.sparql.core.Prologue;
-import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11 ;
-import org.apache.jena.sparql.modify.UpdateSink ;
-import org.apache.jena.update.UpdateException ;
+import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
+import org.apache.jena.sparql.modify.UpdateSink;
+import org.apache.jena.update.UpdateException;
public class ParserSPARQL11Update extends UpdateParser
{
@@ -35,7 +35,7 @@ public class ParserSPARQL11Update extends UpdateParser
@Override
protected void executeParse(UpdateSink sink, Prologue prologue, Reader r) {
- SPARQLParser11 parser = null ;
+ SPARQLParser11 parser = null;
try {
parser = new SPARQLParser11(r);
parser.setUpdate(prologue, sink);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12.java
index a2baddb724..6db50ca3a7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12.java
@@ -18,22 +18,22 @@
package org.apache.jena.sparql.lang;
-import java.io.Reader ;
-import java.io.StringReader ;
+import java.io.Reader;
+import java.io.StringReader;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.query.Syntax ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.sparql.lang.sparql_12.SPARQLParser12 ;
-import org.apache.jena.sparql.syntax.Element ;
-import org.apache.jena.sparql.syntax.Template ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.lang.sparql_12.SPARQLParser12;
+import org.apache.jena.sparql.syntax.Element;
+import org.apache.jena.sparql.syntax.Template;
public class ParserSPARQL12 extends SPARQLParser
{
- private interface Action { void exec(SPARQLParser12 parser) throws Exception ; }
+ private interface Action { void exec(SPARQLParser12 parser) throws Exception; }
@Override
protected Query parse$(final Query query, String queryString) {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12Update.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12Update.java
index ced6ba56bc..40313c8b8b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12Update.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL12Update.java
@@ -18,16 +18,16 @@
package org.apache.jena.sparql.lang;
-import java.io.Reader ;
+import java.io.Reader;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.shared.JenaException ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.shared.JenaException;
import org.apache.jena.sparql.core.Prologue;
-import org.apache.jena.sparql.lang.sparql_12.SPARQLParser12 ;
-import org.apache.jena.sparql.modify.UpdateSink ;
-import org.apache.jena.update.UpdateException ;
+import org.apache.jena.sparql.lang.sparql_12.SPARQLParser12;
+import org.apache.jena.sparql.modify.UpdateSink;
+import org.apache.jena.update.UpdateException;
public class ParserSPARQL12Update extends UpdateParser
{
@@ -35,7 +35,7 @@ public class ParserSPARQL12Update extends UpdateParser
@Override
protected void executeParse(UpdateSink sink, Prologue prologue, Reader r) {
- SPARQLParser12 parser = null ;
+ SPARQLParser12 parser = null;
try {
parser = new SPARQLParser12(r);
parser.setUpdate(prologue, sink);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
index 122a2d2e9b..398273125f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
@@ -59,18 +59,18 @@ import org.slf4j.LoggerFactory;
/** Base class parsers, mainly SPARQL related */
public class QueryParserBase {
- protected final Node XSD_TRUE = NodeConst.nodeTrue ;
- protected final Node XSD_FALSE = NodeConst.nodeFalse ;
+ protected final Node XSD_TRUE = NodeConst.nodeTrue;
+ protected final Node XSD_FALSE = NodeConst.nodeFalse;
- protected final Node nRDFtype = NodeConst.nodeRDFType ;
+ protected final Node nRDFtype = NodeConst.nodeRDFType;
- protected final Node nRDFnil = NodeConst.nodeNil ;
- protected final Node nRDFfirst = NodeConst.nodeFirst ;
- protected final Node nRDFrest = NodeConst.nodeRest ;
+ protected final Node nRDFnil = NodeConst.nodeNil;
+ protected final Node nRDFfirst = NodeConst.nodeFirst;
+ protected final Node nRDFrest = NodeConst.nodeRest;
- protected final Node nRDFsubject = RDF.Nodes.subject ;
- protected final Node nRDFpredicate = RDF.Nodes.predicate ;
- protected final Node nRDFobject = RDF.Nodes.object ;
+ protected final Node nRDFsubject = RDF.Nodes.subject;
+ protected final Node nRDFpredicate = RDF.Nodes.predicate;
+ protected final Node nRDFobject = RDF.Nodes.object;
protected final Node nRDFreifies = RDF.Nodes.reifies;
@@ -215,7 +215,7 @@ public class QueryParserBase {
// Because of Java (Java strings have surrogate pairs) we only detect singleton surrogates.
protected void checkString(String string, int line, int column) {
// Checks for bare surrogate pairs.
- for ( int i = 0 ; i < string.length() ; i++ ) {
+ for ( int i = 0; i < string.length(); i++ ) {
// Not "codePointAt" which does surrogate processing.
char ch = string.charAt(i);
@@ -667,7 +667,7 @@ public class QueryParserBase {
int len = s.length();
StringBuilder sb = new StringBuilder();
- for ( int i = 0 ; i < len ; i++ ) {
+ for ( int i = 0; i < len; i++ ) {
char ch = s.charAt(i);
// Keep line and column numbers.
switch (ch) {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParser.java
index a0122b240a..27d5e9b958 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParser.java
@@ -18,9 +18,9 @@
package org.apache.jena.sparql.lang;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.query.Syntax ;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.Syntax;
/** This class provides the root of lower level access to all the parsers.
* Each subclass hides the details of the per-language exception handlers and other
@@ -30,13 +30,13 @@ import org.apache.jena.query.Syntax ;
public abstract class SPARQLParser
{
public final Query parse(Query query, String queryString) throws QueryParseException {
- Query parsedQuery = parse$(query, queryString) ;
- validateParsedQuery(parsedQuery) ;
+ Query parsedQuery = parse$(query, queryString);
+ validateParsedQuery(parsedQuery);
parsedQuery.resetResultVars();
- return parsedQuery ;
+ return parsedQuery;
}
- protected abstract Query parse$(Query query, String queryString) throws QueryParseException ;
+ protected abstract Query parse$(Query query, String queryString) throws QueryParseException;
public static boolean canParse(Syntax syntaxURI) {
return SPARQLParserRegistry.get().containsFactory(syntaxURI);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
index 4af45c042f..13d4aaa47c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
@@ -18,19 +18,19 @@
package org.apache.jena.sparql.lang;
-import java.util.* ;
-
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.sparql.ARQInternalErrorException ;
-import org.apache.jena.sparql.core.Prologue ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.binding.Binding ;
+import java.util.*;
+
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.sparql.ARQInternalErrorException;
+import org.apache.jena.sparql.core.Prologue;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.binding.BindingBuilder;
-import org.apache.jena.sparql.modify.UpdateSink ;
-import org.apache.jena.sparql.modify.request.* ;
-import org.apache.jena.update.Update ;
+import org.apache.jena.sparql.modify.UpdateSink;
+import org.apache.jena.sparql.modify.request.*;
+import org.apache.jena.update.Update;
/** Class that has all the parse event operations and other query/update specific things */
public class SPARQLParserBase extends QueryParserBase {
@@ -44,37 +44,37 @@ public class SPARQLParserBase extends QueryParserBase {
setPrologue(q);
}
- public Query getQuery() { return query ; }
+ public Query getQuery() { return query; }
// The ARQ parser is both query and update languages.
// // ---- SPARQL/Update (Submission)
-// private UpdateRequest requestSubmission = null ;
+// private UpdateRequest requestSubmission = null;
//
-// protected UpdateRequest getUpdateRequestSubmission() { return requestSubmission ; }
+// protected UpdateRequest getUpdateRequestSubmission() { return requestSubmission; }
// public void setUpdateRequest(UpdateRequest request)
// {
-// setPrologue(request) ;
-// this.requestSubmission = request ;
+// setPrologue(request);
+// this.requestSubmission = request;
// // And create a query because we may have nested selects.
-// this.query = new Query () ;
+// this.query = new Query ();
// }
- private UpdateSink sink = null ;
+ private UpdateSink sink = null;
// Places to push settings across points where we reset.
- private boolean oldBNodesAreVariables ;
- private boolean oldBNodesAreAllowed ;
+ private boolean oldBNodesAreVariables;
+ private boolean oldBNodesAreAllowed;
// Count of subSelect nesting.
// Level 0 is top level.
// Level -1 is not in a pattern WHERE clause.
- private int queryLevel = -1 ;
- private Deque<Set<String>> stackPreviousLabels = new ArrayDeque<>() ;
- private Deque<LabelToNodeMap> stackCurrentLabels = new ArrayDeque<>() ;
+ private int queryLevel = -1;
+ private Deque<Set<String>> stackPreviousLabels = new ArrayDeque<>();
+ private Deque<LabelToNodeMap> stackCurrentLabels = new ArrayDeque<>();
public void setUpdate(Prologue prologue, UpdateSink sink) {
- this.sink = sink ;
+ this.sink = sink;
this.query = new Query();
setPrologue(prologue);
}
@@ -88,10 +88,10 @@ public class SPARQLParserBase extends QueryParserBase {
protected void finishUpdateRequest() {}
// protected void startBasicGraphPattern()
-// { activeLabelMap.clear() ; }
+// { activeLabelMap.clear(); }
//
// protected void endBasicGraphPattern()
-// { oldLabels.addAll(activeLabelMap.getLabels()) ; }
+// { oldLabels.addAll(activeLabelMap.getLabels()); }
protected void startUpdateOperation() {}
protected void finishUpdateOperation() {}
@@ -176,9 +176,9 @@ public class SPARQLParserBase extends QueryParserBase {
private static UpdateVisitor v = new UpdateVisitorBase() {
@Override
public void visit(UpdateModify mod) {
- SyntaxVarScope.checkElement(mod.getWherePattern()) ;
+ SyntaxVarScope.checkElement(mod.getWherePattern());
}
- } ;
+ };
private void verifyUpdate(Update update) {
update.visit(v);
@@ -194,13 +194,13 @@ public class SPARQLParserBase extends QueryParserBase {
protected void pushQuery() {
if ( query == null )
- throw new ARQInternalErrorException("Parser query object is null") ;
- stack.push(query) ;
+ throw new ARQInternalErrorException("Parser query object is null");
+ stack.push(query);
}
protected void startSubSelect(int line, int col) {
pushQuery();
- query = newSubQuery(getPrologue()) ;
+ query = newSubQuery(getPrologue());
}
protected Query newSubQuery(Prologue progloue) {
@@ -214,89 +214,89 @@ public class SPARQLParserBase extends QueryParserBase {
}
protected Query endSubSelect(int line, int column) {
- Query subQuery = query ;
+ Query subQuery = query;
if ( ! subQuery.isSelectType() )
- throwParseException("Subquery not a SELECT query", line, column) ;
+ throwParseException("Subquery not a SELECT query", line, column);
popQuery();
- return subQuery ;
+ return subQuery;
}
- private List<Var> variables = null ;
- private List<Binding> values = null ;
+ private List<Var> variables = null;
+ private List<Binding> values = null;
private BindingBuilder rowBuilder;
- private int currentColumn = -1 ;
+ private int currentColumn = -1;
// Trailing VALUES.
protected void startValuesClause(int line, int col) {
- variables = new ArrayList<>() ;
- values = new ArrayList<>() ;
+ variables = new ArrayList<>();
+ values = new ArrayList<>();
rowBuilder = Binding.builder();
}
protected void finishValuesClause(int line, int col)
{
- getQuery().setValuesDataBlock(variables, values) ;
+ getQuery().setValuesDataBlock(variables, values);
}
// ElementData. VALUES in the WHERE clause.
protected void startInlineData(List<Var> vars, List<Binding> rows, int line, int col) {
- variables = vars ;
- values = rows ;
+ variables = vars;
+ values = rows;
rowBuilder = Binding.builder();
}
protected void finishInlineData(int line, int col)
{}
- protected void emitDataBlockVariable(Var v) { variables.add(v) ; }
+ protected void emitDataBlockVariable(Var v) { variables.add(v); }
protected void startDataBlockValueRow(int line, int col) {
rowBuilder.reset();
- currentColumn = -1 ;
+ currentColumn = -1;
}
protected void emitDataBlockValue(Node n, int line, int col) {
- currentColumn++ ;
+ currentColumn++;
if ( currentColumn >= variables.size() )
// Exception will be thrown later when we have the complete row count.
- return ;
+ return;
- Var v = variables.get(currentColumn) ;
+ Var v = variables.get(currentColumn);
if ( n != null && ! n.isConcrete() ) {
- String msg = QueryParseException.formatMessage("Term is not concrete: "+n, line, col) ;
- throw new QueryParseException(msg, line, col) ;
+ String msg = QueryParseException.formatMessage("Term is not concrete: "+n, line, col);
+ throw new QueryParseException(msg, line, col);
}
if ( n != null )
- rowBuilder.add(v, n) ;
+ rowBuilder.add(v, n);
}
protected void finishDataBlockValueRow(int line, int col) {
//if ( variables.size() != currentValueRow().size() )
if ( currentColumn+1 != variables.size() )
{
- String msg = String.format("Mismatch: %d variables but %d values",variables.size(), currentColumn+1) ;
- msg = QueryParseException.formatMessage(msg, line, col) ;
- throw new QueryParseException(msg, line , col) ;
+ String msg = String.format("Mismatch: %d variables but %d values",variables.size(), currentColumn+1);
+ msg = QueryParseException.formatMessage(msg, line, col);
+ throw new QueryParseException(msg, line , col);
}
values.add(rowBuilder.build());
}
private void pushLabelState() {
// Hide used labels already tracked.
- stackPreviousLabels.push(previousLabels) ;
- stackCurrentLabels.push(activeLabelMap) ;
- previousLabels = new HashSet<>() ;
- activeLabelMap.clear() ;
+ stackPreviousLabels.push(previousLabels);
+ stackCurrentLabels.push(activeLabelMap);
+ previousLabels = new HashSet<>();
+ activeLabelMap.clear();
}
private void popLabelState() {
- previousLabels = stackPreviousLabels.pop() ;
+ previousLabels = stackPreviousLabels.pop();
activeLabelMap = stackCurrentLabels.pop();
}
private void clearLabelState() {
- activeLabelMap.clear() ;
- previousLabels.clear() ;
+ activeLabelMap.clear();
+ previousLabels.clear();
}
}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserFactory.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserFactory.java
index eeb85061a3..d7aa6526cb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserFactory.java
@@ -18,7 +18,7 @@
package org.apache.jena.sparql.lang;
-import org.apache.jena.query.Syntax ;
+import org.apache.jena.query.Syntax;
public interface SPARQLParserFactory
{
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParser.java
index 8f6382424c..1a1f4fc8dc 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParser.java
@@ -19,16 +19,16 @@
package org.apache.jena.sparql.lang;
import java.io.FileReader;
-import java.io.InputStream ;
-import java.io.Reader ;
+import java.io.InputStream;
+import java.io.Reader;
import java.io.StringReader;
import org.apache.jena.atlas.logging.Log;
-import org.apache.jena.query.QueryParseException ;
-import org.apache.jena.query.Syntax ;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.Syntax;
import org.apache.jena.sparql.core.Prologue;
-import org.apache.jena.sparql.modify.UpdateSink ;
-import org.apache.jena.util.FileUtils ;
+import org.apache.jena.sparql.modify.UpdateSink;
+import org.apache.jena.util.FileUtils;
/**
* This class provides the root of lower level access to all the update parsers.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserFactory.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserFactory.java
index 72b05af19a..b42ba6b013 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserFactory.java
@@ -18,7 +18,7 @@
package org.apache.jena.sparql.lang;
-import org.apache.jena.query.Syntax ;
+import org.apache.jena.query.Syntax;
public interface UpdateParserFactory
{
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserRegistry.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserRegistry.java
index 69710d68c2..c96bf350b7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserRegistry.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/UpdateParserRegistry.java
@@ -18,15 +18,15 @@
package org.apache.jena.sparql.lang;
-import java.util.HashMap ;
-import java.util.Map ;
+import java.util.HashMap;
+import java.util.Map;
-import org.apache.jena.query.Syntax ;
+import org.apache.jena.query.Syntax;
public class UpdateParserRegistry
{
// the map contains the registered factories hashed by the syntaxes
- private Map<Syntax, UpdateParserFactory> factories = new HashMap<>() ;
+ private Map<Syntax, UpdateParserFactory> factories = new HashMap<>();
// Singleton
static UpdateParserRegistry registry = null;
@@ -39,30 +39,30 @@ public class UpdateParserRegistry
private UpdateParserRegistry() {}
private static synchronized void init() {
- UpdateParserRegistry reg = new UpdateParserRegistry() ;
+ UpdateParserRegistry reg = new UpdateParserRegistry();
reg.add(Syntax.syntaxSPARQL_11,
new UpdateParserFactory() {
@Override
- public boolean accept( Syntax syntax ) { return Syntax.syntaxSPARQL_11.equals(syntax) ; }
+ public boolean accept( Syntax syntax ) { return Syntax.syntaxSPARQL_11.equals(syntax); }
@Override
- public UpdateParser create( Syntax syntax ) { return new ParserSPARQL11Update() ; } }) ;
+ public UpdateParser create( Syntax syntax ) { return new ParserSPARQL11Update(); } });
reg.add(Syntax.syntaxSPARQL_12,
new UpdateParserFactory() {
@Override
- public boolean accept( Syntax syntax ) { return Syntax.syntaxSPARQL_12.equals(syntax) ; }
+ public boolean accept( Syntax syntax ) { return Syntax.syntaxSPARQL_12.equals(syntax); }
@Override
- public UpdateParser create( Syntax syntax ) { return new ParserSPARQL12Update() ; } }) ;
+ public UpdateParser create( Syntax syntax ) { return new ParserSPARQL12Update(); } });
reg.add(Syntax.syntaxARQ,
new UpdateParserFactory() {
@Override
- public boolean accept(Syntax syntax ) { return Syntax.syntaxARQ.equals(syntax) ; }
+ public boolean accept(Syntax syntax ) { return Syntax.syntaxARQ.equals(syntax); }
@Override
- public UpdateParser create ( Syntax syntax ) { return new ParserARQUpdate() ; } }) ;
+ public UpdateParser create ( Syntax syntax ) { return new ParserARQUpdate(); } });
- registry = reg ;
+ registry = reg;
}
/** Return a suitable factory for the given syntax
@@ -72,7 +72,7 @@ public class UpdateParserRegistry
*/
public static UpdateParserFactory findFactory(Syntax syntax)
- { return get().getFactory(syntax) ; }
+ { return get().getFactory(syntax); }
/** Return a suitable parser for the given syntax
*
@@ -81,7 +81,7 @@ public class UpdateParserRegistry
*/
public static UpdateParser parser(Syntax syntax)
- { return get().createParser(syntax) ; }
+ { return get().createParser(syntax); }
/** Return a suitable parser factory for the given syntax
*
@@ -90,7 +90,7 @@ public class UpdateParserRegistry
*/
public UpdateParserFactory getFactory(Syntax syntax)
- { return factories.get(syntax) ; }
+ { return factories.get(syntax); }
/** Return a suitable parser for the given syntax
*
@@ -99,8 +99,8 @@ public class UpdateParserRegistry
*/
public UpdateParser createParser(Syntax syntax) {
- UpdateParserFactory f = getFactory(syntax) ;
- return ( f != null ) ? f.create(syntax) : null ;
+ UpdateParserFactory f = getFactory(syntax);
+ return ( f != null ) ? f.create(syntax) : null;
}
/** Register the given parser factory for the specified syntax.
@@ -108,7 +108,7 @@ public class UpdateParserRegistry
* given one.
*/
public static void addFactory(Syntax syntax, UpdateParserFactory f)
- { get().add(syntax, f) ; }
+ { get().add(syntax, f); }
/** Register the given parser factory for the specified syntax.
* If another factory is registered for the syntax it is replaced by the
@@ -118,23 +118,23 @@ public class UpdateParserRegistry
{
if ( ! f.accept(syntax) )
throw new IllegalArgumentException( "The given parser factory does not accept the specified syntax." );
- factories.put(syntax, f) ;
+ factories.put(syntax, f);
}
/** Unregister the parser factory associated with the given syntax */
public static void removeFactory(Syntax syntax)
- { get().remove(syntax) ; }
+ { get().remove(syntax); }
/** Unregister the parser factory associated with the given syntax */
public void remove(Syntax syntax)
- { factories.remove(syntax) ; }
+ { factories.remove(syntax); }
/** Checks whether a parser factory is registered for the given syntax */
public static boolean containsParserFactory(Syntax syntax)
- { return get().containsFactory(syntax) ; }
+ { return get().containsFactory(syntax); }
/** Checks whether a parser factory is registered for the given syntax */
public boolean containsFactory(Syntax syntax)
- { return factories.containsKey(syntax) ; }
+ { return factories.containsKey(syntax); }
}
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestUnescape.java b/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestUnescape.java
index 1bd3765806..a80e241dcd 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestUnescape.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/lang/TestUnescape.java
@@ -21,37 +21,37 @@ package org.apache.jena.sparql.lang;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
-import org.apache.jena.query.QueryParseException ;
-import org.junit.Test ;
+import org.apache.jena.query.QueryParseException;
+import org.junit.Test;
public class TestUnescape
{
- @Test public void testEsc01() { execTest("x\\uabcd", "x\uabcd") ; }
- @Test public void testEsc02() { execTest("\\uabcdx", "\uabcdx") ; }
- @Test public void testEsc03() { execTest("1234\\uabcd1234", "1234\uabcd1234") ; }
- @Test public void testEsc04() { execTestFail("\\X") ; }
- @Test public void testEsc05() { execTestFail("\\Xz") ; }
- @Test public void testEsc06() { execTestFail("a\\X") ; }
-
- @Test public void testEscUni01() { execTestFail("\\uabck") ; }
- @Test public void testEscUni02() { execTestFail("\\uab") ; }
- @Test public void testEscUni03() { execTestFail("\\uabc") ; }
- @Test public void testEscUni04() { execTestFail("\\ua") ; }
- @Test public void testEscUni05() { execTestFail("\\u") ; }
- @Test public void testEscUni06() { execTestFail("\\") ; }
- @Test public void testEscUni07() { execTest("\\u0020", " ") ; }
- @Test public void testEscUni08() { execTest("\\uFFFF", "\uFFFF") ; }
- @Test public void testEscUni09() { execTest("\\u0000", "\u0000") ; }
- @Test public void testEscUni10() { execTestFail("\\U0000") ; }
- @Test public void testEscUni11() { execTestFail("\\U0000A") ; }
- @Test public void testEscUni12() { execTestFail("\\U0000AB") ; }
- @Test public void testEscUni13() { execTestFail("\\U0000ABC") ; }
- @Test public void testEscUni14() { execTest("\\U0000ABCD", "\uABCD") ; }
- @Test public void testEscUni15() { execTestFail("\\U0000") ; }
- @Test public void testEscUni16() { execTest("\\U00000000", "\u0000") ; }
- @Test public void testEscUni17() { execTest("x\\tx\\nx\\r", "x\tx\nx\r") ; }
- @Test public void testEscUni18() { execTest("x\\t\\n\\r", "x\t\n\r") ; }
-
+ @Test public void testEsc01() { execTest("x\\uabcd", "x\uabcd"); }
+ @Test public void testEsc02() { execTest("\\uabcdx", "\uabcdx"); }
+ @Test public void testEsc03() { execTest("1234\\uabcd1234", "1234\uabcd1234"); }
+ @Test public void testEsc04() { execTestFail("\\X"); }
+ @Test public void testEsc05() { execTestFail("\\Xz"); }
+ @Test public void testEsc06() { execTestFail("a\\X"); }
+
+ @Test public void testEscUni01() { execTestFail("\\uabck"); }
+ @Test public void testEscUni02() { execTestFail("\\uab"); }
+ @Test public void testEscUni03() { execTestFail("\\uabc"); }
+ @Test public void testEscUni04() { execTestFail("\\ua"); }
+ @Test public void testEscUni05() { execTestFail("\\u"); }
+ @Test public void testEscUni06() { execTestFail("\\"); }
+ @Test public void testEscUni07() { execTest("\\u0020", " "); }
+ @Test public void testEscUni08() { execTest("\\uFFFF", "\uFFFF"); }
+ @Test public void testEscUni09() { execTest("\\u0000", "\u0000"); }
+ @Test public void testEscUni10() { execTestFail("\\U0000"); }
+ @Test public void testEscUni11() { execTestFail("\\U0000A"); }
+ @Test public void testEscUni12() { execTestFail("\\U0000AB"); }
+ @Test public void testEscUni13() { execTestFail("\\U0000ABC"); }
+ @Test public void testEscUni14() { execTest("\\U0000ABCD", "\uABCD"); }
+ @Test public void testEscUni15() { execTestFail("\\U0000"); }
+ @Test public void testEscUni16() { execTest("\\U00000000", "\u0000"); }
+ @Test public void testEscUni17() { execTest("x\\tx\\nx\\r", "x\tx\nx\r"); }
+ @Test public void testEscUni18() { execTest("x\\t\\n\\r", "x\t\n\r"); }
+
private void execTestFail(String input) {
try {
String s = QueryParserBase.unescapeStr(input);
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 6bc712e9d7..b0f0c3ee93 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
@@ -18,129 +18,132 @@
package org.apache.jena.sparql.lang;
-import org.apache.jena.query.Query ;
-import org.apache.jena.query.QueryException ;
-import org.apache.jena.query.QueryFactory ;
-import org.junit.Test ;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryFactory;
+import org.junit.Test;
public class TestVarScope
{
private static void scope(String queryStr)
{
- Query query = QueryFactory.create(queryStr) ;
+ Query query = QueryFactory.create(queryStr);
}
-
- @Test public void scope_01() { scope("SELECT ?x { ?s ?p ?o }") ; }
- @Test public void scope_02() { scope("SELECT ?s { ?s ?p ?o }") ; }
-
- @Test public void scope_03() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o }") ; }
-
+
+ @Test public void scope_01() { scope("SELECT ?x { ?s ?p ?o }"); }
+ @Test public void scope_02() { scope("SELECT ?s { ?s ?p ?o }"); }
+
+ @Test public void scope_03() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o }"); }
+
@Test(expected=QueryException.class)
- public void scope_04() { scope("SELECT (?o+1 AS ?o) { ?s ?p ?o }") ; }
-
+ public void scope_04() { scope("SELECT (?o+1 AS ?o) { ?s ?p ?o }"); }
+
@Test(expected=QueryException.class)
- public void scope_05() { scope("SELECT (?o+1 AS ?x) (?o+1 AS ?x) { ?s ?p ?o }") ; }
+ 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 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)") ; }
+ 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_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_10() { scope("SELECT (?o+1 AS ?x) { ?s ?p ?o MINUS { ?s ?p ?x} } "); }
- @Test public void scope_09() { scope("SELECT (count(*) AS ?X) (?X+?o AS ?Z) { ?s ?p ?o } GROUP BY ?o") ; }
-
- @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_15() { 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(expected=QueryException.class)
- public void scope_16() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o } } } ") ; }
+ public void scope_16() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o } } } "); }
@Test(expected=QueryException.class)
- public void scope_17() { scope("SELECT (?o+1 AS ?o) { { SELECT (123 AS ?x) {?s ?p ?o FILTER(?x > 57)} } } ") ; }
+ 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 public void scope_20() { scope("SELECT ?x { ?x ?p ?o } GROUP BY ?x") ; }
-
@Test (expected=QueryException.class)
- public void scope_21() { scope("SELECT ?o { ?x ?p ?o } GROUP BY ?x") ; }
+ public void scope_21() { scope("SELECT ?o { ?x ?p ?o } GROUP BY ?x"); }
@Test(expected=QueryException.class)
- public void scope_22() { scope("SELECT * { ?s ?p ?o BIND(5 AS ?o) }") ; }
-
- @Test public void scope_23() { scope("SELECT * { ?s ?p ?o { BIND(5 AS ?o) } }") ; }
-
+ public void scope_22() { scope("SELECT * { ?s ?p ?o BIND(5 AS ?o) }"); }
+
+ @Test public void scope_23() { scope("SELECT * { ?s ?p ?o { BIND(5 AS ?o) } }"); }
+
@Test(expected=QueryException.class)
- public void scope_24() { scope("SELECT * { { ?s ?p ?o } BIND(5 AS ?o) }") ; }
-
- @Test public void scope_25() { scope("SELECT * { { ?s ?p ?o } { BIND(5 AS ?o) } }") ; }
-
- @Test public void scope_26() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(?o2+5 AS ?z) }") ; }
+ public void scope_24() { scope("SELECT * { { ?s ?p ?o } BIND(5 AS ?o) }"); }
+
+ @Test public void scope_25() { scope("SELECT * { { ?s ?p ?o } { BIND(5 AS ?o) } }"); }
+
+ @Test public void scope_26() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(?o2+5 AS ?z) }"); }
@Test(expected=QueryException.class)
- public void scope_27() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o2) }") ; }
+ public void scope_27() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o2) }"); }
@Test(expected=QueryException.class)
- public void scope_28() { scope("SELECT * { { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} } BIND(?o+5 AS ?o2) }") ; }
+ public void scope_28() { scope("SELECT * { { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} } BIND(?o+5 AS ?o2) }"); }
@Test(expected=QueryException.class)
- public void scope_29() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o) }") ; }
+ public void scope_29() { scope("SELECT * { ?s ?p ?o OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o) }"); }
@Test(expected=QueryException.class)
- public void scope_30() { scope("SELECT * { { ?s ?p ?o } OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o) }") ; }
-
+ public void scope_30() { scope("SELECT * { { ?s ?p ?o } OPTIONAL{?s ?p2 ?o2} BIND(5 AS ?o) }"); }
+
@Test(expected=QueryException.class)
- public void scope_34() { scope("SELECT * { { ?s ?p ?o } UNION {?s ?p2 ?o2} BIND(5 AS ?o) }") ; }
-
+ public void scope_34() { scope("SELECT * { { ?s ?p ?o } UNION {?s ?p2 ?o2} BIND(5 AS ?o) }"); }
+
@Test
- public void scope_35() { scope("SELECT * { ?s1 ?p1 ?z { ?s ?p ?z } UNION { BIND(5 AS ?z) } }") ; }
-
+ public void scope_35() { scope("SELECT * { ?s1 ?p1 ?z { ?s ?p ?z } UNION { BIND(5 AS ?z) } }"); }
+
// Subqueries
-
+
@Test(expected=QueryException.class)
- public void scope_50() { scope("SELECT * { SELECT (?o+1 AS ?o) { ?s ?p ?o }}") ; }
-
+ public void scope_50() { scope("SELECT * { SELECT (?o+1 AS ?o) { ?s ?p ?o }}"); }
+
@Test
- public void scope_51()
- {
- scope("SELECT ?y { " +
- "{ { SELECT (?x AS ?y) { ?s ?p ?x } } } UNION { { SELECT (?x AS ?y) { ?s ?p ?x } } }" +
- "}") ;
+ public void scope_51() {
+ scope("SELECT ?y { " + "{ { SELECT (?x AS ?y) { ?s ?p ?x } } } UNION { { SELECT (?x AS ?y) { ?s ?p ?x } } }" + "}");
}
-
- @Test(expected=QueryException.class)
- public void scope_52()
- {
- scope("SELECT ?y { " +
- "{ { SELECT (?o+1 AS ?x) (?o+1 AS ?x) { ?s ?p ?o } } UNION { ?s ?p ?x } }" +
- "}") ;
+
+ @Test(expected = QueryException.class)
+ public void scope_52() {
+ scope("SELECT ?y { " + "{ { SELECT (?o+1 AS ?x) (?o+1 AS ?x) { ?s ?p ?o } } UNION { ?s ?p ?x } }" + "}");
}
-
- @Test(expected=QueryException.class)
- public void scope_63()
- {
+
+ @Test(expected = QueryException.class)
+ public void scope_63() {
// Check nested things get checked.
- scope("SELECT * { { ?s ?p ?o } UNION { ?s ?p ?o1 BIND(5 AS ?o1) } }") ;
+ scope("SELECT * { { ?s ?p ?o } UNION { ?s ?p ?o1 BIND(5 AS ?o1) } }");
}
-
- @Test(expected=QueryException.class)
- public void scope_64()
- {
+
+ @Test(expected = QueryException.class)
+ public void scope_64() {
// Check nested things get checked.
- scope("SELECT * { { { ?s ?p ?o1 BIND(5 AS ?o1) } } }") ;
+ 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_65() {
+ scope("SELECT ( (?x+1) AS ?x ) {}");
}
+ @Test(expected = QueryException.class)
+ public void scope_66() {
+ scope("SELECT ( (?x+1) AS ?y) (2 AS ?x) {}");
+ }
- @Test(expected=QueryException.class)
- public void scope_66()
- {
- scope("SELECT ( (?x+1) AS ?y) (2 AS ?x) {}") ;
+ // GH-3164
+ @Test public void scope_70() {
+ String qsVarScope = """
+ SELECT ?s (MIN(?v) as ?min) WHERE { ?s <value> ?v }
+ GROUP BY ?s
+ VALUES ?min { 2 5 }
+ """;
+ scope(qsVarScope);
+ }
+
+ @Test public void scope_71() {
+ scope("SELECT (MIN(?v) as ?min) WHERE {} VALUES ?min { 2 5 }");
}
}