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

Lists: pgsql-bugs
From: "raf" <raf(at)raf(dot)org>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)
Date: 2011-08-17 05:21:01
Message-ID: 201108170521.p7H5L1LY084474@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 6165
Logged by: raf
Email address: raf(at)raf(dot)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).


From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: raf <raf(at)raf(dot)org>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)
Date: 2011-08-22 16:34:15
Message-ID: CA+TgmoaPxqmuh=_4Y5TSHg=0Yp2xePnpfcvoeYihmD75wcVadA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

On Wed, Aug 17, 2011 at 1:21 AM, raf <raf(at)raf(dot)org> wrote:
> 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 (":=").

I think it's the latter. I have a vague recollection that we might
have left that undocumented on purpose, but I'm not actually sure why
we support it in the first place.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: raf <raf(at)raf(dot)org>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)
Date: 2011-08-22 20:17:04
Message-ID: 9622.1314044224@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

Robert Haas <robertmhaas(at)gmail(dot)com> writes:
> On Wed, Aug 17, 2011 at 1:21 AM, raf <raf(at)raf(dot)org> wrote:
>> 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 (":=").

> I think it's the latter.

It's definitely intentional, not a bug, so far as the source code is
concerned:

assign_operator : '='
| COLON_EQUALS
;

> I have a vague recollection that we might
> have left that undocumented on purpose, but I'm not actually sure why
> we support it in the first place.

I think it's legacy at this point. We have discussed before whether to
document it, and IIRC the general feeling was "if we do document it,
we'll never be able to get rid of it". Whether we could get rid of it
now (instead of documenting it) was not seriously discussed. I've seen
at least a few people saying that they do rely on it ...

regards, tom lane


From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, raf <raf(at)raf(dot)org>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6165: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug)
Date: 2012-08-15 16:02:16
Message-ID: 20120815160216.GJ25473@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

On Mon, Aug 22, 2011 at 04:17:04PM -0400, Tom Lane wrote:
> Robert Haas <robertmhaas(at)gmail(dot)com> writes:
> > On Wed, Aug 17, 2011 at 1:21 AM, raf <raf(at)raf(dot)org> wrote:
> >> 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 (":=").
>
> > I think it's the latter.
>
> It's definitely intentional, not a bug, so far as the source code is
> concerned:
>
> assign_operator : '='
> | COLON_EQUALS
> ;
>
> > I have a vague recollection that we might
> > have left that undocumented on purpose, but I'm not actually sure why
> > we support it in the first place.
>
> I think it's legacy at this point. We have discussed before whether to
> document it, and IIRC the general feeling was "if we do document it,
> we'll never be able to get rid of it". Whether we could get rid of it
> now (instead of documenting it) was not seriously discussed. I've seen
> at least a few people saying that they do rely on it ...

I think the question is whether '=' is used enough that we have to
mention that it is a non-standard extension that might be removed
someday, or something.

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +