BUG #1956: Plpgsql top-level DECLARE does not share scope with CREATE FUNCTION

Поиск
Список
Период
Сортировка
От Karl O. Pinc
Тема BUG #1956: Plpgsql top-level DECLARE does not share scope with CREATE FUNCTION
Дата
Msg-id 20051011161909.98E4EF11B0@svr2.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #1956: Plpgsql top-level DECLARE does not share scope  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      1956
Logged by:          Karl O. Pinc
Email address:      kop@meme.com
PostgreSQL version: 8.0.3
Operating system:   Linux
Description:        Plpgsql  top-level DECLARE does not share scope with
CREATE FUNCTION
Details:

Depending on how you want to look at it, this is not really a bug.  It does
produce odd results though.

The ALIASes for function parameters that get created as part of the plpgsql
CREATE FUNCTION do not share scope (namespace?) with the top-level DECLARE
of the function.  As a result, you inadvertently make your function
arguments 'disappear' by "re-declaring" them in the top-level DECLARE.  I
haven't put any deep thought into this, but offhand this 'feature' seems to
have no utility but does have the ability to cause problems.  Hence, this
report.

It would be nice if somebody who has deep thoughts on this would think
them.

I would expect the below to produce an error when creating foo(int).  The
error would complain about trying to declare the same thing with two
different types.  Instead we see the result below.

create function foo (arg int)
returns int
language plpgsql
as $$
declare
  arg text;
begin
  return bar(arg);
end;
$$;

create function bar (arg int)
returns int
language plpgsql
as $$
begin
  return arg + 1;
end;
$$;

babase=# select foo(1);
ERROR:  function bar(text) does not exist
HINT:  No function matches the given name and argument types. You may need
to add explicit type casts.
CONTEXT:  SQL statement "SELECT  bar( $1 )"
PL/pgSQL function "foo" line 4 at return

Regards,
Karl O. Pinc

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Oliver Elphick
Дата:
Сообщение: Problem with COPY in 8.0.3
Следующее
От: Oliver Elphick
Дата:
Сообщение: Re: Problem with COPY in 8.0.3