[
https://issues.apache.org/jira/browse/DERBY-4241?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12718048#action_12718048
]
Knut Anders Hatlen commented on DERBY-4241:
-------------------------------------------
Sorry, I thought I had commented on 2a already, but seems I had only looked at
it. It looks fine to me. Or perhaps "correct" is more accurate than "fine",
since the LOB code is getting more and more complex every day, it seems... :)
Did you run any tests to verify that the performance was improved by the
changes?
> 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: Sub-task
> Components: JDBC
> Affects Versions: 10.5.1.1, 10.6.0.0
> Reporter: Kristian Waagan
> Assignee: Kristian Waagan
> Priority: Minor
> Attachments: derby-4241-1a-InternalClob.getLengthIfKnown.diff,
> derby-4241-2a-utf8AwareCopy.diff
>
>
> 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.