Class ConstraintConstantAction

All Implemented Interfaces:
ConstantAction
Direct Known Subclasses:
AlterConstraintConstantAction, CreateConstraintConstantAction, DropConstraintConstantAction

public abstract class ConstraintConstantAction extends DDLSingleTableConstantAction
This class describes actions that are ALWAYS performed for a constraint creation at Execution time.
Version:
0.1
  • Field Details

    • constraintName

      protected String constraintName
    • constraintType

      protected int constraintType
    • tableName

      protected String tableName
    • schemaName

      protected String schemaName
    • schemaId

      protected UUID schemaId
    • indexAction

      protected IndexConstantAction indexAction
    • constraintId

      protected UUID constraintId
  • Constructor Details

    • ConstraintConstantAction

      ConstraintConstantAction(String constraintName, int constraintType, String tableName, UUID tableId, String schemaName, IndexConstantAction indexAction)
      Make one of these puppies.
      Parameters:
      constraintName - Constraint name.
      constraintType - Constraint type.
      tableName - Table name.
      tableId - UUID of table.
      schemaName - schema that table and constraint lives in.
      indexAction - IndexConstantAction for constraint (if necessary) RESOLVE - the next parameter should go away once we use UUIDs (Generated constraint names will be based off of uuids)
  • Method Details

    • getConstraintType

      public int getConstraintType()
      Get the constraint type.
      Returns:
      The constraint type
    • getConstraintName

      public String getConstraintName()
      Get the constraint name
      Returns:
      the constraint name
    • getConstraintId

      public UUID getConstraintId()
      Get the constraint id of the constraint
      Returns:
      constraint id
    • getIndexAction

      public IndexConstantAction getIndexAction()
      Get the associated index constant action.
      Returns:
      the constant action for the backing index
    • validateFKConstraint

      static void validateFKConstraint(Activation activation, TransactionController tc, DataDictionary dd, ForeignKeyConstraintDescriptor fk, ReferencedKeyConstraintDescriptor refcd, ExecRow indexTemplateRow) throws StandardException
      Make sure that the foreign key constraint is valid with the existing data in the target table. Open the table, if there aren't any rows, ok. If there are rows, open a scan on the referenced key with table locking at level 2. Pass in the scans to the BulkRIChecker. If any rows fail, barf.
      Parameters:
      tc - transaction controller
      dd - data dictionary
      fk - foreign key constraint
      refcd - referenced key
      indexTemplateRow - index template row
      Throws:
      StandardException - on error
    • validateConstraint

      static boolean validateConstraint(String constraintName, String constraintText, UUID constraintId, TableDescriptor td, LanguageConnectionContext lcc, boolean isCheckConstraint, boolean isInitiallyDeferred) throws StandardException
      Evaluate a check constraint or not null column constraint. Generate a query of the form SELECT COUNT(*) FROM t where NOT() and run it by compiling and executing it. Will work ok if the table is empty and query returns null.
      Parameters:
      constraintName - constraint name
      constraintText - constraint text
      constraintId - constraint id
      td - referenced table
      lcc - the language connection context
      isCheckConstraint - the constraint is a check constraint
      isInitiallyDeferred - true if the constraint is initially deferred
      Returns:
      true if null constraint passes, false otherwise
      Throws:
      StandardException - if check constraint fails