On 27.03.23 20:54, Alvaro Herrera wrote:
> Even so, I was unable to get bison
> to accept the 'KEY name VALUES blah' syntax; it might be a
> fun/challenging project to change the productions that we use for JSON
> names and values:
>
> +json_name_and_value:
> +/* Supporting this syntax seems to require major surgery
> + KEY c_expr VALUE_P json_value_expr
> + { $$ = makeJsonKeyValue($2, $4); }
> + |
> +*/
> + c_expr VALUE_P json_value_expr
> + { $$ = makeJsonKeyValue($1, $3); }
> + |
> + a_expr ':' json_value_expr
> + { $$ = makeJsonKeyValue($1, $3); }
> + ;
>
> If we uncomment the KEY bit there, a bunch of conflicts emerge.
This is a known bug in the SQL standard. Because KEY is a non-reserved
keyword, writing
KEY (x) VALUE y
is ambiguous because KEY could be the keyword for this clause or a
function call key(x).
It's ok to leave it like this for now.