[Bug 15044] [XQuery30] group by variables with associated expressions

https://www.w3.org/Bugs/Public/show_bug.cgi?id=15044

--- Comment #4 from Jonathan Robie <jonathan.robie@gmail.com> 2011-12-11 19:00:54 UTC ---
(In reply to comment #3)

> In the current wording, the question does not appear to be addressed. To answer
> it, I think we'd have to make some changes in the preamble of 3.10.1 "Variable
> Bindings", including "group by" and putting it on the same footing as "for",
> "let", and "count".

How's this:

The following clauses in FLWOR expressions bind values to variables: for, let,
window, count, and group by. The binding of variables for for, let, and count
is governed by the following rules (the binding of variables in window clauses
is discussed in 3.10.4 Window Clause, the binding of variables in group by
clauses is discussed in 3.10.7 Group By Clause):


> ----------------------------------------------
> 
> Consider another example:
> 
>     group by $g1 := $expr1, $g1 := $expr2
> 
> (Note that $g1 appears twice.) Is this legal, and if so, what does it mean?
> 
> In Andrew's proposal, the example transforms to:
>     let $g1 := $expr1
>     let $g1 := $expr2
>     group by $g1, $g1
> The let clauses are certainly legal (the second $g1 occludes the first). The
> group by clause would then have two references to the latter $g1 (and so would
> be equivalent to just "group by $g1").
> 
> If we go with the current wording plus changes to 3.10.1,
>     group by $g1 := $expr1, $g1 := $expr2
> would be legal, but (unlike with Andrew's proposal) the two $g1 would be bound
> to different values, and so provide two grouping keys.
> 
> Or we could add a rule that the variables in a GroupingSpecList must have
> different names.

I think the governing principle here is this: 

<quote>
A given variable may be bound more than once in a FLWOR expression, or even
within one clause of a FLWOR expression. In such a case, each new binding
occludes the previous one, which becomes inaccessible in the remainder of the
FLWOR expression.
</quote>

I think that means that the two $g1 bindings are bound to different values,
grouping works correctly, the first value of $g1 is not available to subsequent
expressions.

That seems fine to me. It's analogous to:

let $a := 1,
    $a := 2
return $a

If that's not an error, I don't think group by $g1 := $expr1, $g1 := $expr2
should be an error.

-- 
Configure bugmail: https://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.

Received on Sunday, 11 December 2011 19:00:57 UTC