Re: Possible regression in 'UPDATE ... SET (<column list>) = <row expression>' with just one single column/row value since v10

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: YasonTR <yasontr(at)protonmail(dot)com>, "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: Possible regression in 'UPDATE ... SET (<column list>) = <row expression>' with just one single column/row value since v10
Date: 2017-10-24 15:21:26
Message-ID: 25202.1508858486@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
> On Tue, Oct 24, 2017 at 7:55 AM, YasonTR <yasontr(at)protonmail(dot)com> wrote:
>> I get your reference to the spec, but why is it working without ROW() when
>> multiple columns are involved? For example: "UPDATE my_table SET (a, b) =
>> (x, y)" works on v10 (afaik).

> "The key word ROW is optional when there is more than one expression in
> the list."

Right. This was not one of the SQL committee's better syntax choices,
in my book --- allowing ROW to be optional makes the single-column case
a weird exception, since then and only then ROW is required to make it a
row constructor and not just an expression with useless extra parens.

The spec says that the source value for a parenthesized SET list
is a <contextually typed row value expression>. Pre-v10, we handled
this with a grammar hack that looked specifically for a parenthesized
list of expressions, and as it happened it would accept a single
parenthesized expression as well. Now it's expecting a normal
row constructor, which can be one of
ROW(one_expr)
ROW(an_expr, another_expr [, ...])
(an_expr, another_expr [, ...])

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message YasonTR 2017-10-24 15:47:33 Re: Possible regression in 'UPDATE ... SET (<column list>) = <row expression>' with just one single column/row value since v10
Previous Message David G. Johnston 2017-10-24 15:07:45 Re: Possible regression in 'UPDATE ... SET (<column list>) = <row expression>' with just one single column/row value since v10