From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | PetSerAl <petseral(at)gmail(dot)com> |
Cc: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: PL/pgSQL THEN binging in condition |
Date: | 2024-09-17 18:45:55 |
Message-ID: | CAFj8pRD2uadHhmUy6y1R65nu1z4tXWVTyXz_689WeaiXO4p_BQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hi
út 17. 9. 2024 v 20:04 odesílatel PetSerAl <petseral(at)gmail(dot)com> napsal:
> postgres=# SELECT version();
> version
> ------------------------------------------------------------
> PostgreSQL 16.4, compiled by Visual C++ build 1940, 64-bit
> (1 row)
>
>
> postgres=# DO $$
> postgres$# BEGIN
> postgres$# IF
> postgres$# CASE
> postgres$# WHEN TRUE
> postgres$# THEN TRUE
> postgres$# END
> postgres$# THEN
> postgres$# NULL;
> postgres$# END IF;
> postgres$# END
> postgres$# $$;
> ERROR: syntax error at end of input
> LINE 5: WHEN TRUE
> ^
>
> It seems error here because first THEN bound to IF statement rather than
> CASE expression. Workaround here would be using parenthesis:
>
> postgres=# DO $$
> postgres$# BEGIN
> postgres$# IF
> postgres$# (CASE
> postgres$# WHEN TRUE
> postgres$# THEN TRUE
> postgres$# END)
> postgres$# THEN
> postgres$# NULL;
> postgres$# END IF;
> postgres$# END
> postgres$# $$;
> DO
>
> If behavior can not be changed for compatibility reasons, it at least can
> use better error message.
>
It is an interesting use case, but I am afraid it can be fixed (enhanced)
without a strong rewrite of the plpgsql engine.
plpgsql parser knows nothing about embedded SQL expressions. It just tries
to cut the string between IF and THEN, and in this case, it should be
confused.
This is a feature - it is the cost of a very simple plpgsql parser, that
doesn't support expressions explicitly.
Regards
Pavel
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2024-09-17 19:56:13 | Re: BUG #18618: pg_upgrade from 14 to 15+ fails for unlogged table with identity column |
Previous Message | PetSerAl | 2024-09-17 18:03:52 | PL/pgSQL THEN binging in condition |