Re: [PATCH] Allow multiple recursive self-references - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: [PATCH] Allow multiple recursive self-references
Date
Msg-id 5e5e10d7-2287-7d13-cf12-eeee1627e3d3@enterprisedb.com
Whole thread Raw
In response to Re: [PATCH] Allow multiple recursive self-references  (Denis Hirn <denis.hirn@uni-tuebingen.de>)
List pgsql-hackers
On 14.01.22 15:55, Denis Hirn wrote:
>> There is nothing in there that says that certain branches of the UNION in a recursive query mean certain things. In
fact,it doesn't even require the query to contain a UNION at all.  It just says to iterate on evaluating the query
untila fixed point is reached.  I think this supports my claim that the associativity and commutativity of a UNION in a
recursivequery still apply.
 
>>
>> This is all very complicated, so I don't claim this to be authoritative, but I just don't see anything in the spec
thatsupports what you are saying.
 
> 
> I disagree. In SQL:2016, it's discussed in 7.16 <query expression> syntax rule 3) j) i), which defines:
[actually 7.17]
> 
>> 3) Among the WQEi, ... WQEk of a given stratum, there shall be at least one <query expres-
>>     sion>, say WQEj, such that:
>>      A) WQEj is a <query expression body> that immediately contains UNION.
>>      B) WQEj has one operand that does not contain a <query name> referencing any of WQNi,
>>         ..., WQNk. This operand is said to be the non-recursive operand of WQEj.
>>      C) WQEj is said to be an anchor expression, and WQNj an anchor name.
> 
> Where <query expression body> is defined as:
>> <query expression body> ::=
>>      <query term>
>>    | <query expression body> UNION [ALL | DISTINCT]
>>        [ <corresponding spec> ] <query term>
>>
>> <query term> ::=
>>      <query primary>
>>    | ...
>>
>> <query primary> ::= ...
>>    | <left paren> <query expression body> ... <right paren>
> 
> This definition pretty much sums up what I have called RUNION.
> 
> The SQL standard might not impose a strict order on the UNION branches.
> But you have to be able to uniquely identify the anchor expression.

Right, the above text does not impose any ordering of the UNION.  It 
just means that it has to have an operand that it not recursive.  I 
think that is what I was trying to say.

I don't understand what your RUNION examples are meant to show.



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Parameter for planner estimate of recursive queries
Next
From: Maxim Orlov
Date:
Subject: Re: UNIQUE null treatment option