Обсуждение: 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

От
Pavel Stehule
Дата:
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

От
Tom Lane
Дата:
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

От
Pavel Stehule
Дата:
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