Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-4241

Improve transition from read-only to writable Clob representation


    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s:,
    • Fix Version/s:
    • Component/s: JDBC
    • Labels:
    • Bug behavior facts:


      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)
      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)
      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.


        1. derby-4241-2b-utf8AwareCopy.diff
          12 kB
          Kristian Waagan
        2. derby-4241-32core-cmt.txt
          5 kB
          Kristian Waagan
        3. better.txt
          4 kB
          Kristian Waagan
        4. derby-4241-2a-utf8AwareCopy.diff
          11 kB
          Kristian Waagan
        5. derby-4241-1a-InternalClob.getLengthIfKnown.diff
          3 kB
          Kristian Waagan

          Issue Links



              • Assignee:
                kristwaa Kristian Waagan
                kristwaa Kristian Waagan
              • Votes:
                0 Vote for this issue
                0 Start watching this issue


                • Created: