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

Avoid unnecessary use of getStream and getStreamWithDescriptor

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 10.6.1.0
    • Fix Version/s: 10.6.1.0
    • Component/s: JDBC
    • Labels:
      None

      Description

      A pattern in Derby is to use the following piece of code to determine if the data value has a stream or not:
      if (dvd.getStream() != null) ...

      Since the stream has mutable state, obtaining a reference to it just to check if it is not null is sub-optimal for several reasons:

      • it may throw an exception (data types not supporting streams)
      • the stream reference is leaked, which is unfortunately if we are / will be required to guarantee something about the stream state (for instance that the descriptor is in sync with the stream).
      • in cases where we have to investigate the state of the stream, we're doing unnecessary work
      • makes it harder to write debug code (i.e., is a stream reference obtained from the data value descriptor more than once?)

      I plan to introduce the method DataValueDescriptor.hasStream, returning a boolean.
      In addition to the obvious check if the stream variable is non-null, it can also be used to instruct Derby to treat certain data values as non-streams even though the underlying value is currently a stream. One example is CHAR and VARCHAR, whose maximum lengths are so small that they should always be materialized to avoid the added complexity coming with streams (stream state, isolation levels - extra lock to keep stream stable?, cloning).

        Attachments

        1. derby-4563-1a-dvd_hasStream.diff
          21 kB
          Kristian Waagan
        2. derby-4563-1a-dvd_hasStream.stat
          1.0 kB
          Kristian Waagan
        3. derby-4563-1b-dvd_hasStream.diff
          21 kB
          Kristian Waagan
        4. derby-4563-2a-replace_streamstorable_in_jdbclayer.diff
          2 kB
          Kristian Waagan

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: