John Lister wrote:
> I've applied the patch, but there seems to be a couple of issues.
>
> To do binary transfer, it needs to do a describe before the bind so as
> to get the returned field types. This seems to only be done when
> ForceBinaryTransfer is set.
>
My memory of what the patch does is a little fuzzy and I've only looked
at the binary receive patch, but here's how I understood it.
The current driver execution does not bother retrieving the describe
results before executing a query. This means we don't know what types
will be returned beforehand, so we don't know if we can support
retrieving them in binary and must retrieve them as text. This is done
to avoid an extra network roundtrip for query execution. What the patch
does is to look at a prepared statement and see if we've already
prepared it. If we have, then we have the previous describe results and
know what fields we can handle as binary. So without
ForceBinaryTransfer, binary will only kick in on the second execution
(or perhaps prepareThreshold executions, I forget). ForceBinaryTransfer
is really a hack to test this which prepares a query twice to make this
work, so don't be fooled by the first preparation and wait for the
second one.
> Secondly when it does the describe, sendParse trashes the fields details
> by setting them to null before the main query is executed.
>
I'm not sure what you're referring to specifically. sendParse certainly
doesn't adjust any of the params that are passed in, and it doesn't
touch anything if the query is already prepared.
> Did this patch use to work, i can't see how in its current form.
>
It did work and I have no reason to believe that's changed. Perhaps it
just isn't working as you're expecting. Perhaps you're trying it with
arrays which it might not support? I'd try getting it working with a
plain int or two first.
Kris Jurka