This completes ACTION-673.
The design has been reverted to that of 1LC and 2LC
1/ Informative text changed.
2/ Variable Scope section has a paragraph specifically on BIND
3/ Algebra translation translation reverts to previous text (and special
on BIND removed)
No execution tests are invalidated.
Reverting the scope rules affects syntax tests:
syntax-BINDscope7.rq
syntax-BINDscope8.rq
which are now bad syntax.
A few notes about the BIND fix:
This is illegal under both designs:
SELECT *
{
?s ?p ?o
BIND("foo" AS ?o)
}
This is illegal on the reverted design:
SELECT * {
?s ?p ?o
OPTIONAL{?s ?p2 ?o2}
BIND(5 AS ?o2)
}
And note adding {} (which are not a subquery with project) does not make
any difference:
SELECT *
{
{ ?s ?p ?o }
BIND("foo" AS ?o) # Bad
}
because it is still a previous element of a group so the accumulated
scope of that element shows up in the group BIND is in - i.e. it
includes all of { ?s ?p ?o }
which makes sense because we want BIND to apply a previous element like:
SELECT * {
{ ?s ?p ?o } UNION {?s ?p2 ?o2}
BIND(5 AS ?o) # Bad
}
Legal: masked
SELECT *
{
{ SELECT ?s { ?s ?p ?o } }
BIND("foo" AS ?o) # GOOD
}
Legal: scope rules do not extend outwards of {} in which BIND is used.
SELECT *
{
{ ?s ?p ?o }
UNION
{ BIND("foo" AS ?o) } # GOOD
}