Thread: BUG #11944: plpgsql if-case-then syntax error.

BUG #11944: plpgsql if-case-then syntax error.

From
jasen@treshna.com
Date:
The following bug has been logged on the website:

Bug reference:      11944
Logged by:          Jasen Betts
Email address:      jasen@treshna.com
PostgreSQL version: 9.1.13
Operating system:   linux
Description:

this does work

create function fails( a int) returns int language plpgsql as $$ begin
  if  CASE when a = 1 then true else false END
  then return 1; else  return 0;  end if ;
end $$;

parentheses can make it work.

create function fails_not( a int) returns int language plpgsql as $$ begin
  if ( CASE when a = 1 then true else false END )
  then return 1; else  return 0;  end if ;
end $$;

It seems to be the plpgsql parser not treating the CASE-END as atomic when
looking for the end of the IF xpression.

Re: BUG #11944: plpgsql if-case-then syntax error.

From
Pavel Stehule
Date:
2014-11-12 5:46 GMT+01:00 <jasen@treshna.com>:

> The following bug has been logged on the website:
>
> Bug reference:      11944
> Logged by:          Jasen Betts
> Email address:      jasen@treshna.com
> PostgreSQL version: 9.1.13
> Operating system:   linux
> Description:
>
> this does work
>
> create function fails( a int) returns int language plpgsql as $$ begin
>   if  CASE when a = 1 then true else false END
>   then return 1; else  return 0;  end if ;
> end $$;
>
> parentheses can make it work.
>
> create function fails_not( a int) returns int language plpgsql as $$ begin
>   if ( CASE when a = 1 then true else false END )
>   then return 1; else  return 0;  end if ;
> end $$;
>
> It seems to be the plpgsql parser not treating the CASE-END as atomic when
> looking for the end of the IF xpression.
>
>
yes, it is true. plpgsql parser doesn't understand to SQL and mechanically
searching ending keywords in expected level of parentheses. There is a
problem in fact, so SQL CASE, and PLpgSQL CASE uses same keyword.

Regards

Pavel


>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
>