You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Kristian Waagan (JIRA)" <ji...@apache.org> on 2010/07/13 12:01:56 UTC

[jira] Closed: (DERBY-4241) Improve transition from read-only to writable Clob representation

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

Kristian Waagan closed DERBY-4241.
----------------------------------


Backported to 10.6 with revision 963652.
Closing issue.

> Improve transition from read-only to writable Clob representation
> -----------------------------------------------------------------
>
>                 Key: DERBY-4241
>                 URL: https://issues.apache.org/jira/browse/DERBY-4241
>             Project: Derby
>          Issue Type: Improvement
>          Components: JDBC
>    Affects Versions: 10.5.1.1, 10.6.1.0
>            Reporter: Kristian Waagan
>            Assignee: Kristian Waagan
>            Priority: Minor
>             Fix For: 10.7.0.0
>
>         Attachments: better.txt, derby-4241-1a-InternalClob.getLengthIfKnown.diff, derby-4241-2a-utf8AwareCopy.diff, derby-4241-2b-utf8AwareCopy.diff, derby-4241-32core-cmt.txt
>
>
> When a store stream Clob is going to be modified, it will be written out to the temporary area of Derby and represented as a TemporaryClob.
> The transfer of the data is done in a sub-optimal manner for two reasons;
>  o for transfer of the complete Clob, the copy method operates on the byte level and we're not able to save the character length.
>  o for transfer of parts of the Clob (i.e. truncation), we have to first decode the UTF-8 encoding to find the byte count and then transfer the same bytes.
> I intend to do the following two changes;
>  1) Add a getCharLengthIfKnow-method to InternalClob.
>  2) Add a UTF-8 aware copy method to LOBStreamControl.
> When a complete Clob is to be copied, code like this will be executed;
>   cachedCharLength = internalClob.getLengthIfKnown();
>   if (cachedCharLength > 0)
>       // use existing byte-oriented copy method for best performance (copy until EOF)
>   else
>       cachedCharLength = control.copyUTF8Data()
> When parts of a Clob is to be copied, we always use the UTF-8 aware copy method, but we also do a cheap range check.
>   cachedCharLength = internalClob.getLengthIfKnown();
>   if (cachedCharLength > 0 && requestedLength > cachedCharLength)
>       throw EOFException();
>   if (cachedCharLength == requestedLength)
>      // use existing byte-oriented copy method for best performance (copy until EOF)
>   else
>       cachedCharLength = control.copyUTF8Data(requestedLength);
> Adding the UTF-8 aware copy method was started under DERBY-4023, including comments on the first revision of a patch.

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