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


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.

Reply via email to