Kris Jurka wrote:
>
> On Tue, 30 Mar 2004, Oliver Jowett wrote:
>
>
>>The "right way" to do it is to expand the driver's use of the V3
>>protocol to use the extended query protocol; then the stream can be
>>directly streamed to the backend without further
>>translation/escaping/etc using a binary Bind parameter. But there's some
>>infrastructure work to do before that can happen.
>>
>
>
> Can we really stream an InputStream directly to the backend? Don't we
> need to prefix the message with a length argument? and the only way to
> get this with the InputStream API is to read the whole thing. Yes, we can
> avoid the translation/escaping, but I don't think we can avoid persisting
> the InputStream at some point.
setBinaryStream() provides a length in addition to the stream. If the
length is correct, we can calculate the query size ahead of time without
reading the input stream. The spec is not entirely clear as to which is
the length to insert; it implies it's an error to have a stream that
doesn't match the provided length, but it's not explicit about what
happens in that case.
If the length doesn't match the stream, we can deal with it: we can
truncate to the specified length easily (emit a SQLWarning perhaps?),
and an unexpected EOF can be treated like an IOException.
-O