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)