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 2018/04/13 21:11:56 UTC
[07/10] jena git commit: JENA-1523: Allow internal variables names in
variable parsing.
JENA-1523: Allow internal variables names in variable parsing.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/991ec09c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/991ec09c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/991ec09c
Branch: refs/heads/master
Commit: 991ec09cb1ac24c4c3b3e9d440b426045d2207be
Parents: db818ea
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Apr 13 17:53:48 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Apr 13 18:21:59 2018 +0100
----------------------------------------------------------------------
.../org/apache/jena/riot/tokens/TokenizerText.java | 11 ++++++++---
.../org/apache/jena/riot/tokens/TestTokenizer.java | 15 +++++++++++++++
2 files changed, 23 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/991ec09c/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
index d3cd80c..9f92fe9 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
@@ -739,7 +739,13 @@ public final class TokenizerText implements Tokenizer
return readCharsAnd(leadingDigitAllowed, leadingSignAllowed, extraCharsWord, false);
}
- static private char[] extraCharsVar = new char[]{'_', '.', '-', '?', '@', '+'};
+ // This array adds the other characters that can occurs in an internal variable name.
+ // Variables can be created with SPARQL-illegal syntax to ensure they do not clash with
+ // variables in the query from the application.
+ // See ARQConstants.
+ // allocVarAnonMarker, allocVarMarker, globalVar, allocVarBNodeToVar, allocVarScopeHiding
+ // but this set is wider and matches anywhere in the name after the first '?'.
+ static private char[] extraCharsVar = new char[]{'_', '.', '-', '?', '@', '+', '/', '~'};
private String readVarName() {
return readCharsAnd(true, true, extraCharsVar, true);
@@ -747,8 +753,7 @@ public final class TokenizerText implements Tokenizer
// See also readBlankNodeLabel
- private String readCharsAnd(boolean leadingDigitAllowed, boolean leadingSignAllowed, char[] extraChars,
- boolean allowFinalDot) {
+ private String readCharsAnd(boolean leadingDigitAllowed, boolean leadingSignAllowed, char[] extraChars, boolean allowFinalDot) {
stringBuilder.setLength(0);
int idx = 0;
if ( !leadingDigitAllowed ) {
http://git-wip-us.apache.org/repos/asf/jena/blob/991ec09c/jena-arq/src/test/java/org/apache/jena/riot/tokens/TestTokenizer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/tokens/TestTokenizer.java b/jena-arq/src/test/java/org/apache/jena/riot/tokens/TestTokenizer.java
index 4baf1f2..f7ae2d1 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/tokens/TestTokenizer.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/tokens/TestTokenizer.java
@@ -655,6 +655,21 @@ public class TestTokenizer extends BaseTest {
}
@Test
+ public void tokenUnit_var7() {
+ tokenizeAndTestExact("?" + ARQConstants.allocVarScopeHiding + "0", TokenType.VAR, ARQConstants.allocVarScopeHiding + "0") ;
+ }
+
+ @Test
+ public void tokenUnit_var8() {
+ tokenizeAndTestExact("?" + ARQConstants.allocVarAnonMarker + "0", TokenType.VAR, ARQConstants.allocVarAnonMarker + "0") ;
+ }
+
+ @Test
+ public void tokenUnit_var9() {
+ tokenizeAndTestExact("?" + ARQConstants.allocVarBNodeToVar + "ABC", TokenType.VAR, ARQConstants.allocVarBNodeToVar + "ABC") ;
+ }
+
+ @Test
public void tokenUnit_hex1() {
tokenizeAndTestExact("0xABC", TokenType.HEX, "0xABC") ;
}