Class StoredRecordHeader


  • public final class StoredRecordHeader
    extends java.lang.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 Detail

      • 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:
        Constant Field Values
      • RECORD_HAS_FIRST_FIELD

        private static final byte RECORD_HAS_FIRST_FIELD
        See Also:
        Constant Field Values
      • 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:
        Constant Field Values
      • 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.
    • Constructor Detail

      • StoredRecordHeader

        public StoredRecordHeader()
        Constructors for This class:
      • StoredRecordHeader

        public StoredRecordHeader​(int id,
                                  int numberFields)
      • StoredRecordHeader

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

      • 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​(java.io.OutputStream out)
                  throws java.io.IOException
        Public Methods implmenting read/write of Storable Interface:
        Throws:
        java.io.IOException
      • read

        public void read​(java.io.ObjectInput in)
                  throws java.io.IOException
        Throws:
        java.io.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 java.lang.String toString()
        Overrides:
        toString in class java.lang.Object