[ 
https://issues.apache.org/jira/browse/JENA-1841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17052140#comment-17052140
 ] 

Andy Seaborne commented on JENA-1841:
-------------------------------------

Querybuilder is easier in that the query object generated is only for query; 
that is also a requirement - the query generated has to match the data. I'd 
prefer failing to generating something because it needs to align with the data.

Let's make changing LiteralLabelImpl a separate issue. That is deep enough that 
unexpected code will likely rely on it. I agree the current design is 
unsatisfactory; at the moment, I think requiring setup of custom datatypes is 
the way to go. "LiteralLabelImpl(value)" should error if it can't do the job 
within the current system. better early exception than unclear problems later. 
But this is a major change and goes with querybuilder following the same 
pattern.



> 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: Bug
>    Affects Versions: Jena 3.14.0
>            Reporter: Jan Martin Keil
>            Priority: Major
>
> 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 piece 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