Shawn Smith created JENA-1523:
---------------------------------

             Summary: "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


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