BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)

Поиск
Список
Период
Сортировка
От raf
Тема BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)
Дата
Msg-id 201108170521.p7H5L1LY084474@wwwmaster.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      6165
Logged by:          raf
Email address:      raf@raf.org
PostgreSQL version: 9.0.4
Operating system:   N/A
Description:        documentation bug in plpgsql-declarations.html and
plpgsql-statements.html (or plpgsql parser bug)
Details:

the documentation available at:

  http://www.postgresql.org/docs/current/static/plpgsql-declarations.html

states that the general syntax of a variable declaration is:

  name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } expression ];

when it is really:

  name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := | = } expression ];

i.e. an sql equality operator ("=") is accepted and acts as if it were
a plpgsql assignment operator (":=").

similarly, the documentation available at:

  http://www.postgresql.org/docs/current/static/plpgsql-statements.html

states that an assignment of a value to a PL/pgSQL variable is written as:

  variable := expression;

even though the sql equality operator works too:

  variable = expression;

so, there is either a plpgsql parser bug that treats the sql equality
operator as the plpgsql assignment operator, or "=" is an undocumented
alternative to the documented plpgsql assignment operator (":=").

the only mention i have found of "=" being an assignment operator is in
the documentation that shows:

  GET DIAGNOSTICS variable = item [ , ... ];

but i think that might be a special case.

example demonstration:

  do $$
  declare
    i integer = 5;
  begin
    raise notice '%', i;
    i = 6;
    raise notice %', i;
  end
  $$;

will output 5 and then 6 (as expected by someone who doesn't know that
they should be using ":=" according to the documentation).

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

Предыдущее
От: Dave Page
Дата:
Сообщение: Re: BUG #6164: Flashing dialog
Следующее
От: Rainer Pruy
Дата:
Сообщение: PG8.4.7: updating rows leaves duplicate rows violating PK