Hi Jérémy,

Thank you for a complete and focused report.  A fine example.

It is recorded as:

  https://issues.apache.org/jira/browse/JENA-1202

It occurs if one side of the "=" is a constant expression which an earlier optimizer step has folded to a pre-computed value.

I've pushed a fix which will show up in the next development build.

    Andy

On 30/06/16 15:09, Jérémy Coulon wrote:
Hi,

I have the following dataset (stored in file trees.nt):
<http://www.example.com/poi#tree1> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://www.example.com/poi#tree> .
<http://www.example.com/poi#tree1> <http://www.example.com/info#height>
"10"^^<http://www.w3.org/2001/XMLSchema#integer> .
<http://www.example.com/poi#tree2> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://www.example.com/poi#tree> .
<http://www.example.com/poi#tree2> <http://www.example.com/info#height>
"20"^^<http://www.w3.org/2001/XMLSchema#integer> .
<http://www.example.com/poi#tree3> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://www.example.com/poi#tree> .
<http://www.example.com/poi#tree3> <http://www.example.com/info#height>
"30"^^<http://www.w3.org/2001/XMLSchema#integer> .
<http://www.example.com/poi#tree4> <
http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
http://www.example.com/poi#tree> .
<http://www.example.com/poi#tree4> <http://www.example.com/info#height>
"30"^^<http://www.w3.org/2001/XMLSchema#integer> .

and I want to execute the following sparql query (stored in file q1.txt) (I
know the filter is stupid):
SELECT ?x WHERE {
   ?x <http://www.example.com/info#height> ?z
   FILTER(10 * (1 + 2)=?z)
}

when running:
sparql --data=trees.nt --query=q1.txt --optimize=off

I get the correct answer.
However, when running the same query with optimizations turned on:
sparql --data=trees.nt --query=q1.txt --optimize=on

I received the following exception:
Exception
java.lang.NullPointerException
     at java.util.Objects.requireNonNull(Objects.java:203)
     at org.apache.jena.rdf.model.impl.Util.isSimpleString(Util.java:205)
     at
org.apache.jena.sparql.algebra.optimize.TransformFilterEquality.preprocess(TransformFilterEquality.java:219)
     at
org.apache.jena.sparql.algebra.optimize.TransformFilterEquality.preprocessFilterEquality(TransformFilterEquality.java:163)
     at
org.apache.jena.sparql.algebra.optimize.TransformFilterEquality.apply(TransformFilterEquality.java:96)
     at
org.apache.jena.sparql.algebra.optimize.TransformFilterEquality.transform(TransformFilterEquality.java:88)
     at
org.apache.jena.sparql.algebra.TransformWrapper.transform(TransformWrapper.java:59)
     at org.apache.jena.sparql.algebra.op.OpFilter.apply(OpFilter.java:100)
     at
org.apache.jena.sparql.algebra.Transformer$ApplyTransformVisitor.visitFilter(Transformer.java:401)
     at
org.apache.jena.sparql.algebra.OpVisitorByType.visit(OpVisitorByType.java:110)
     at org.apache.jena.sparql.algebra.op.OpFilter.visit(OpFilter.java:103)
     at
org.apache.jena.sparql.algebra.OpWalker$WalkerVisitor.visit1(OpWalker.java:85)
     at
org.apache.jena.sparql.algebra.OpWalker$WalkerVisitor.visitFilter(OpWalker.java:91)
     at
org.apache.jena.sparql.algebra.OpVisitorByType.visit(OpVisitorByType.java:110)
     at org.apache.jena.sparql.algebra.op.OpFilter.visit(OpFilter.java:103)
     at
org.apache.jena.sparql.algebra.OpWalker$WalkerVisitor.visit1(OpWalker.java:83)
     at
org.apache.jena.sparql.algebra.OpVisitorByType.visitModifer(OpVisitorByType.java:42)
     at
org.apache.jena.sparql.algebra.OpVisitorByType.visit(OpVisitorByType.java:158)
     at org.apache.jena.sparql.algebra.op.OpProject.visit(OpProject.java:47)
     at org.apache.jena.sparql.algebra.OpWalker.walk(OpWalker.java:43)
     at org.apache.jena.sparql.algebra.OpWalker.walk(OpWalker.java:38)
     at
org.apache.jena.sparql.algebra.Transformer.applyTransformation(Transformer.java:147)
     at
org.apache.jena.sparql.algebra.Transformer.transformation(Transformer.java:140)
     at
org.apache.jena.sparql.algebra.Transformer.transformation(Transformer.java:129)
     at
org.apache.jena.sparql.algebra.Transformer.transformation(Transformer.java:123)
     at
org.apache.jena.sparql.algebra.Transformer.transform(Transformer.java:56)
     at
org.apache.jena.sparql.algebra.Transformer.transformSkipService(Transformer.java:86)
     at
org.apache.jena.sparql.algebra.Transformer.transformSkipService(Transformer.java:68)
     at
org.apache.jena.sparql.algebra.optimize.Optimize.apply(Optimize.java:282)
     at
org.apache.jena.sparql.algebra.optimize.Optimize.rewrite(Optimize.java:234)
     at
org.apache.jena.sparql.algebra.optimize.Optimize.optimize(Optimize.java:78)
     at org.apache.jena.sparql.algebra.Algebra.optimize(Algebra.java:65)
     at
org.apache.jena.sparql.engine.main.QueryEngineMain.modifyOp(QueryEngineMain.java:67)
     at
org.apache.jena.sparql.engine.QueryEngineBase.createPlan(QueryEngineBase.java:101)
     at
org.apache.jena.sparql.engine.QueryEngineBase.getPlan(QueryEngineBase.java:87)
     at
org.apache.jena.sparql.engine.main.QueryEngineMain$QueryEngineMainFactory.create(QueryEngineMain.java:91)
     at
org.apache.jena.sparql.engine.QueryExecutionBase.getPlan(QueryExecutionBase.java:524)
     at
org.apache.jena.sparql.engine.QueryExecutionBase.startQueryIterator(QueryExecutionBase.java:472)
     at
org.apache.jena.sparql.engine.QueryExecutionBase.execResultSet(QueryExecutionBase.java:511)
     at
org.apache.jena.sparql.engine.QueryExecutionBase.execSelect(QueryExecutionBase.java:172)
     at
org.apache.jena.sparql.util.QueryExecUtils.doSelectQuery(QueryExecUtils.java:196)
     at
org.apache.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:78)
     at arq.query.queryExec(query.java:216)
     at arq.query.exec(query.java:153)
     at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
     at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
     at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
     at arq.sparql.main(sparql.java:28)

Thank you for your help.
--
Jeremy


Reply via email to