Class ConstraintDescriptor

All Implemented Interfaces:
Dependable, Dependent, Provider
Direct Known Subclasses:
CheckConstraintDescriptor, KeyConstraintDescriptor

public abstract class ConstraintDescriptor extends UniqueTupleDescriptor implements Provider, Dependent
This class is used to get information from a ConstraintDescriptor. A ConstraintDescriptor can represent a constraint on a table or on a column.
Version:
0.1
  • Field Details

    • ENABLED

      public static final int ENABLED
      See Also:
    • DISABLED

      public static final int DISABLED
      See Also:
    • ALL

      public static final int ALL
      See Also:
    • SYSCONSTRAINTS_STATE_FIELD

      public static final int SYSCONSTRAINTS_STATE_FIELD
      See Also:
    • table

    • constraintName

      final String constraintName
    • deferrable

      private boolean deferrable
    • initiallyDeferred

      private boolean initiallyDeferred
    • enforced

      private boolean enforced
    • referencedColumns

      private final int[] referencedColumns
    • constraintId

      final UUID constraintId
    • schemaDesc

      private final SchemaDescriptor schemaDesc
    • colDL

      private ColumnDescriptorList colDL
  • Constructor Details

    • ConstraintDescriptor

      ConstraintDescriptor(DataDictionary dataDictionary, TableDescriptor table, String constraintName, boolean deferrable, boolean initiallyDeferred, int[] referencedColumns, UUID constraintId, SchemaDescriptor schemaDesc, boolean enforced)
      Constructor for a ConstraintDescriptor
      Parameters:
      dataDictionary - The data dictionary that this descriptor lives in
      table - The descriptor of the table the constraint is on
      constraintName - The name of the constraint.
      deferrable - If the constraint can be deferred.
      initiallyDeferred - If the constraint starts life deferred.
      referencedColumns - columns that the constraint references
      constraintId - UUID of constraint
      schemaDesc - SchemaDescriptor
      enforced - Is the constraint enforced?
  • Method Details

    • getTableId

      public UUID getTableId()
      Gets the UUID of the table the constraint is on.
      Returns:
      The UUID of the table the constraint is on.
    • getUUID

      public UUID getUUID()
      Gets the UUID of the constraint.
      Specified by:
      getUUID in class UniqueTupleDescriptor
      Returns:
      The UUID of the constraint.
    • getConstraintName

      public String getConstraintName()
      Gets the name of the constraint.
      Returns:
      A String containing the name of the constraint.
    • getConstraintType

      public abstract int getConstraintType()
      Gets an identifier telling what type of descriptor it is (UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK).
      Returns:
      An identifier telling what type of descriptor it is (UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK).
    • getConglomerateId

      public abstract UUID getConglomerateId()
    • getConstraintText

      public String getConstraintText()
      Get the text of the constraint. (Only non-null/meaningful for check constraints.)
      Returns:
      The constraint text.
    • deferrable

      public boolean deferrable()
      Returns TRUE if the constraint is deferrable
      Returns:
      TRUE if the constraint is DEFERRABLE, FALSE if it is NOT DEFERRABLE.
    • setDeferrable

      public void setDeferrable(boolean b)
    • initiallyDeferred

      public boolean initiallyDeferred()
      Returns TRUE if the constraint is initially deferred
      Returns:
      TRUE if the constraint is initially DEFERRED, FALSE if the constraint is initially IMMEDIATE
    • setInitiallyDeferred

      public void setInitiallyDeferred(boolean b)
    • getReferencedColumns

      public int[] getReferencedColumns()
      Returns an array of column ids (i.e. ordinal positions) for the columns referenced in this table for a primary key, unique key, referential, or check constraint.
      Returns:
      An array of column ids for those constraints that can be on columns (primary, unique key, referential constraints, and check constraints). For check and unique constraints, it returns an array of columns ids that are referenced in the constraint. For primary key and referential constraints, it returns an array of column ids for the columns in this table (i.e. the primary key columns for a primary key constraint, and the foreign key columns for a foreign key constraint.
    • hasBackingIndex

      public abstract boolean hasBackingIndex()
      Does this constraint have a backing index?
      Returns:
      boolean Whether or not there is a backing index for this constraint.
    • getSchemaDescriptor

      public SchemaDescriptor getSchemaDescriptor()
      Get the SchemaDescriptor for the schema that this constraint belongs to.
      Returns:
      SchemaDescriptor The SchemaDescriptor for this constraint.
    • getKeyColumns

      public int[] getKeyColumns()
      RESOLVE: For now the ConstraintDescriptor code stores the array of key columns in the field 'otherColumns'. Jerry plans to re-organize things. For now to minimize his rototill I've implemented this function on the old structures. All new code should use getKeyColumns to get a constraint's key columns.
      See Also:
    • enforced

      public boolean enforced()
      Is this constraint enforced?
      Returns:
      true/false
    • setEnforced

      public void setEnforced(boolean b)
    • isReferenced

      public boolean isReferenced()
      Is this constraint referenced? Return false. Overridden by ReferencedKeyConstraints.
      Returns:
      false
    • getReferenceCount

      public int getReferenceCount()
      Get the number of enforced fks that reference this key. Overriden by ReferencedKeyConstraints.
      Returns:
      the number of fks
    • needsToFire

      public abstract boolean needsToFire(int stmtType, int[] modifiedCols)
      Does this constraint need to fire on this type of DML?
      Parameters:
      stmtType - the type of DML (StatementType.INSERT|StatementType.UPDATE|StatementType.DELETE)
      modifiedCols - the columns modified, or null for all
      Returns:
      true/false
    • getTableDescriptor

      public TableDescriptor getTableDescriptor()
      Get the table descriptor upon which this constraint is declared.
      Returns:
      the table descriptor
    • getColumnDescriptors

      public ColumnDescriptorList getColumnDescriptors() throws StandardException
      Get the column descriptors for all the columns referenced by this constraint.
      Returns:
      the column descriptor list
      Throws:
      StandardException - on error
    • areColumnsComparable

      public boolean areColumnsComparable(ColumnDescriptorList otherColumns) throws StandardException
      Indicates whether the column descriptor list is type comparable with the constraints columns. The types have to be identical AND in the same order to succeed.
      Parameters:
      otherColumns - the columns to compare
      Returns:
      true/false
      Throws:
      StandardException - on error
    • columnIntersects

      public boolean columnIntersects(int[] columnArray)
      Does a column intersect with our referenced columns
      Parameters:
      columnArray - columns to check Note-- this is not a static method.
    • doColumnsIntersect

      static boolean doColumnsIntersect(int[] otherColumns, int[] referencedColumns)
      Does a column in the input set intersect with our referenced columns?
      Parameters:
      otherColumns - the columns to compare. If null, asssumed to mean all columns
      referencedColumns - the columns referenced by the caller
      Returns:
      true/false
    • toString

      public String toString()
      Convert the ColumnDescriptor to a String.
      Overrides:
      toString in class Object
      Returns:
      A String representation of this ColumnDescriptor
    • getDependableFinder

      public DependableFinder getDependableFinder()
      Description copied from interface: Dependable
      Get an object which can be written to disk and which, when read from disk, will find or reconstruct this in-memory Dependable.
      Specified by:
      getDependableFinder in interface Dependable
      Returns:
      the stored form of this provider
      See Also:
    • getObjectName

      public String getObjectName()
      Return the name of this Provider. (Useful for errors.)
      Specified by:
      getObjectName in interface Dependable
      Returns:
      String The name of this provider.
    • getObjectID

      public UUID getObjectID()
      Get the provider's UUID
      Specified by:
      getObjectID in interface Dependable
      Returns:
      The provider's UUID
    • getClassType

      public String getClassType()
      Get the provider's type.
      Specified by:
      getClassType in interface Dependable
      Returns:
      char The provider's type.
    • isValid

      public boolean isValid()
      Check that all of the dependent's dependencies are valid.
      Specified by:
      isValid in interface Dependent
      Returns:
      true if the dependent is currently valid
    • prepareToInvalidate

      public void prepareToInvalidate(Provider p, int action, LanguageConnectionContext lcc) throws StandardException
      Prepare to mark the dependent as invalid (due to at least one of its dependencies being invalid).
      Specified by:
      prepareToInvalidate in interface Dependent
      Parameters:
      p - the provider
      action - The action causing the invalidation
      lcc - The LanguageConnectionContext
      Throws:
      StandardException - thrown if unable to make it invalid
    • makeInvalid

      public void makeInvalid(int action, LanguageConnectionContext lcc) throws StandardException
      Mark the dependent as invalid (due to at least one of its dependencies being invalid). Always an error for a constraint -- should never have gotten here.
      Specified by:
      makeInvalid in interface Dependent
      Parameters:
      action - The action causing the invalidation
      lcc - The LanguageConnectionContext
      Throws:
      StandardException - thrown if called in sanity mode
    • drop

      public ConglomerateDescriptor drop(LanguageConnectionContext lcc, boolean clearDependencies) throws StandardException
      Drop the constraint. Clears dependencies, drops the backing index and removes the constraint from the list on the table descriptor. Does NOT do an dm.invalidateFor()
      Returns:
      If the backing conglomerate for this constraint was a) dropped and b) shared by other constraints/indexes, then this method will return a ConglomerateDescriptor that describes what a new backing conglomerate must look like to stay "sharable" across the remaining constraints/indexes. It is then up to the caller to create a corresponding conglomerate. We don't create the conglomerate here because depending on who called us, it might not make sense to create it--ex. if we get here because of a DROP TABLE, the DropTable action doesn't need to create a new backing conglomerate since the table (and all of its constraints/indexes) are going to disappear anyway.
      Throws:
      StandardException
    • getDescriptorName

      public String getDescriptorName()
      Overrides:
      getDescriptorName in class TupleDescriptor
      See Also:
    • getDescriptorType

      public String getDescriptorType()
      Description copied from class: TupleDescriptor
      Each descriptor must identify itself with its type; i.e index, check constraint whatever.
      Overrides:
      getDescriptorType in class TupleDescriptor