Class ClobStreamHeaderGenerator
- All Implemented Interfaces:
StreamHeaderGenerator
THREAD SAFETY NOTE: This class is considered thread safe, even though it strictly speaking isn't. However, with the assumption that an instance of this class cannot be shared across databases with different versions, the only bad thing that can happen is that the mode is obtained several times.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final StringDataValue
Reference to "owning" DVD, used to update it with information about which header format should be used.private static final CharStreamHeaderGenerator
Header generator for the pre 10.5 header format.private Boolean
true
if the database version is prior to 10.5,false
if the version is 10.5 or newer.private static final byte
Magic byte for the 10.5 stream header format.private static final byte[]
Bytes for a 10.5 unknown length header. -
Constructor Summary
ConstructorsConstructorDescriptionClobStreamHeaderGenerator
(boolean isPreDerbyTenFive) Creates a new generator using the specified header format.Creates a new generator that will use the context manager to determine which header format to use based on the database version. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
Determines which header format to use.boolean
Tells if the header encodes a character or byte count.int
generateInto
(byte[] buf, int offset, long valueLength) Generates the header for the specified length and writes it into the provided buffer, starting at the specified offset.int
generateInto
(ObjectOutput out, long valueLength) Generates the header for the specified length.private static Context
getContext
(String contextID) Privileged lookup of a Context.int
Returns the maximum header length.int
writeEOF
(byte[] buffer, int offset, long valueLength) Writes a Derby-specific end-of-stream marker to the buffer for a stream of the specified character length, if required.int
writeEOF
(ObjectOutput out, long valueLength) Writes a Derby-specific end-of-stream marker to the destination stream for the specified character length, if required.
-
Field Details
-
MAGIC_BYTE
private static final byte MAGIC_BYTEMagic byte for the 10.5 stream header format.- See Also:
-
UNKNOWN_LENGTH
private static final byte[] UNKNOWN_LENGTHBytes for a 10.5 unknown length header. -
CHARHDRGEN
Header generator for the pre 10.5 header format. This format is used for Clobs as well if the database version is pre 10.5. -
callbackDVD
Reference to "owning" DVD, used to update it with information about which header format should be used. This is currently only determined by consulting the data dictionary about the version.This is an optimization to avoid having to consult the data dictionary on every request to generate a header when a data value descriptor is reused.
-
isPreDerbyTenFive
true
if the database version is prior to 10.5,false
if the version is 10.5 or newer. Ifnull
, the version will be determined by obtaining the database context through the context service.
-
-
Constructor Details
-
ClobStreamHeaderGenerator
Creates a new generator that will use the context manager to determine which header format to use based on the database version.- Parameters:
dvd
- the owning data value descriptor
-
ClobStreamHeaderGenerator
public ClobStreamHeaderGenerator(boolean isPreDerbyTenFive) Creates a new generator using the specified header format.- Parameters:
isPreDerbyTenFive
-true
if the database version is prior to 10.5,false
if the version is 10.5 or newer
-
-
Method Details
-
expectsCharCount
public boolean expectsCharCount()Tells if the header encodes a character or byte count.Currently the header expects a character count if the header format is 10.5 (or newer), and a byte count if we are accessing a database created by a version prior to 10.5.
- Specified by:
expectsCharCount
in interfaceStreamHeaderGenerator
- Returns:
false
if a byte count is expected (prior to 10.5),true
if a character count is expected (10.5 and newer).
-
generateInto
public int generateInto(byte[] buf, int offset, long valueLength) Generates the header for the specified length and writes it into the provided buffer, starting at the specified offset.- Specified by:
generateInto
in interfaceStreamHeaderGenerator
- Parameters:
buf
- the buffer to write intooffset
- starting offset in the buffervalueLength
- the length to encode in the header- Returns:
- The number of bytes written into the buffer.
-
generateInto
Generates the header for the specified length.- Specified by:
generateInto
in interfaceStreamHeaderGenerator
- Parameters:
out
- the destination streamvalueLength
- the length to encode in the header- Returns:
- The number of bytes written to the destination stream.
- Throws:
IOException
- if writing to the destination stream fails
-
writeEOF
public int writeEOF(byte[] buffer, int offset, long valueLength) Writes a Derby-specific end-of-stream marker to the buffer for a stream of the specified character length, if required.- Specified by:
writeEOF
in interfaceStreamHeaderGenerator
- Parameters:
buffer
- the buffer to write intooffset
- starting offset in the buffervalueLength
- the length of the stream- Returns:
- Number of bytes written (zero or more).
-
writeEOF
Writes a Derby-specific end-of-stream marker to the destination stream for the specified character length, if required.- Specified by:
writeEOF
in interfaceStreamHeaderGenerator
- Parameters:
out
- the destination streamvalueLength
- the length of the stream- Returns:
- Number of bytes written (zero or more).
- Throws:
IOException
- if writing to the destination stream fails
-
getMaxHeaderLength
public int getMaxHeaderLength()Returns the maximum header length.- Specified by:
getMaxHeaderLength
in interfaceStreamHeaderGenerator
- Returns:
- Maximum header length in bytes.
-
determineHeaderFormat
private void determineHeaderFormat()Determines which header format to use.Implementation note: The header format is determined by consulting the data dictionary throught the context service. If there is no context, the operation will fail.
- Throws:
IllegalStateException
- if there is no context
-
getContext
Privileged lookup of a Context. Must be private so that user code can't call this entry point.
-