Justin created JENA-2176:
----------------------------

             Summary: TDB2 queries can execute quadpatterns with a literal in 
the subject position
                 Key: JENA-2176
                 URL: https://issues.apache.org/jira/browse/JENA-2176
             Project: Apache Jena
          Issue Type: Bug
          Components: TDB2
    Affects Versions: Jena 4.2.0
            Reporter: Justin


Hello,

If you try to put a triple into a TDB2 with a literal in the subject position 
you get the following:
```
ERROR riot :: [line: 6, col: 18] Subject is not a URI or blank node
```

So far so good.

But since literals can not be in the subject position of a triple a query 
against a TDB2 should never attempt to find a literal in the subject position 
of a triple, right? It would be a waste of time.

But if I am reading the logs correctly that is what appears to happen:
```

root@ec6206bb523f:/mnt/tdb_42# cat /mnt/z.ttl 
@prefix ex: <http://example.com/> .

ex:apple ex:hasPart ex:skin .
ex:skin ex:hasName "Skin" .
ex:file ex:hasPart "lala" .
 
root@ec6206bb523f:/mnt/tdb_42# 
root@ec6206bb523f:/mnt/tdb_42# cat /mnt/z.rq 
prefix ex: <http://example.com/>

select * where {
?s ex:hasPart ?o .
optional \{ ?o ?p ?o1 . }
}

 

root@ec6206bb523f:/mnt/tdb_42# /mnt/apache-jena-4.2.0/bin/tdb2.tdbloader 
--loc=`pwd` /mnt/z.ttl
00:31:49 INFO loader :: Loader = LoaderPhased
00:31:49 INFO loader :: Start: /mnt/z.ttl
00:31:49 INFO loader :: Finished: /mnt/z.ttl: 3 tuples in 0.07s (Avg: 40)
00:31:49 INFO loader :: Finish - index SPO
00:31:49 INFO loader :: Start replay index SPO
00:31:49 INFO loader :: Index set: SPO => SPO->POS, SPO->OSP
00:31:49 INFO loader :: Index set: SPO => SPO->POS, SPO->OSP [3 items, 0.0 
seconds]
00:31:49 INFO loader :: Finish - index OSP
00:31:49 INFO loader :: Finish - index POS
root@ec6206bb523f:/mnt/tdb_42# /mnt/apache-jena-4.2.0/bin/tdb2.tdbquery -v 
--loc=`pwd` --query=/mnt/z.rq
 1 PREFIX ex: <http://example.com/>
 2
 3 SELECT *
 4 WHERE
 5 { ?s ex:hasPart ?o
 6 OPTIONAL
 7 \{ ?o ?p ?o1 }
 8 }

00:31:59 INFO exec :: QUERY
 PREFIX ex: <http://example.com/>

SELECT *
 WHERE
 { ?s ex:hasPart ?o
 OPTIONAL
 \{ ?o ?p ?o1 }
 }
00:31:59 INFO exec :: ALGEBRA
 (conditional
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?s 
<http://example.com/hasPart> ?o))
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?o ?p ?o1)))
00:32:00 INFO exec :: TDB
 (conditional
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?s 
<http://example.com/hasPart> ?o))
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?o ?p ?o1)))
00:32:00 INFO exec :: Execute :: ?s <http://example.com/hasPart> ?o
00:32:00 INFO exec :: TDB
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> <http://example.com/skin> ?p 
?o1))
00:32:00 INFO exec :: Execute :: <http://example.com/skin> ?p ?o1
00:32:00 INFO exec :: TDB
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> "lala" ?p ?o1))
00:32:00 INFO exec :: Execute :: "lala" ?p ?o1
--------------------------------------------
| s | o | p | o1 |
============================================
| ex:apple | ex:skin | ex:hasName | "Skin" |
| ex:file | "lala" | | |
--------------------------------------------

 
```


Doesn't this:
```
00:32:00 INFO exec :: TDB
 (quadpattern (quad <urn:x-arq:DefaultGraphNode> "lala" ?p ?o1))
00:32:00 INFO exec :: Execute :: "lala" ?p ?o1
```
mean a lookup was done in the TDB2 for a triple with the literal "lala" in the 
subject position? If so, shouldn't lookups like that be ignored as they will 
never find matching triples in the TDB2?



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

Reply via email to