Re: proposal - plpgsql - all plpgsql auto variables should be constant - Mailing list pgsql-hackers

From Ashutosh Bapat
Subject Re: proposal - plpgsql - all plpgsql auto variables should be constant
Date
Msg-id CAExHW5tm9SsSMDEA4zEes2WUMJ7yjoEMhk=PevWfoFrTWAhSZg@mail.gmail.com
Whole thread Raw
In response to proposal - plpgsql - all plpgsql auto variables should be constant  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: proposal - plpgsql - all plpgsql auto variables should be constant
List pgsql-hackers
On Fri, Apr 24, 2020 at 12:24 PM Pavel Stehule <pavel.stehule@gmail.com> wrote:
>
> Hi
>
> plpgsql generate lot of auto variables - FOUND, SQLERRM, cycle's control variable, TG_WHEN, TG_OP, ..
>
> Currently these variables are not protected, what can be source of problems, mainly for not experienced users. I
proposemark these variables as constant.
 
>

+1 for general idea.

> -- today
> postgres=# do $$ begin for i in 1..10 loop raise notice 'i=%', i; i := 20; end loop; end; $$;
> NOTICE:  i=1
> NOTICE:  i=2
> NOTICE:  i=3
> NOTICE:  i=4
> NOTICE:  i=5
> NOTICE:  i=6
> NOTICE:  i=7
> NOTICE:  i=8
> NOTICE:  i=9
> NOTICE:  i=10
> DO
>
> -- after patch
> postgres=# do $$ begin for i in 1..10 loop raise notice 'i=%', i; i := 20; end loop; end; $$;
> ERROR:  variable "i" is declared CONSTANT

CONSTANT looks odd in this context since i's value changes. But you
already have a proposal to change that.

>
> p.s. this is simple implementation - just for function demo. Maybe can be better to introduce new plpgsql_variable's
flaglike is_protected or similar than using isconst.
 

Yes, I think that will help. In this case PL/SQL says that "i" can not
be used as an assignment target. That's not very clear but something
on those lines will help.


-- 
Best Wishes,
Ashutosh Bapat



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Setting min/max TLS protocol in clientside libpq
Next
From: Daniel Gustafsson
Date:
Subject: Re: Setting min/max TLS protocol in clientside libpq