Hi all,

We are attempting to upgrade from Jena 3.5 to Jena 4.10.0.
We are using  “RDFConnection.connect(TDBFactory.createDataset());” for unit 
tests.
The below query works totally fine in Jena 3.5 but fails with the following 
exception in Jena 4.10.0.
I have confirmed that the query is correct and works totally fine in Neptune 
RDF as well. Can you please help us on how to go about this ? or please suggest 
if the query needs to updated to something else for jena 4.10.0.
I have also attached the code sample to reproduce the issue.

Query :

INSERT {
      GRAPH 
<http://knowledge-store-test.amazon.com/b4a77401-9233-4115-b9db-dcbed33d73e2> {
        <rdf:s1> <rdf:p1> "o1" .
      }
    }
    WHERE
      { GRAPH 
<http://knowledge-store-test.amazon.com/b4a77401-9233-4115-b9db-dcbed33d73e2>
          { <rdf:s2>  <rdf:p2>  <rdf:o2>}
        GRAPH 
<http://knowledge-store-test.amazon.com/8bfa2a32-f95e-476f-99e9-84b355bed6a2>
          { FILTER NOT EXISTS { <rdf:s3>  <rdf:p3>  "o3" }}
      }

Error :

    org.apache.jena.sparql.ARQInternalErrorException: compile(Element)/Not a 
structural element: ElementFilter
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.broken(AlgebraGenerator.java:577)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileUnknownElement(AlgebraGenerator.java:170)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileElement(AlgebraGenerator.java:156)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileElementGraph(AlgebraGenerator.java:426)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileElement(AlgebraGenerator.java:133)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileOneInGroup(AlgebraGenerator.java:319)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileElementGroup(AlgebraGenerator.java:202)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compileElement(AlgebraGenerator.java:127)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compile(AlgebraGenerator.java:113)
        at 
app//org.apache.jena.sparql.algebra.AlgebraGenerator.compile(AlgebraGenerator.java:100)
        at app//org.apache.jena.sparql.algebra.Algebra.compile(Algebra.java:73)
        at 
app//org.apache.jena.sparql.engine.QueryEngineBase.createOp(QueryEngineBase.java:140)
        at 
app//org.apache.jena.sparql.engine.QueryEngineBase.<init>(QueryEngineBase.java:57)
        at 
app//org.apache.jena.sparql.engine.main.QueryEngineMain.<init>(QueryEngineMain.java:45)
        at 
app//org.apache.jena.tdb.solver.QueryEngineTDB.<init>(QueryEngineTDB.java:63)
        at 
app//org.apache.jena.tdb.solver.QueryEngineTDB$QueryEngineFactoryTDB.create(QueryEngineTDB.java:135)
        at 
app//org.apache.jena.query.QueryExecutionFactory.makePlan(QueryExecutionFactory.java:442)
        at 
app//org.apache.jena.query.QueryExecutionFactory.createPlan(QueryExecutionFactory.java:418)
        at 
app//org.apache.jena.sparql.modify.UpdateEngineWorker.evalBindings(UpdateEngineWorker.java:532)
        at 
app//org.apache.jena.sparql.modify.UpdateEngineWorker.visit(UpdateEngineWorker.java:371)
        at 
app//org.apache.jena.sparql.modify.request.UpdateModify.visit(UpdateModify.java:100)
        at 
app//org.apache.jena.sparql.modify.UpdateVisitorSink.send(UpdateVisitorSink.java:45)
        at 
app//org.apache.jena.sparql.modify.UpdateVisitorSink.send(UpdateVisitorSink.java:31)
        at 
[email protected]/java.util.ArrayList$Itr.forEachRemaining(ArrayList.java:1003)
        at 
[email protected]/java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections.java:1061)
        at app//org.apache.jena.atlas.iterator.Iter.sendToSink(Iter.java:776)
        at 
app//org.apache.jena.sparql.modify.UpdateProcessorBase.execute(UpdateProcessorBase.java:60)
        at 
app//org.apache.jena.sparql.exec.UpdateExecDataset.execute(UpdateExecDataset.java:37)
        at 
app//org.apache.jena.sparql.exec.UpdateExecDatasetBuilder.execute(UpdateExecDatasetBuilder.java:164)
        at 
app//org.apache.jena.sparql.exec.UpdateExecDatasetBuilder.execute(UpdateExecDatasetBuilder.java:169)
        at 
app//org.apache.jena.rdflink.RDFLinkDataset.lambda$update$1(RDFLinkDataset.java:107)
        at app//org.apache.jena.system.Txn.exec(Txn.java:77)
        at app//org.apache.jena.system.Txn.executeWrite(Txn.java:125)
        at 
app//org.apache.jena.rdflink.RDFLinkDataset.update(RDFLinkDataset.java:107)
        at 
app//org.apache.jena.rdflink.RDFConnectionAdapter.update(RDFConnectionAdapter.java:131)
        at org.apache.jena.rdfconnection.RDFConnection$update$0.call(Unknown 
Source)
        at 
app//org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at 
app//org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
        at 
app//org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
        at 
app//com.amazon.pk.knowledgestore.rdf.graph.store.RdfQuadStoreSparqlTest.update(RdfQuadStoreSparqlTest.groovy:115)
        at 
com.amazon.pk.knowledgestore.rdf.graph.store.RdfQuadStoreSparqlTest$update.callCurrent(Unknown
 Source)
        at 
app//org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
        at 
app//org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)
        at 
app//org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:194)
        at 
app//com.amazon.pk.knowledgestore.rdf.graph.store.RdfQuadStoreSparqlTest.testQueryFailure(RdfQuadStoreSparqlTest.groovy:108)

Code to repro the issue :


private final Triple triple1 = new Triple(
        createURI("rdf:s1"),
        createURI("rdf:p1"),
        createLiteral("o1"))
private final Triple triple2 = new Triple(
        createURI("rdf:s2"),
        createURI("rdf:p2"),
        createURI("rdf:o2"))
private final Triple triple3 = new Triple(
        createURI("rdf:s3"),
        createURI("rdf:p3"),
        createLiteral("o3"))

private final graph1 = getNamedGraph()
private final graph2 = getNamedGraph()

@Test
void testQueryFailure() {

    RDFConnection conn = RDFConnection.connect(TDBFactory.createDataset());

    UpdateBuilder updateBuilder = new UpdateBuilder();
    updateBuilder.addInsert(graph1, triple1);

    SelectBuilder where = new SelectBuilder();
    where.addWhere(triple2);
    updateBuilder.addGraph(graph1, where);


    SelectBuilder notExists = new SelectBuilder();
    notExists.addWhere(triple3);
    SelectBuilder where2 = new SelectBuilder();
    where2.addFilter(where2.getExprFactory().notexists(notExists));
    updateBuilder.addGraph(graph2, where2);

    UpdateRequest updateRequest = updateBuilder.buildRequest();

    System.out.println("From the tests : " + updateRequest.toString())

    update(conn, updateRequest);
}

public void update(final RDFConnection conn, final UpdateRequest request) {
    conn.begin(ReadWrite.WRITE);
    try {
        conn.update(request);
        conn.commit();
    } finally {
        conn.end();
    }
}


Thanks
Kishan Dhamotharan

Reply via email to