Rick

Yes this does look like a bug

Please bear in mind however that conversion to algebra does NOT guarantee
to round trip because some parts of a query do not end up in the algebra
and so OpAsQuery has simply no way to reconstruct the exact original query

For example:

SELECT * {
  SELECT ?x { ?x a ?type }
}

Would round trip back to just:

SELECT ?x { ?x a ?type }


There are also other cases where things could move around slightly, for
example a BIND is potentially indistinguishable from a SELECT expression
depending on the structure of the query.

I have filed this as JENA-954 -
https://issues.apache.org/jira/browse/JENA-954

Thanks for reporting this,

Rob

On 04/06/2015 11:45, "Rick Moynihan" <[email protected]> wrote:

>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