[
https://issues.apache.org/jira/browse/JENA-1487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16362080#comment-16362080
]
Rob Vesse commented on JENA-1487:
---------------------------------
This behaviour is perfectly in line with the spec. The difference between the
two queries is the use of the {{COUNT(?o)}} aggregate. Per the specification
([https://www.w3.org/TR/sparql11-query/#defn_aggCount)] the count of a group is
the cardinality of the given variable which in this case is zero because the
cardinality of zero rows is always zero so using the aggregation introduces a
single binding.
Note that the fact that the aggregate occurs in the {{ORDER BY}} is not
relevant here, aggregates are extracted out and executed as part of the group
by operator per the specification
([https://www.w3.org/TR/sparql11-query/#sparqlGroupAggregate] and
[https://www.w3.org/TR/sparql11-query/#aggregateAlgebra]). This is more easily
seen in the algebra form:
{noformat}
(project (?s)
(order ((desc ?.0))
(group (?s) ((?.0 (count ?o)))
(sequence
(filter false
(table unit))
(bgp (triple ?s ?p ?o))))))
{noformat}
Versus:
{noformat}
(project (?s)
(group (?s)
(sequence
(filter false
(table unit))
(bgp (triple ?s ?p ?o)))))
{noformat}
Note that in the first form {{COUNT(?o)}} is converted into an expression as
part of the group operator so by the time that it is seen by {{ORDER BY}} it is
simply operating over a temporary internal variable.
> Incorrect SPARQL query result set when applying ORDER BY after an empty GROUP
> BY
> --------------------------------------------------------------------------------
>
> Key: JENA-1487
> URL: https://issues.apache.org/jira/browse/JENA-1487
> Project: Apache Jena
> Issue Type: Bug
> Components: ARQ
> Affects Versions: Jena 3.6.0
> Reporter: Claus Stadler
> Priority: Major
>
> Ordering an empty result set must not introduce additional bindings, but this
> happens with the following example (run on an arbitrary dataset - including
> an empty one):
> {code:bash}
> ./fuseki-server --file=test.ttl /foobar
> {code}
> The Json below is obtained from the Fuski bundle; but I noted this issue
> first using the ARQ API, where the incorrect result set contains a single
> BindingProjectNamed instance.
> {code:sql}
> SELECT ?s
> WHERE {
> ?s ?p ?o
> FILTER(false)
> }
> GROUP BY ?s
> ORDER BY DESC(COUNT(?o))
> {code}
> {code:json}
> {
> "head": {
> "vars": [ "s" ]
> } ,
> "results": {
> "bindings": [
> {
> # NOTE THIS EMPTY BINDING HERE!
> }
> ]
> }
> }
> {code}
> The result set is correct without the ORDER BY:
> {code:sql}
> SELECT ?s
> WHERE {
> ?s ?p ?o
> FILTER(false)
> }
> GROUP BY ?s
> {code}
> {code:json}
> {
> "head": {
> "vars": [ "s" ]
> } ,
> "results": {
> "bindings": [
> # CORRECT
> ]
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)