[ 
https://issues.apache.org/jira/browse/JENA-1523?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16437608#comment-16437608
 ] 

ASF GitHub Bot commented on JENA-1523:
--------------------------------------

Github user afs commented on a diff in the pull request:

    https://github.com/apache/jena/pull/398#discussion_r181455972
  
    --- Diff: 
jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java ---
    @@ -739,16 +739,21 @@ private String readWordSub(boolean 
leadingDigitAllowed, boolean leadingSignAllow
             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.
    +    // Variable a creeated with SPARQL-illegal syntax to encsure they do 
not clash with
    --- End diff --
    
    Fixed!


> "VARS requires a list of variables" exception w/spilling and renamed vars
> -------------------------------------------------------------------------
>
>                 Key: JENA-1523
>                 URL: https://issues.apache.org/jira/browse/JENA-1523
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: ARQ
>    Affects Versions: Jena 3.7.0
>            Reporter: Shawn Smith
>            Priority: Major
>
> Spilling a {{DistinctDataBag}} or {{SortedDataBag}} when executing SPARQL 
> queries that are modified by {{TransformScopeRename}} can result in the 
> following:
> {noformat}
> org.apache.jena.riot.RiotException: [line: 1, col: 7 ] VARS requires a list 
> of variables (found '[SLASH]')
> at 
> org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:147)
> at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:148)
> at org.apache.jena.riot.lang.LangEngine.exceptionDirect(LangEngine.java:143)
> at org.apache.jena.riot.lang.LangEngine.exception(LangEngine.java:137)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream.access$1900(BindingInputStream.java:64)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream$IteratorTuples.directiveVars(BindingInputStream.java:227)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream$IteratorTuples.directives(BindingInputStream.java:140)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream$IteratorTuples.<init>(BindingInputStream.java:129)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream.<init>(BindingInputStream.java:99)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream.<init>(BindingInputStream.java:78)
> at 
> org.apache.jena.sparql.engine.binding.BindingInputStream.<init>(BindingInputStream.java:73)
> at 
> org.apache.jena.riot.system.SerializationFactoryFinder$1.createDeserializer(SerializationFactoryFinder.java:56)
> at 
> org.apache.jena.atlas.data.SortedDataBag.getInputIterator(SortedDataBag.java:190)
> at org.apache.jena.atlas.data.SortedDataBag.iterator(SortedDataBag.java:235)
> at org.apache.jena.atlas.data.SortedDataBag.iterator(SortedDataBag.java:206)
> at 
> org.apache.jena.atlas.data.DistinctDataBag.iterator(DistinctDataBag.java:94){noformat}
> The problem is that renaming variables prepends a "/" so that, for example, 
> the first line of the spill file might look like the following which 
> {{BindingInputStream.directiveVars()}} can't parse:
> {noformat}
> VARS ?/.1 ?/.0 ?v_2 ?v_21 ?v_1 .{noformat}
> Here's a test case that reproduces the exception:
> {noformat}
> @Test
> public void testWithRenamedVars() {
>     ExprVar expr = (ExprVar) Rename.renameVars(new ExprVar("1"), 
> Collections.emptySet());
>     BindingMap binding = BindingFactory.create();
>     binding.add(expr.asVar(), NodeFactory.createLiteral("foo"));
>     SortedDataBag<Binding> dataBag = BagFactory.newSortedBag(
>             new ThresholdPolicyCount<>(0),
>             SerializationFactoryFinder.bindingSerializationFactory(),
>             new BindingComparator(new ArrayList<>()));
>     try {
>         dataBag.add(binding);
>         dataBag.flush();
>         // Spill file looks like the following:
>         // VARS ?/1 .
>         // "foo" .
>         Binding actual = dataBag.iterator().next();
>         assertEquals(binding, actual);
>     } finally {
>         dataBag.close();
>     }
> }
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to