[ https://issues.apache.org/jira/browse/JENA-1523?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andy Seaborne resolved JENA-1523. --------------------------------- Resolution: Fixed Assignee: Andy Seaborne Fix Version/s: Jena 3.8.0 > "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 > Assignee: Andy Seaborne > Priority: Major > Fix For: Jena 3.8.0 > > > 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)