Обсуждение: (libpq) listen/notify messages are converted to lowercase and/or are case insensitive

Поиск
Список
Период
Сортировка

(libpq) listen/notify messages are converted to lowercase and/or are case insensitive

От
Frank van Vugt
Дата:
L.S.

Either the docs or I are missing something....

While using libpq I noticed that listen/notify calls were being converted to
lowercase. A further look showed that the listen/notify calls seem to be
totally case insensitive:

free4testing=# select version();
                               version
---------------------------------------------------------------------
 PostgreSQL 7.4.3 on i686-pc-linux-gnu, compiled by GCC egcs-2.91.66

free4testing=# listen barcode_needed;
LISTEN
free4testing=# notify BARCODE_NEEDED;
NOTIFY
Asynchronous notification "barcode_needed" received from server process with
PID 32638.
free4testing=# unlisten BARCODE_NEEDED;
UNLISTEN
free4testing=#


Obviously, things work and they probably work as intended, but I wasn't able
to find anything on this behaviour in the docs. For a moment I thought that
the syntax rule 'unquoted letters are forced to lowercase' of SQL applied
here as well, but any double quotes used are simply interpreted as part of
the name.

Any further comments on this are appreciated.



--
Best,




Frank.


Re: (libpq) listen/notify messages are converted to

От
Stephan Szabo
Дата:
On Sun, 15 Aug 2004, Frank van Vugt wrote:

> L.S.
>
> Either the docs or I are missing something....
>
> While using libpq I noticed that listen/notify calls were being converted to
> lowercase. A further look showed that the listen/notify calls seem to be
> totally case insensitive:
>
> free4testing=# select version();
>                                version
> ---------------------------------------------------------------------
>  PostgreSQL 7.4.3 on i686-pc-linux-gnu, compiled by GCC egcs-2.91.66
>
> free4testing=# listen barcode_needed;
> LISTEN
> free4testing=# notify BARCODE_NEEDED;
> NOTIFY
> Asynchronous notification "barcode_needed" received from server process with
> PID 32638.
> free4testing=# unlisten BARCODE_NEEDED;
> UNLISTEN
> free4testing=#
>
>
> Obviously, things work and they probably work as intended, but I wasn't able
> to find anything on this behaviour in the docs. For a moment I thought that
> the syntax rule 'unquoted letters are forced to lowercase' of SQL applied
> here as well, but any double quotes used are simply interpreted as part of
> the name.

On my 7.4.2 machine, I can get:

sszabo=# listen foo;
LISTEN
sszabo=# notify "FOO";
NOTIFY
sszabo=# notify "foo";
NOTIFY
Asynchronous notification "foo" received from server process with PID
7042.
sszabo=# notify FOO;
NOTIFY
Asynchronous notification "foo" received from server process with PID
7042.

So, it looks to me that "FOO" is not being casefolded while FOO is, which
would be consistent with the identifier folding rules.


Re: (libpq) listen/notify messages are converted to lowercase and/or are case insensitive

От
Tom Lane
Дата:
Frank van Vugt <ftm.van.vugt@foxi.nl> writes:
> Obviously, things work and they probably work as intended, but I wasn't able
> to find anything on this behaviour in the docs. For a moment I thought that
> the syntax rule 'unquoted letters are forced to lowercase' of SQL applied
> here as well, but any double quotes used are simply interpreted as part of
> the name.

You had the right idea: the arguments of listen and notify commands are
identifiers.  I don't know what convinced you otherwise.

regression=# listen "Z";
LISTEN
regression=# notify Z;
NOTIFY
regression=# notify "Z";
NOTIFY
Asynchronous notification "Z" received from server process with PID 28818.
regression=# listen z;
LISTEN
regression=# notify "Z";
NOTIFY
Asynchronous notification "Z" received from server process with PID 28818.
regression=# notify Z;
NOTIFY
Asynchronous notification "z" received from server process with PID 28818.
regression=#

            regards, tom lane

Re: (libpq) listen/notify messages are converted to lowercase and/or are case insensitive

От
Frank van Vugt
Дата:
> You had the right idea: the arguments of listen and notify commands are
> identifiers.  I don't know what convinced you otherwise.

Ah, this was the one I missed and somehow it confused me:

f4t=# listen "z";
LISTEN
f4t=# notify Z;
NOTIFY
Asynchronous notification "z" received from server process with PID 1800.
f4t=# notify "Z";
NOTIFY


Oh, and of course, _now_ the mentioning of 'identifier' in the notify-docs get
noticed as well ;)

Thanks to the both of you !



--
Best,




Frank.