You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Stephen Allen (JIRA)" <ji...@apache.org> on 2015/01/30 02:29:34 UTC
[jira] [Created] (JENA-874) Subqueries not functioning properly
when Filter clauses are present
Stephen Allen created JENA-874:
----------------------------------
Summary: Subqueries not functioning properly when Filter clauses are present
Key: JENA-874
URL: https://issues.apache.org/jira/browse/JENA-874
Project: Apache Jena
Issue Type: Bug
Components: ARQ
Affects Versions: Jena 2.12.2
Reporter: Stephen Allen
Priority: Blocker
Queries with Subqueries are not functioning properly when a filter clause exists. This is a regression, as it worked properly in 2.11.2 (I haven't checked 2.12.1).
Example:
{code:title=data.ttl}
<http://r1> a <http://type> .
<http://r1> a <http://type2> .
<http://r2> a <http://type> .
<http://r2> a <http://type2> .
<http://r3> a <http://type> .
<http://r3> a <http://type2> .
{code}
{code:title=Bind Query}
select *
where {
graph <http://graph1> {
{
select distinct (?_id as ?id)
where {
values ?_type {
<http://type2>
}
?_id a ?_type .
?_id a <http://type> .
filter ( ?_id = <http://r1> || ?_id = <http://r2> )
}
}
?id a <http://type> . bind (<http://type2> as ?type) . ?id a ?type .
}
}
order by ?id
{code}
{code:title=Bind Algebra}
(base <http://example/base/>
(order (?id)
(graph <http://graph1>
(join
(extend ((?type <http://type2>))
(join
(distinct
(project (?id)
(extend ((?id ?_id))
(filter (|| (= ?_id <http://r1>) (= ?_id <http://r2>))
(join
(table (vars ?_type)
(row [?_type <http://type2>])
)
(bgp
(triple ?_id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?_type)
(triple ?_id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://type>)
))))))
(bgp (triple ?id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://type>))))
(bgp (triple ?id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type))))))
{code}
{code:title=Filter Query}
select *
where {
graph <http://graph1> {
{
select distinct (?_id as ?id)
where {
values ?_type {
<http://type2>
}
?_id a ?_type .
?_id a <http://type> .
filter ( ?_id = <http://r1> || ?_id = <http://r2> )
}
}
?id a <http://type> . ?id a ?type . filter (?type != <http://type> ) .
}
}
order by ?id
{code}
{code:title=Filter Algebra}
(base <http://example/base/>
(order (?id)
(graph <http://graph1>
(filter (!= ?type <http://type>)
(join
(distinct
(project (?id)
(extend ((?id ?_id))
(filter (|| (= ?_id <http://r1>) (= ?_id <http://r2>))
(join
(table (vars ?_type)
(row [?_type <http://type2>])
)
(bgp
(triple ?_id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?_type)
(triple ?_id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://type>)
))))))
(bgp
(triple ?id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://type>)
(triple ?id <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type)
))))))
{code}
For both queries, the results should look like:
{code}
--------------------------------
| id | type |
================================
| <http://r1> | <http://type2> |
| <http://r2> | <http://type2> |
--------------------------------
{code}
However, only the Bind query actually works correctly. The Filter query returns no rows.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)