Class StoredRecordHeader

java.lang.Object
org.apache.derby.impl.store.raw.data.StoredRecordHeader

public final class StoredRecordHeader extends Object
A class StoredPage uses to cache record headers by passing instances to BasePage, and to write stored versions of record headers. Format

    1 byte          - status
    compressed int  - record identifier

    compressed long - overflow page } only if hasOverflow() is true
    compressed int  - overflow id   }     "        "           "

    compressed int  - first field   } only if hasFirstField set - otherwise 0

    compressed int  - number of fields in this portion - only if hasOverflow()
                                is false OR hasFirstField is true - otherwise 0
    
  • Field Details

    • RECORD_DELETED

      private static final byte RECORD_DELETED
      Status bits for the record header: RECORD_DELETED - used to indicate the record has been deleted RECORD_OVERFLOW - used to indicate the record has been overflowed, it will point to the overflow page and ID RECORD_HAS_FIRST_FIELD - used to indicate that firstField is stored. When RECORD_OVERFLOW and RECORD_HAS_FIRST_FIELD both are set, part of record is on the page, the record header also stores the overflow pointer to the next part of the record. RECORD_VALID_MASK - A mask of valid bits that can be set currently, such that the following assert can be made: ASSERT((status & ~RECORD_VALID_MASK) == 0))
      See Also:
    • RECORD_OVERFLOW

      private static final byte RECORD_OVERFLOW
      See Also:
    • RECORD_HAS_FIRST_FIELD

      private static final byte RECORD_HAS_FIRST_FIELD
      See Also:
    • RECORD_VALID_MASK

      private static final byte RECORD_VALID_MASK
      See Also:
    • MAX_OVERFLOW_ONLY_REC_SIZE

      public static final int MAX_OVERFLOW_ONLY_REC_SIZE
      maximum length for row containing just an overflow pointer.

      The maximum stored length of a row that just contains an overflow pointer is 17 bytes: stored sizeof(status byte) : 1 + stored sizeof(record id) : 4 + max stored size overflow page ptr: 8 + max stored size overflow record id: 4

      See Also:
    • id

      protected int id
      Actual identifier of the record
      MT - Mutable
    • status

      private byte status
      Status of the record. See above for description of fields: RECORD_DELETED RECORD_OVERFLOW RECORD_HAS_FIRST_FIELD RECORD_VALID_MASK
      MT - Mutable - single thread required.
    • numberFields

      protected int numberFields
      number of fields in the row.
    • handle

      protected RecordHandle handle
      A record handle that can represent the record, may be null.
    • overflow

  • Constructor Details

    • StoredRecordHeader

      public StoredRecordHeader()
      Constructors for This class:
    • StoredRecordHeader

      public StoredRecordHeader(int id, int numberFields)
    • StoredRecordHeader

      public StoredRecordHeader(byte[] data, int offset)
    • StoredRecordHeader

      public StoredRecordHeader(StoredRecordHeader loadTargetFrom)
  • Method Details

    • getHandle

      protected RecordHandle getHandle(PageKey pageId, int current_slot)
      Get a record handle for the record.


      MT - single thread required

    • getId

      public final int getId()
      Get the record identifier
      MT - thread safe
    • getNumberFields

      public int getNumberFields()
    • getOverflowPage

      public long getOverflowPage()
    • getOverflowId

      public int getOverflowId()
    • getFirstField

      public int getFirstField()
    • hasOverflow

      public final boolean hasOverflow()
    • hasFirstField

      protected final boolean hasFirstField()
    • isDeleted

      public final boolean isDeleted()
      Get the deleted state of the record.


      MT - single thread required

    • size

      public int size()
      return the size of the record header.

      Calculates the size of the record header, mostly used to allow a reader to skip over the record header and position on the 1st field of the record.

      This low level routine is performance critical to processing lots of rows, so calls to CompressNumber have been hand inlined.

      Returns:
      The length of the record header.
    • setDeleted

      public int setDeleted(boolean deleteTrue)
      Set the deleted state of the record.

      return 1, if delete status from not deleted to deleted return -1, if delete status from deleted to not deleted return 0, if status unchanged.
      MT - single thread required

    • setFirstField

      public void setFirstField(int firstField)
    • setId

      public final void setId(int id)
    • setOverflowDetails

      public void setOverflowDetails(RecordHandle overflowHandle)
    • setOverflowFields

      public void setOverflowFields(StoredRecordHeader loadFromTarget)
    • setNumberFields

      public final void setNumberFields(int numberFields)
    • write

      public int write(OutputStream out) throws IOException
      Public Methods implmenting read/write of Storable Interface:
      Throws:
      IOException
    • read

      public void read(ObjectInput in) throws IOException
      Throws:
      IOException
    • readOverFlowPage

      private int readOverFlowPage(byte[] data, int offset)
    • readOverFlowId

      private int readOverFlowId(byte[] data, int offset)
    • readFirstField

      private int readFirstField(byte[] data, int offset)
    • readNumberFields

      private void readNumberFields(byte[] data, int offset)
    • read

      private void read(byte[] data, int offset)
    • getStoredSizeRecordId

      public static final int getStoredSizeRecordId(int record_id)
      Return length on disk of the record id portion of the record header Record id is part of the record header and is stored in an internal compressed format. The length of this format depends on the value of the record id.
      Returns:
      length of encoded record id on disk.
    • toString

      public String toString()
      Overrides:
      toString in class Object