[ 
https://issues.apache.org/jira/browse/DERBY-2496?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Øystein Grøvlen updated DERBY-2496:
-----------------------------------

    Attachment: blob.diff

The attached patch, blob.diff, adds support for locators for Blob methods and 
ResultSet.getXXX methods.  Note that the use of locators for Blob is still not 
enabled.  The other steps mentioned in this Jira is also needed before locators 
can be used.

Another thing to note about this patch is that the implementation of locator 
based streams are pretty basic.  No bufferering is done.  Hence, the byte[] 
versions of read/write should be used if performance is a concern.  (The 
parameterless versions of read/write will only send one byte per client/server 
round-trip.)

More detailed description of changes:

M java/client/org/apache/derby/client/net/NetStatementRequest.java
    * Do not request locators for Clob, only Blob.  Necessary to be able to add 
locators for Blob independently of Clob.

M java/client/org/apache/derby/client/net/NetCursor.java
    * If locator is sent, do not assume any external data.  (If external data 
highest bit of  in-place column value will be set.)
   * Create locator based Blob object if locator is sent.

M java/client/org/apache/derby/client/am/Cursor.java
    * Made get_INTEGER protected so sub-classes (Netcursor) can use it to read 
locator value.

M java/client/org/apache/derby/client/am/Blob.java
    * Add constructor for locator based Blob object.
    * Make all Blob operations support locators.  Operations are performed by 
calling stored procedures through the framework implemented by 
CallableLocatorProcedures class.
    * Create locator based versions of streams for locator based Blob objects

M java/client/org/apache/derby/client/am/Lob.java
    * Added locator field to record locator of locator based Lobs and a new 
constant to be used to record the data type to be Locator based.
    * If locator based and length not yet obtained, sqlLength() will call 
getLocatorLength() to get the length.
    * A dummy implementation of getLocatorLength() is added, subclasses should 
override.
    * Add methods for checking if Lob is locator based, and for returning the 
locator value.

A java/client/org/apache/derby/client/am/BlobLocatorOutputStream.java
    * OutputStream for locator based Blob.
    * No buffering is done. Hence, for efficiency, byte[] version of write 
should be used.
 
A java/client/org/apache/derby/client/am/BlobLocatorInputStream.java
    * InputStream for locator based Blob.
    * No buffering is done. Hence, for efficiency, byte[] version of read 
should be used.



> Implement Blob support for Locators
> -----------------------------------
>
>                 Key: DERBY-2496
>                 URL: https://issues.apache.org/jira/browse/DERBY-2496
>             Project: Derby
>          Issue Type: Sub-task
>            Reporter: Øystein Grøvlen
>         Assigned To: Øystein Grøvlen
>         Attachments: blob.diff
>
>
> DERBY-2347 adds the possibility to send locators between client and server 
> instead of LOB values.  This has not been activated yet, since the client 
> implementation does not currently support locators.  This report is for 
> supporting the locators for Blob objects.  Another JIRA issue will be made 
> for Clob.
> This work will be made in several steps:
>    1. Blob methods and ResultSet.getXXX methods
>    2. PreparedStatement and CallableStatement methods
>    3. ResultSet.updateXXX methods
>    4. Connection.createBlob()
> There is dependencies between these steps and it might be that the Locator 
> implementation cannot be exposed until everything has been done.  At least, 
> doing just step 1, gives testing errors because tests use Blobs fetched from 
> DB as parameters to prepared statements.   I would guess tests for updatable 
> result sets, needs the combination of 1. and 3.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to