Missing ParameterStatus for backslash_quote

Started by Michael Paesoldabout 19 years ago3 messages
#1Michael Paesold
mpaesold@gmx.at

While trying to finish the support for standard_conforming_strings in
the JDBC driver, I realized that there is also a new variable
"backslash_quote" that controls whether a back-slash may be used to
escape a single quote inside a string constant.

Assuming the documentation is correct, this variable is not reported via
ParameterStatus messages.
http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-ASYNC

This is a problem for the query parsing code inside the JDBC driver
because it needs to know about the state of this variable so that
parsing a query in the driver has the same result as in the backend.

I therefore ask to add backslash_quote to the hardcoded list of
variables that are reported via ParameterStatus in 8.2 as well as all
back-branches that support V3 as well as the backslash_quote variable
(7.4, 8.0, 8.1, I guess).

Best Regards
Michael Paesold

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Paesold (#1)
Re: Missing ParameterStatus for backslash_quote

Michael Paesold <mpaesold@gmx.at> writes:

Assuming the documentation is correct, this variable is not reported via
ParameterStatus messages.

That's intentional. There is no reason for an application to need to
know about that variable, because there is no reason for it to change
behavior in consequence. Applications shouldn't be using backslash-quote,
period -- quote-quote is always correct instead.

This is a problem for the query parsing code inside the JDBC driver
because it needs to know about the state of this variable so that
parsing a query in the driver has the same result as in the backend.

I don't see that the JDBC driver needs to know about it either.
Changing the setting only causes an error to be reported (or not) ---
it does not affect the meaning of a string. Also, the default setting
won't affect JDBC because JDBC only uses client_encoding = UTF8. AFAICS
JDBC can assume that backslash-quote is legal and the backend will
reject it if not.

I therefore ask to add backslash_quote to the hardcoded list of
variables that are reported via ParameterStatus in 8.2 as well as all
back-branches that support V3 as well as the backslash_quote variable
(7.4, 8.0, 8.1, I guess).

If we did do that, you still couldn't rely on knowing the value, because
there are backends in the field that won't tell you about it.

regards, tom lane

#3Michael Paesold
mpaesold@gmx.at
In reply to: Tom Lane (#2)
Re: Missing ParameterStatus for backslash_quote

Tom Lane wrote:

Michael Paesold <mpaesold@gmx.at> writes:

Assuming the documentation is correct, this variable is not reported via
ParameterStatus messages.

That's intentional. There is no reason for an application to need to
know about that variable, because there is no reason for it to change
behavior in consequence. Applications shouldn't be using backslash-quote,
period -- quote-quote is always correct instead.

FWIW, I am just changing the JDBC driver to use quote-quote instead of
backslash-quote in the cases where the driver does escaping. I think
this should be back-patched to all supported branches.

This is a problem for the query parsing code inside the JDBC driver
because it needs to know about the state of this variable so that
parsing a query in the driver has the same result as in the backend.

I don't see that the JDBC driver needs to know about it either.
Changing the setting only causes an error to be reported (or not) ---
it does not affect the meaning of a string. Also, the default setting
won't affect JDBC because JDBC only uses client_encoding = UTF8. AFAICS
JDBC can assume that backslash-quote is legal and the backend will
reject it if not.

You are absolutely right. I was fooled by, e.g. the string constant
'C:\'. With standard_conforming_strings on, this is legal,
backslash-quote is not considered anyways. But without standard
conforming strings, this is illegal anyways, because it should have read
'C:\\'.

So less work for me. :-)

Thanks, Tom.

Best Regards
Michael Paesold