org.apache.derby.iapi.types
Class ClobStreamHeaderGenerator

java.lang.Object
  extended by org.apache.derby.iapi.types.ClobStreamHeaderGenerator
All Implemented Interfaces:
StreamHeaderGenerator

public final class ClobStreamHeaderGenerator
extends java.lang.Object
implements StreamHeaderGenerator

Generates stream headers for Clob data values.

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
private  StringDataValue callbackDVD
          Reference to "owning" DVD, used to update it with information about whether the database is being accessed in soft upgrade mode or not.
private static CharStreamHeaderGenerator CHARHDRGEN
          Header generator for the pre 10.5 header format.
private  java.lang.Boolean inSoftUpgradeMode
          true if database is being accessed in soft upgrade mode, false is not.
private static byte MAGIC_BYTE
          Magic byte for the 10.5 stream header format.
private static byte[] UNKNOWN_LENGTH
          Bytes for a 10.5 unknown length header.
 
Fields inherited from interface org.apache.derby.iapi.types.StreamHeaderGenerator
DERBY_EOF_MARKER
 
Constructor Summary
ClobStreamHeaderGenerator(boolean inSoftUpgradeMode)
          Creates a new generator for a database in the given mode.
ClobStreamHeaderGenerator(StringDataValue dvd)
          Creates a new generator that will use the context manager to determine if the database is being accessed in soft upgrade mode or not.
 
Method Summary
private  void determineMode()
          Determines if the database being accessed is accessed in soft upgrade mode or not.
 boolean expectsCharCount()
          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(java.io.ObjectOutput out, long valueLength)
          Generates the header for the specified 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(java.io.ObjectOutput out, long valueLength)
          Writes a Derby-specific end-of-stream marker to the destination stream for the specified character length, if required.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAGIC_BYTE

private static final byte MAGIC_BYTE
Magic byte for the 10.5 stream header format.

See Also:
Constant Field Values

UNKNOWN_LENGTH

private static final byte[] UNKNOWN_LENGTH
Bytes for a 10.5 unknown length header.


CHARHDRGEN

private static final CharStreamHeaderGenerator 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

private final StringDataValue callbackDVD
Reference to "owning" DVD, used to update it with information about whether the database is being accessed in soft upgrade mode or not.

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.


inSoftUpgradeMode

private java.lang.Boolean inSoftUpgradeMode
true if database is being accessed in soft upgrade mode, false is not. If null, the mode will be determined by obtaining the database context through the context service.

Constructor Detail

ClobStreamHeaderGenerator

public ClobStreamHeaderGenerator(StringDataValue dvd)
Creates a new generator that will use the context manager to determine if the database is being accessed in soft upgrade mode or not.

Parameters:
dvd - the owning data value descriptor

ClobStreamHeaderGenerator

public ClobStreamHeaderGenerator(boolean inSoftUpgradeMode)
Creates a new generator for a database in the given mode.

Parameters:
inSoftUpgradeMode - true if the database is being accessed in soft upgrade mode, false if not
Method Detail

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 in soft upgrade mode.

Specified by:
expectsCharCount in interface StreamHeaderGenerator
Returns:
false if in soft upgrade mode, true if not.

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 interface StreamHeaderGenerator
Parameters:
buf - the buffer to write into
offset - starting offset in the buffer
valueLength - the length to encode in the header
Returns:
The number of bytes written into the buffer.

generateInto

public int generateInto(java.io.ObjectOutput out,
                        long valueLength)
                 throws java.io.IOException
Generates the header for the specified length.

Specified by:
generateInto in interface StreamHeaderGenerator
Parameters:
out - the destination stream
valueLength - the length to encode in the header
Returns:
The number of bytes written to the destination stream.
Throws:
java.io.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 interface StreamHeaderGenerator
Parameters:
buffer - the buffer to write into
offset - starting offset in the buffer
valueLength - the length of the stream
Returns:
Number of bytes written (zero or more).

writeEOF

public int writeEOF(java.io.ObjectOutput out,
                    long valueLength)
             throws java.io.IOException
Writes a Derby-specific end-of-stream marker to the destination stream for the specified character length, if required.

Specified by:
writeEOF in interface StreamHeaderGenerator
Parameters:
out - the destination stream
valueLength - the length of the stream
Returns:
Number of bytes written (zero or more).
Throws:
java.io.IOException - if writing to the destination stream fails

determineMode

private void determineMode()
Determines if the database being accessed is accessed in soft upgrade mode or not.


Built on Sat 2009-11-28 18:44:18-0800, from revision 885187

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.