Re: Fwd: Proposal: variant of regclass

Поиск
Список
Период
Сортировка
От Amit Kapila
Тема Re: Fwd: Proposal: variant of regclass
Дата
Msg-id CAA4eK1JbTMuKfiz6OOJ2G8BY0JWJoqvmGQthK40+Zo+2dVNLwg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Fwd: Proposal: variant of regclass  (Robert Haas <robertmhaas@gmail.com>)
Ответы Re: Fwd: Proposal: variant of regclass  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
On Fri, Apr 4, 2014 at 8:48 PM, Robert Haas <robertmhaas@gmail.com> wrote:
> I see.  Here's an updated patch with a bit of minor refactoring to
> clean that up, and some improvements to the documentation.
>
> I was all ready to commit this when I got cold feet.  What's bothering
> me is that the patch, as written, mimics the exact behavior of the
> text->regproc cast, including the fact that the supplying an OID,
> written as a number, will always return that OID, whether it exists or
> not:
>
> rhaas=# select to_regclass('1259'), to_regclass('pg_class');
>  to_regclass | to_regclass
> -------------+-------------
>  pg_class    | pg_class
> (1 row)
>
> rhaas=# select to_regclass('12590'), to_regclass('does_not_exist');
>  to_regclass | to_regclass
> -------------+-------------
>  12590       |
> (1 row)
>
> I think that's unacceptably weird behavior.

Agreed.  Actually I had also noticed this behaviour, but ignored it thinking
that we should just consider behavior change for to_ function incase name
is passed.  However after you pointed, it looks pretty wrong for OID cases.

The reason of this behavior is that in out functions (regclassout), we return
the OID as it is incase it doesn't exist.  One way to fix this is incase of
OID input parameters, we check if the passed OID exists in to_* functions
and return NULL if it doesn't exist. I think by this way we can retain
the similarity of input parameters between types and to_* functions and
making to_* functions return NULL incase OID doesn't exist makes it
similar to case when user passed name.

> My suggestion is to
> restructure the code so that to_regclass() only accepts a name, not an
> OID, and make its charter precisely to perform a name lookup and
> return an OID (as regclass) or NULL if there's no match.

How will we restrict user from passing some number in string form?
Do you mean that incase user has passed OID, to_* functions should
return NULL or if found that it is OID then return error incase of to_*
functions?

With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [bug fix] multibyte messages are displayed incorrectly on the client
Следующее
От: Amit Kapila
Дата:
Сообщение: Re: [bug fix] pg_ctl always uses the same event source