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 >