| From: | Michael Paesold <mpaesold(at)gmx(dot)at> | 
|---|---|
| To: | Kris Jurka <books(at)ejurka(dot)com> | 
| Cc: | pgsql-jdbc(at)postgresql(dot)org | 
| Subject: | Re: JDBC Support for standard_conforming_strings | 
| Date: | 2006-11-06 21:59:51 | 
| Message-ID: | 454FB057.1080000@gmx.at | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-jdbc | 
Kris Jurka wrote:
> Right.  The parameters will either be sent out of line which won't 
> require escaping or for the V2 path they will be sent in the query, but 
> it isn't the array or bytea codes' responsibility to escape them 
> correctly.  The code in core(dot)v2(dot)SimpleParameterList(at)setStringParameter 
> should handle that for us.
Okay, thanks! Just wanted to have confirmation on that.
I am sending a work-in-progress patch now, as I have some more questions 
on how to proceed.
Progress so far:
I have added a new method "getStandardConformingStrings" to 
ProtocolConnection, with tracking for standard_conforming_strings in the 
protocol connection implementation and the connection factory 
implementation classes (v2 + v3).
BaseConnection has two new methods escapeString and getStringLiteral 
(escapeString in style of PQescapeStringConn, getStringLiteral for 
performance reasons to escape the string and add enclosing single-quotes in 
one pass). BaseConnection.escapeString is for example used in 
AbstractJdbc2DatabaseMetaData. The getStringLiteral method should be used 
in core(dot)v2(dot)SimpleParameterList(at)setStringParameter, but see below for that.
I have also added support for standardConformingStrings to 
Parser.parseSingleQuotes.
So far, the v3 Protocol path should work correctly with 
standard_conforming_strings = true (except for the query parsing code in 
AbstractJdbc2Statement).
Open items:
- Teach rest of parsing code about standard_conforming_strings
- Support E'' escaped string syntax
- Find a solution for the "V2 problem"
Question 1:
-----------
The V2 code as well as the query-parsing code in 
AbstractJdbc2DatabaseMetaData is either mostly static or has otherwise no 
reference to the connection object. There are two ways to tackle this: 
either pass around standardConformingStrings (the variable name could be 
stdStrings for brevity), or give the code access to the current connection.
For the parsing code, it's probably easier to just pass the variable to the 
two or three methods. Objections?
For the V2 code, this leads me to question 2.
Question 2:
-----------
The problem with the V2 protocol code is, that tracking the state of 
standard_conforming_strings is not really possible, AFAICS. Currently I 
just read standard_conforming_strings at startup, and that's it. So as soon 
as someone changes the variable, quoting will be incorrect, which is a 
security issue. Therefore my new suggestion is to used the E'' string 
syntax in the V2 protocol path if the server version is >= 8.2. The version 
of the server cannot change during the connection, so we are save here.
For question 1, I would then suggest to add an argument to the V2Query 
constructor that tells whether E'' should be used instead of '', or not.
For parsing inside the JDBC driver, we would still rely on the initially 
reported value of standard_conforming_strings. We could also add an URL 
parameter to specify what should be set initially.
Comments, ideas?
Best Regards
Michael Paesold
| Attachment | Content-Type | Size | 
|---|---|---|
| standard-strings.patch | text/x-patch | 21.3 KB | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Heikki Linnakangas | 2006-11-07 12:31:53 | Re: XA end then join fix for WebLogic | 
| Previous Message | Kris Jurka | 2006-11-06 06:36:04 | Re: JDBC Support for standard_conforming_strings |