On Sat, Oct 26, 2024 at 12:21 AM Tom Lane <t...@sss.pgh.pa.us> wrote:

> I wrote:
> > However ... I don't like this implementation, not even a little
> > bit.
>
> I forgot to mention a third problem, which is that reassigning the
> alias during subquery pullup means it doesn't happen if subquery
> pullup doesn't happen.  As an example, with your patch:
>
> regression=# explain verbose select * from (values (1), (2)) v(x);
>                      QUERY PLAN
> ----------------------------------------------------
>  Values Scan on v  (cost=0.00..0.03 rows=2 width=4)
>    Output: v.x
> (2 rows)
>
> regression=# explain verbose select * from (values (1), (random())) v(x);
>                          QUERY PLAN
> -------------------------------------------------------------
>  Values Scan on "*VALUES*"  (cost=0.00..0.03 rows=2 width=8)
>    Output: "*VALUES*".column1
> (2 rows)
>
> That's because the volatile function prevents subquery flattening.
>

Yes, that is by design. As I used is_simple_values() so if the values list
is not a simple one, which is not in this case, the alias won't be
reassigned.


>                         regards, tom lane
>

Reply via email to