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)