From: Andrew Gierth <andrew@tao11.riddles.org.uk>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pg@mattyw.net, pgsql-bugs@lists.postgresql.org, Andres Freund <andres@anarazel.de>
Subject: Re: BUG #15471: psql 11 array concatenation in CASE takes on values from the CASE expression when using enum_range
Date: Tue, 30 Oct 2018 12:49:25 +0000
Message-ID: <87efc77gh2.fsf@news-spur.riddles.org.uk> (raw)
In-Reply-To: <8112.1540900775@sss.pgh.pa.us>
References: <15471-1117f49271989bad@postgresql.org>
<8112.1540900775@sss.pgh.pa.us>
>>>>> "Tom" == Tom Lane <tgl@sss.pgh.pa.us> writes:
>> Below is an example .sql file that replicates the problem. Put
>> simply, when we array concat with enum_range in the result of a CASE
>> statement the concatenation takes the expression from the CASE
>> statement, not the enum range.
Tom> Wow, that's ... bizarre. I'm thinking that we probably did
Tom> something silly in the big expression-execution rewrite, but it's
Tom> not clear exactly where. Anyway, will look into it if Andres
Tom> doesn't beat me to it.
I took a look, and what I'm seeing suggests that commit 3decd150a2d
might possibly be relevant here (at least to explain why it breaks in 11
but not 10).
What's going on in eval_const_expressions_mutator is that
context->case_val is set when recursing into the elemexpr in the
ArrayCoerceExpr case, so when that sees a CaseTestExpr inside that, it
replaces it (incorrectly).
--
Andrew (irc:RhodiumToad)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-bugs@postgresql.org
Cc: andrew@tao11.riddles.org.uk, tgl@sss.pgh.pa.us, andres@anarazel.de
Subject: Re: BUG #15471: psql 11 array concatenation in CASE takes on values from the CASE expression when using enum_range
In-Reply-To: <87efc77gh2.fsf@news-spur.riddles.org.uk>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox