Hi all,

I have been playing around using ARQ to rewrite queries with Jena 2.13.0
and have encountered what appears to be a bug when roundtripping a valid
SPARQL query through to an SSE and back out as SPARQL.

The original SPARQL query is this:

SELECT (COUNT(*) as ?count) {
  SELECT DISTINCT ?uri ?graph WHERE {
    GRAPH ?graph {
      ?uri ?p ?o .
      }
    } LIMIT 1
}

This parses into the following SSE by going through QueryFactory.create ->
Algebra.compile :

#<OpProject (project (?tripod_count_var)
  (extend ((?tripod_count_var ?.0))
    (group () ((?.0 (count)))
      (distinct
        (project (?uri ?graph)
          (graph ?graph
            (bgp (triple ?uri ?p ?o))))))))

To my eye this looks correct so far... next we round trip it back into a
SPARQL query by using OpAsQuery.asQuery that results in:

#<Query SELECT DISTINCT  (count(*) AS ?tripod_count_var)
WHERE
  { { SELECT  ?uri ?graph
      WHERE
        { GRAPH ?graph
            { ?uri ?p ?o}
        }
    }
  }
>

This now seems broken...  asQuery has mixed the inner select distinct onto
the outer one.  This appears to happen with all sub selects.  I suspect it
might be due to OpAsQuery.asQuery building only Query object which is
somehow being reused for all sub queries.

I took a look in the unit tests and found that some of the test queries in
TestOpAsQuery are also subject to this bug e.g. the query on line 223:

SELECT ?key ?agg WHERE { { SELECT ?key (COUNT(*) AS ?agg) { ?key ?p ?o }
GROUP BY ?key } }

Though the tests don't seem to currently test for this kind of thing.

Can anyone confirm that this is a bug?

Kind regards,

R.

Reply via email to