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)