Re: Simplifying unknown-literal handling

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Simplifying unknown-literal handling
Дата
Msg-id 18606.1117403019@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Simplifying unknown-literal handling  (Andrew - Supernews <andrew+nonews@supernews.com>)
Список pgsql-hackers
Andrew - Supernews <andrew+nonews@supernews.com> writes:
> What happens if you send an UNKNOWN from the frontend as binary, and then
> when the desired type is figured out, it turns out to be a bytea? It's
> obviously not acceptable then to truncate after a zero byte.

This isn't an issue, because if the desired type is something other than
UNKNOWN, we won't be using UNKNOWN's binary input converter.  The actual
flow of information in the case you're thinking of is:

1. Client sends Parse message with, say, queryINSERT INTO tab(byteacol) VALUES($1);
and the type of param 1 either not specified or given as UNKNOWN.

2. Backend infers actual type of param 1 from context as BYTEA.

3. Client may or may not bother issuing a Describe to find out actual
type of parameter(s).

4. Client sends BIND with a binary value; backend applies BYTEA's input
converter (which is essentially memcpy).

Offhand I think the only way you could actually invoke UNKNOWN's binary
input converter is by executing a PREPARE with a parameter position
specifically declared as UNKNOWN, vizPREPARE foo(unknown) AS ...
and then using foo as the target of a binary BIND message.  I don't
think we are under contract to promise that such a thing will have any
particular behavior; and certainly not to promise that it will behave
more like bytea than like text.  In any case there is no runtime
coercion from UNKNOWN to BYTEA, so you'd really have to work at it
to cons up a case where you got behavior you didn't like.
        regards, tom lane


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

Предыдущее
От: Andrew - Supernews
Дата:
Сообщение: Re: Simplifying unknown-literal handling
Следующее
От: Andrew - Supernews
Дата:
Сообщение: Re: Simplifying unknown-literal handling