Class IndexRowGenerator

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable, IndexDescriptor, Formatable, TypedFormat

    public class IndexRowGenerator
    extends java.lang.Object
    implements IndexDescriptor, Formatable
    This class extends IndexDescriptor for internal use by the DataDictionary.

    For a description of how deferrable and non-deferrable constraints are backed differently, including the meaning of the boolean attributes used here, see IndexDescriptor.

    See Also:
    Serialized Form
    • Constructor Detail

      • IndexRowGenerator

        public IndexRowGenerator​(java.lang.String indexType,
                                 boolean isUnique,
                                 boolean isUniqueWithDuplicateNulls,
                                 boolean isUniqueDeferrable,
                                 boolean hasDeferrableChecking,
                                 int[] baseColumnPositions,
                                 boolean[] isAscending,
                                 int numberOfOrderedColumns)
        Constructor for an IndexRowGeneratorImpl
        Parameters:
        indexType - The type of index
        isUnique - True means the index is unique
        isUniqueWithDuplicateNulls - means the index is almost unique i.e. unique only for non null keys
        isUniqueDeferrable - True means the index represents a PRIMARY KEY or a UNIQUE NOT NULL constraint which is deferrable.
        hasDeferrableChecking - True if the index is used to back a deferrable constraint
        baseColumnPositions - An array of column positions in the base table. Each index column corresponds to a column position in the base table.
        isAscending - An array of booleans telling asc/desc on each column.
        numberOfOrderedColumns - In the future, it will be possible to store non-ordered columns in an index. These will be useful for covered queries.
      • IndexRowGenerator

        public IndexRowGenerator​(IndexDescriptor indexDescriptor)
        Constructor for an IndexRowGeneratorImpl
        Parameters:
        indexDescriptor - An IndexDescriptor to delegate calls to
      • IndexRowGenerator

        public IndexRowGenerator()
        Zero-argument constructor for Formatable interface
    • Method Detail

      • getIndexRowTemplate

        public ExecIndexRow getIndexRowTemplate()
        Get a template for the index row, to be used with getIndexRow.
        Returns:
        A row template for the index row.
      • getNullIndexRow

        public ExecIndexRow getNullIndexRow​(ColumnDescriptorList columnList,
                                            RowLocation rowLocation)
                                     throws StandardException
        Get a NULL Index Row for this index. This is useful to create objects that need to be passed to ScanController.
        Parameters:
        columnList - ColumnDescriptors describing the base table.
        rowLocation - empty row location.
        Throws:
        StandardException - thrown on error.
      • getIndexRow

        public void getIndexRow​(ExecRow baseRow,
                                RowLocation rowLocation,
                                ExecIndexRow indexRow,
                                FormatableBitSet bitSet)
                         throws StandardException
        Get an index row for this index given a row from the base table and the RowLocation of the base row. This method can be used to get the new index row for inserts, and the old and new index rows for deletes and updates. For updates, the result row has all the old column values followed by all of the new column values, so you must form a row using the new column values to pass to this method to get the new index row.
        Parameters:
        baseRow - A row in the base table
        rowLocation - The RowLocation of the row in the base table
        indexRow - A template for the index row. It must have the correct number of columns.
        bitSet - If non-null, then baseRow is a partial row and the set bits in bitSet represents the column mapping for the partial row to the complete base row. WARNING: ONE based!!!
        Throws:
        StandardException - Thrown on error
      • getColumnCollationIds

        public int[] getColumnCollationIds​(ColumnDescriptorList columnList)
                                    throws StandardException
        Return an array of collation ids for this table.

        Return an array of collation ids, one for each column in the columnDescriptorList. This is useful for passing collation id info down to store, for instance in createConglomerate() to create the index. This is only expected to get called during ddl, so object allocation is ok.

        Parameters:
        columnList - ColumnDescriptors describing the base table.
        Throws:
        StandardException - Standard exception policy.
      • getIndexDescriptor

        public IndexDescriptor getIndexDescriptor()
        Get the IndexDescriptor that this IndexRowGenerator is based on.
      • isUniqueDeferrable

        public boolean isUniqueDeferrable()
        Description copied from interface: IndexDescriptor
        The index represents a PRIMARY KEY or a UNIQUE NOT NULL constraint which is deferrable. true implies isUnique() == false and isUniqueWithDuplicateNulls() == false and hasDeferrableChecking() == true.
        Specified by:
        isUniqueDeferrable in interface IndexDescriptor
        Returns:
        true if the index represents such a constraint
      • baseColumnPositions

        public int[] baseColumnPositions()
        Description copied from interface: IndexDescriptor
        Returns an array of column positions in the base table. Each index column corresponds to a column position in the base table, except the column representing the location of the row in the base table. The returned array holds the column positions in the base table, so, if entry 2 is the number 4, the second column in the index is the fourth column in the table.
        Specified by:
        baseColumnPositions in interface IndexDescriptor
        See Also:
        IndexDescriptor.baseColumnPositions()
      • numberOfOrderedColumns

        public int numberOfOrderedColumns()
        Description copied from interface: IndexDescriptor
        Returns the number of ordered columns.

        In the future, it will be possible to store non-ordered columns in an index. These will be useful for covered queries. The ordered columns will be at the beginning of the index row, and they will be followed by the non-ordered columns. For now, all columns in an index must be ordered.

        Specified by:
        numberOfOrderedColumns in interface IndexDescriptor
        See Also:
        IndexDescriptor.numberOfOrderedColumns()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • isAscending

        public boolean[] isAscending()
        Description copied from interface: IndexDescriptor
        Returns array of boolean telling asc/desc info for each index key column for convenience of using together with baseColumnPositions method. Both methods return an array with subscript starting from 0.
        Specified by:
        isAscending in interface IndexDescriptor
        See Also:
        IndexDescriptor.isAscending()
      • equals

        public boolean equals​(java.lang.Object other)
        Test for value equality
        Overrides:
        equals in class java.lang.Object
        Parameters:
        other - The other indexrowgenerator to compare this one with
        Returns:
        true if this indexrowgenerator has the same value as other
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
        See Also:
        Object.hashCode()
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException,
                                 java.lang.ClassNotFoundException
        Specified by:
        readExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException - Thrown on read error
        java.lang.ClassNotFoundException - Thrown on read error
        See Also:
        Externalizable.readExternal(java.io.ObjectInput)
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException - Thrown on write error
      • getTypeFormatId

        public int getTypeFormatId()
        Description copied from interface: TypedFormat
        Get a universally unique identifier for the type of this object.
        Specified by:
        getTypeFormatId in interface TypedFormat
        Returns:
        The identifier. (A UUID stuffed in an array of 16 bytes).
      • getContext

        private static Context getContext​(java.lang.String contextID)
        Privileged lookup of a Context. Must be private so that user code can't call this entry point.