Missing ParameterStatus for backslash_quote
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
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
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