Currently, even though network server materializes the LOB to the
client, it uses getBlob or getClob to retrieve the large object. This
holds locks until the end of the transaction.
I would like to change Network Server to:
- Use getCharacterStream and getBinaryStream instead of getClob
and getBlob to avoid holding the locks after the result set is
closed..
- Always use 8 bytes for the FD:OCA place holder so we don't have
to calculate the length
Does anyone see any issues with this, especially for other clients such
as ODBC?
Some background for this:
When a LOB is sent, an FD:OCA place holder is sent instead of a length
of the value. The placeholder specifies how many bytes are needed to
specify the length and can be 2, 4, or 8 bytes.
>From the protocol specification at
http://www.opengroup.org/publications/catalog/c043.htm :
----
5.5.3 Late Group Descriptors
.....
The placeholder size must be large enough for holding the maximum
possible length of a value belonging to the corresponding LOB column.
However, the sender is allowed to use a placeholder size larger than the
minimum necessary for the LOB column.
---