Thread: plpgsql doesn't check a number of expressions and number of target variables correctly
plpgsql doesn't check a number of expressions and number of target variables correctly
From
Pavel Stehule
Date:
Hello I found a plpgsql bug: create or replace function fx() returns void as $$ declare a int; b int; begin select 10,20 into a; end; $$ language plpgsql; this is bug, or minimally potential source of strange behave. Regards Pavel Stehule
Re: plpgsql doesn't check a number of expressions and number of target variables correctly
From
Tom Lane
Date:
Pavel Stehule <pavel.stehule@gmail.com> writes: > Hello > I found a plpgsql bug: > create or replace function fx() > returns void as $$ > declare a int; b int; > begin > select 10,20 into a; > end; > $$ language plpgsql; > this is bug, or minimally potential source of strange behave. AFAICS this is intentional --- see the comment in exec_move_row. In any case, I think tightening it up is more likely to break working applications than do anything helpful. regards, tom lane
Re: plpgsql doesn't check a number of expressions and number of target variables correctly
From
Pavel Stehule
Date:
2012/3/5 Tom Lane <tgl@sss.pgh.pa.us>: > Pavel Stehule <pavel.stehule@gmail.com> writes: >> Hello >> I found a plpgsql bug: > >> create or replace function fx() >> returns void as $$ >> declare a int; b int; >> begin >> =C2=A0 select 10,20 into a; >> end; >> $$ language plpgsql; > >> this is bug, or minimally potential source of strange behave. > > AFAICS this is intentional --- see the comment in exec_move_row. > > In any case, I think tightening it up is more likely to break working > applications than do anything helpful. I agree with you about break working application :( But this is good example what should be checked in CHECK statement. but it should be bug - it has no sense - no in this form - it is assign row to scalar. I found a some mysterious and very difficult identified bugs in one application based on this behave. Regards Pavel > > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0regards, tom lane