You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Jérémy Coulon <je...@gmail.com> on 2016/06/30 14:09:06 UTC

NullPointerException in TransformFilterEquality optimizer

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

Re: NullPointerException in TransformFilterEquality optimizer

Posted by Andy Seaborne <an...@apache.org>.
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
>