On 15/05/2025 17:41, Heikki Linnakangas wrote:
> On 15/05/2025 07:04, PG Bug reporting form wrote:
>> postgres=# \d+ limit_thousand_v_3
>> View "public.limit_thousand_v_3"
>> Column | Type | Collation | Nullable | Default | Storage |
>> Description
>> ----------+---------+-----------+----------+---------+---------
>> +-------------
>> thousand | integer | | | | plain |
>> View definition:
>> SELECT thousand
>> FROM onek
>> WHERE thousand < 995
>> ORDER BY thousand
>> FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
>> postgres=# SELECT thousand
>> postgres-# FROM onek
>> postgres-# WHERE thousand < 995
>> postgres-# ORDER BY thousand
>> postgres-# FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
>> ERROR: syntax error at or near "::"
>> LINE 5: FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
>> ^
>
> Agreed that's a bug. Attached is a simple patch to add parens to all
> deparsed FETCH FIRST n ROWS WITH TIES expressions.
>
> It would be nice to skip the parens for simple literals, but
> unfortunately it's non-trivial to distinguish Consts that are printed as
> simple literals from more complicated cases that are printed as
> typecasts, like '123'::bigint. XMLEXISTS is another expression type that
> takes a 'c_expr' in the the grammar, and it also just always adds the
> parens.
>
> I'll commit this fix, unless someone comes up with something more
> sophisticated.
Committed, thanks for the report.
--
Heikki Linnakangas
Neon (https://neon.tech)