Avoid unnecessary use of getStream and getStreamWithDescriptor
--------------------------------------------------------------

                 Key: DERBY-4563
                 URL: https://issues.apache.org/jira/browse/DERBY-4563
             Project: Derby
          Issue Type: Improvement
          Components: JDBC
    Affects Versions: 10.6.0.0
            Reporter: Kristian Waagan
            Assignee: Kristian Waagan
            Priority: Minor
             Fix For: 10.6.0.0


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

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