| From: | Oliver Jowett <oliver(at)opencloud(dot)com> |
|---|---|
| To: | Dave Cramer <pg(at)fastcrypt(dot)com> |
| Cc: | List <pgsql-jdbc(at)postgresql(dot)org> |
| Subject: | Re: patch for passing the cts |
| Date: | 2005-06-14 23:21:38 |
| Message-ID: | 42AF6682.6000405@opencloud.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-jdbc |
Dave Cramer wrote:
> Well the good news is that the driver and the backend will pass the cts
> with this patch.
>
> Rather than commit this as is, I'd like to discuss the patch as it is.
>
> I'm really not happy with the handling of IN/OUT parameters in the
> query executor, however deferring parsing doesn't seem to be an option
> either.
I don't think your approach works, though; consider this (untested) example:
CallableStatement cs = conn.prepareCall("{call f(?*4,?)}");
cs.setInt(1,42);
cs.registerOutParameter(2,Types.INTEGER);
The query gets parsed into these fragments:
0:"select * from f("
1:"*4,"
2:") as result"
As I read your code, that's going to discard fragment 1 blindly in the
query executor, resulting in this query:
"select * from f($1) as result"
which is wrong.
The logic that decides to remove OUT placeholders needs to be aware of
the rest of the {call} structure (mainly, comma separation of
parameters) to do it correctly, and I really don't think that the
QueryExecutor implementations are the right place for that..
-O
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Dave Cramer | 2005-06-15 00:40:11 | Re: patch for passing the cts |
| Previous Message | Kris Jurka | 2005-06-14 16:12:56 | Re: New italian translation |