Jan Martin Keil created JENA-1841:
-------------------------------------

             Summary: Side Effect of Datatype <java:java.util.UUID> Use in Query
                 Key: JENA-1841
                 URL: https://issues.apache.org/jira/browse/JENA-1841
             Project: Apache Jena
          Issue Type: Improvement
    Affects Versions: Jena 3.14.0
            Reporter: Jan Martin Keil


I faced a bug caused by a side effect of using the datatype 
<java:java.util.UUID> in a query.

Short story is that you can not use this datatype in model parsing or queries 
after you once used it in a query.

I did not completely  break it down to a specific peace of code, but I wrote 
some testcases that narrow down the issue. Please note that the order of 
execution of the test methods effect the result. So please first try to execute 
single test methods before executing the whole test class.
{code:java}
import java.io.ByteArrayInputStream;
import java.util.UUID;import org.apache.jena.arq.querybuilder.SelectBuilder;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.junit.jupiter.api.Test;public class UuidParsingintoModelOrQuery {    
@Test
        public void uuidParsingIntoSingleModel() throws Exception {
                UUID uuid1 = 
UUID.fromString("00000000-0000-0000-0000-000000000000");
                UUID uuid2 = 
UUID.fromString("00000000-0000-0000-0000-000000000001");           String 
modelStr = "_:a <http://example.org/p1> \"" + uuid1 + 
"\"^^<java:java.util.UUID> .\n"
                                + "_:a <http://example.org/p2> \"" + uuid1 + 
"\"^^<java:java.util.UUID> .";
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
                // repeat
                modelStr = "_:a <http://example.org/p1> \"" + uuid2 + 
"\"^^<java:java.util.UUID> .\n"
                                + "_:a <http://example.org/p2> \"" + uuid2 + 
"\"^^<java:java.util.UUID> .";
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
        }       @Test
        public void sameUuidParsingIntoSingleModel() throws Exception {
                UUID uuid1 = 
UUID.fromString("00000000-0000-0000-0000-000000000002");
                UUID uuid2 = 
UUID.fromString("00000000-0000-0000-0000-000000000003");
                String modelStr = "_:a <http://example.org/p1> \"" + uuid1 + 
"\"^^<java:java.util.UUID> .\n"
                                + "_:a <http://example.org/p2> \"" + uuid2 + 
"\"^^<java:java.util.UUID> .";
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
                // repeat
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
        }       @Test
        public void sameUuidParsingIntoMultipleModel() throws Exception {
                UUID uuid = 
UUID.fromString("00000000-0000-0000-0000-000000000004");
                String modelStr = "_:a <http://example.org/p1> \"" + uuid + 
"\"^^<java:java.util.UUID> .";
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
                ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "", "N-TRIPLE");
        }       @Test
        public void uuidUseInQuery() throws Exception {
                UUID uuid = 
UUID.fromString("00000000-0000-0000-0000-000000000005");
                SelectBuilder select = new SelectBuilder();
                select.addWhere("?a", "<http://example.org/p>", "?uuid");
                select.addFilter(select.getExprFactory().eq("?uuid", uuid));
                QueryExecution q = QueryExecutionFactory.create(select.build());
        }       @Test
        public void uuidParsingIntoQuery() throws Exception {
                UUID uuid = 
UUID.fromString("00000000-0000-0000-0000-000000000006");
                SelectBuilder select = new SelectBuilder();
                select.addWhere("?a", "<http://example.org/p>", "?uuid");
                select.addFilter(select.getExprFactory().eq("?uuid", uuid));
                QueryExecution q = 
QueryExecutionFactory.create(select.toString());
        }       @Test
        public void uuidUseInQueryAndParsingIntoModel() throws Exception {
                UUID uuid = 
UUID.fromString("00000000-0000-0000-0000-000000000007");
                SelectBuilder select = new SelectBuilder();
                select.addWhere("?a", "<http://example.org/p>", "?uuid");
                select.addFilter(select.getExprFactory().eq("?uuid", uuid));
                QueryExecution q = QueryExecutionFactory.create(select.build());
                String modelStr = "_:a <http://example.org/p1> \"" + uuid + 
"\"^^<java:java.util.UUID> .\n"
                                + "_:a <http://example.org/p2> \"" + uuid + 
"\"^^<java:java.util.UUID> .";
                Model model = ModelFactory.createDefaultModel().read(new 
ByteArrayInputStream(modelStr.getBytes()), "",
                                "N-TRIPLE");
        }
}{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to