- From: Gregory Williams <greg@evilfunhouse.com>
- Date: Sun, 22 May 2011 15:16:01 -0400
- To: Lee Feigenbaum <lee@thefigtrees.net>
- Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
On May 22, 2011, at 2:59 PM, Lee Feigenbaum wrote:
> On 5/22/2011 2:52 PM, Gregory Williams wrote:
>> On May 22, 2011, at 6:14 AM, Andy Seaborne wrote:
>>
>>> Rob Vesse has found a problem with the bindings test suite. The results for bindings07 are wrong. There was an optimizer bug in ARQ: and the tests didn't get run with the simple engine [*].
>>>
>>> Andy
>>>
>>> [*] Run arq.qtest with "--engine=ref" to run the simple, not optimization, no smarts query execution engine. Does not scale - very simply executes each algebra operation and materialises all intermediate results.
>>
>> Good catch! It seems my implementation has a bug too (in the join ordering of the BINDINGS clause with the rest of the query).
>
> Could one of you please post or commit the proper results and we can re-approve it on Tuesday?
I'd be more comfortable with Andy doing it (being closer to the Query document), but here's my understanding:
The query has a graph pattern with an optional at the 'top level':
SELECT ?s ?o1 ?o2 {
?s ?p1 ?o1
OPTIONAL { ?s foaf:knows ?o2 }
} BINDINGS ?o2 {
(:b)
}
The default graph contains:
:a foaf:name "Alan" .
:a foaf:mbox "alan@example.org" .
:b foaf:name "Bob" .
:b foaf:mbox "bob@example.org" .
:c foaf:name "Alice" .
:c foaf:mbox "alice@example.org" .
:a foaf:knows :b .
:b foaf:knows :c .
The results for just the graph pattern are:
?s, ?o1, ?o2
------------
:a, "Alan", :b
:a "alan@example.org", :b
:a :b, :b
:b "Bob", :c
:b "bob@example.org", :c
:b :c, :c
:c "Alice"
:c "alice@example.org"
Briefly:
* Three results have ?o2=:b
* Three have ?o2=:c
* Two have ?o2 unbound.
Now, applying the join for the BINDINGS where ?o2 is bound to :b, the first three results successfully join (:b = :b), the second three don't join (:c != :b), and the last two join because ?o2 isn't bound yet.
I believe the results for this query *should* be:
?s, ?o1, ?o2
------------
:a, :b, :b
:a, "alan@example.org", :b
:a, "Alan", :b
:c, "alice@example.org", :b
:c, "Alice", :b
The current results file checked in to CVS additionally has:
?s, ?o1, ?o2
------------
:b, :c, :b
:b, "bob@example.org", :b
So, to summarize, I think these two results should be removed and the remaining results represent the expected correct results.
Andy, did I get that right?
.greg
Received on Sunday, 22 May 2011 19:16:30 UTC