org.apache.derby.iapi.sql.dictionary
Class ConstraintDescriptor

java.lang.Object
  extended byorg.apache.derby.iapi.sql.dictionary.TupleDescriptor
      extended byorg.apache.derby.iapi.sql.dictionary.ConstraintDescriptor
All Implemented Interfaces:
Dependable, Dependent, Provider, UniqueTupleDescriptor
Direct Known Subclasses:
CheckConstraintDescriptor, KeyConstraintDescriptor

public abstract class ConstraintDescriptor
extends TupleDescriptor
implements UniqueTupleDescriptor, 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
Author:
Jeff Lichtman

Field Summary
static int ALL
           
(package private)  ColumnDescriptorList colDL
           
(package private)  UUID constraintId
           
(package private)  java.lang.String constraintName
           
(package private)  boolean deferrable
           
static int DISABLED
           
static int ENABLED
           
(package private)  boolean initiallyDeferred
           
(package private)  boolean isEnabled
           
(package private)  int[] referencedColumns
           
(package private)  SchemaDescriptor schemaDesc
           
static int SYSCONSTRAINTS_STATE_FIELD
           
(package private)  TableDescriptor table
           
 
Fields inherited from class org.apache.derby.iapi.sql.dictionary.TupleDescriptor
COLUMN_LIST, CONGLOMERATE_LIST, CONSTRAINT_LIST, TRIGGER_LIST
 
Fields inherited from interface org.apache.derby.catalog.Dependable
ALIAS, COLUMNS_IN_TABLE, CONGLOMERATE, CONSTRAINT, DEFAULT, FILE, HEAP, INDEX, PREPARED_STATEMENT, SCHEMA, STORED_PREPARED_STATEMENT, TABLE, TRIGGER, VIEW
 
Constructor Summary
(package private) ConstraintDescriptor(DataDictionary dataDictionary, TableDescriptor table, java.lang.String constraintName, boolean deferrable, boolean initiallyDeferred, int[] referencedColumns, UUID constraintId, SchemaDescriptor schemaDesc, boolean isEnabled)
          Constructor for a ConstraintDescriptor
 
Method Summary
 boolean areColumnsComparable(ColumnDescriptorList otherColumns)
          Indicates whether the column descriptor list is type comparable with the constraints columns.
 boolean columnIntersects(int[] columnArray)
          Does a column intersect with our referenced columns
 boolean deferrable()
          Returns TRUE if the constraint is deferrable (we will probably not do deferrable constraints in the initial release, but I want this to be part of the interface).
(package private) static boolean doColumnsIntersect(int[] otherColumns, int[] referencedColumns)
          Does a column in the input set intersect with our referenced columns?
 java.lang.String getClassType()
          Get the provider's type.
 ColumnDescriptorList getColumnDescriptors()
          Get the column descriptors for all the columns referenced by this constraint.
abstract  UUID getConglomerateId()
           
 java.lang.String getConstraintName()
          Gets the name of the constraint.
 java.lang.String getConstraintText()
          Get the text of the constraint.
abstract  int getConstraintType()
          Gets an identifier telling what type of descriptor it is (UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK).
 DependableFinder getDependableFinder()
          Get an object which can be written to disk and which, when read from disk, will find or reconstruct this in-memory Dependable.
 java.lang.String getDescriptorName()
           
 java.lang.String getDescriptorType()
          Each descriptor must identify itself with its type; i.e index, check constraint whatever.
 int[] getKeyColumns()
          RESOLVE: For now the ConstraintDescriptor code stores the array of key columns in the field 'otherColumns'.
 UUID getObjectID()
          Get the provider's UUID
 java.lang.String getObjectName()
          Return the name of this Provider.
 int getReferenceCount()
          Get the number of enabled fks that reference this key.
 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.
 SchemaDescriptor getSchemaDescriptor()
          Get the SchemaDescriptor for the schema that this constraint belongs to.
 TableDescriptor getTableDescriptor()
          Get the table descriptor upon which this constraint is declared.
 UUID getTableId()
          Gets the UUID of the table the constraint is on.
 UUID getUUID()
          Gets the UUID of the constraint.
abstract  boolean hasBackingIndex()
          Does this constraint have a backing index?
 boolean initiallyDeferred()
          Returns TRUE if the constraint is initially deferred (we will probably not do initially deferred constraints in the initial release, but I want this to be part of the interface).
 boolean isEnabled()
          Is this constraint active?
 boolean isReferenced()
          Is this constraint referenced?
 boolean isValid()
          Check that all of the dependent's dependencies are valid.
 void makeInvalid(int action, LanguageConnectionContext lcc)
          Mark the dependent as invalid (due to at least one of its dependencies being invalid).
 void makeValid(LanguageConnectionContext lcc)
          Attempt to revalidate the dependent.
abstract  boolean needsToFire(int stmtType, int[] modifiedCols)
          Does this constraint need to fire on this type of DML?
 void prepareToInvalidate(Provider p, int action, LanguageConnectionContext lcc)
          Prepare to mark the dependent as invalid (due to at least one of its dependencies being invalid).
 void setConstraintId(UUID constraintId)
          Sets the UUID of the constraint.
 void setDisabled()
          Set the constraint to disabled.
 void setEnabled()
          Set the constraint to enabled.
 java.lang.String toString()
          Convert the ColumnDescriptor to a String.
 
Methods inherited from class org.apache.derby.iapi.sql.dictionary.TupleDescriptor
getColumnDependableFinder, getDataDictionary, getDependableFinder, isPersistent, setDataDictionary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.apache.derby.catalog.Dependable
isPersistent
 

Field Detail

ENABLED

public static final int ENABLED
See Also:
Constant Field Values

DISABLED

public static final int DISABLED
See Also:
Constant Field Values

ALL

public static final int ALL
See Also:
Constant Field Values

SYSCONSTRAINTS_STATE_FIELD

public static final int SYSCONSTRAINTS_STATE_FIELD
See Also:
Constant Field Values

table

TableDescriptor table

constraintName

java.lang.String constraintName

deferrable

boolean deferrable

initiallyDeferred

boolean initiallyDeferred

isEnabled

boolean isEnabled

referencedColumns

int[] referencedColumns

constraintId

UUID constraintId

schemaDesc

SchemaDescriptor schemaDesc

colDL

ColumnDescriptorList colDL
Constructor Detail

ConstraintDescriptor

ConstraintDescriptor(DataDictionary dataDictionary,
                     TableDescriptor table,
                     java.lang.String constraintName,
                     boolean deferrable,
                     boolean initiallyDeferred,
                     int[] referencedColumns,
                     UUID constraintId,
                     SchemaDescriptor schemaDesc,
                     boolean isEnabled)
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
Method Detail

getTableId

public UUID getTableId()
Gets the UUID of the table the constraint is on.

Returns:
The UUID of the table the constraint is on.

setConstraintId

public void setConstraintId(UUID constraintId)
Sets the UUID of the constraint.

Parameters:
constraintId - The constraint Id.
Returns:
Nothing.

getUUID

public UUID getUUID()
Gets the UUID of the constraint.

Specified by:
getUUID in interface UniqueTupleDescriptor
Returns:
The UUID of the constraint.

getConstraintName

public java.lang.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 java.lang.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 (we will probably not do deferrable constraints in the initial release, but I want this to be part of the interface).

Returns:
TRUE if the constraint is deferrable, FALSE if not

initiallyDeferred

public boolean initiallyDeferred()
Returns TRUE if the constraint is initially deferred (we will probably not do initially deferred constraints in the initial release, but I want this to be part of the interface).

Returns:
TRUE if the constraint is initially deferred, FALSE if not

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:
getKeyColumns()

isEnabled

public boolean isEnabled()
Is this constraint active?

Returns:
true/false

setEnabled

public void setEnabled()
Set the constraint to enabled. Does not update the data dictionary


setDisabled

public void setDisabled()
Set the constraint to disabled. Does not update the data dictionary


isReferenced

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

Returns:
false

getReferenceCount

public int getReferenceCount()
Get the number of enabled 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:
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


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
Returns:
true/false

toString

public java.lang.String toString()
Convert the ColumnDescriptor to a String.

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:
Dependable.getDependableFinder()

getObjectName

public java.lang.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 java.lang.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:
action - The action causing the invalidation
p - the provider
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

makeValid

public void makeValid(LanguageConnectionContext lcc)
Attempt to revalidate the dependent. Meaningless for constraints.

Specified by:
makeValid in interface Dependent
Parameters:
lcc - The LanguageConnectionContext

getDescriptorName

public java.lang.String getDescriptorName()
Overrides:
getDescriptorName in class TupleDescriptor
See Also:
TupleDescriptor.getDescriptorName()

getDescriptorType

public java.lang.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


Apache Derby V10.0 Engine Documentation - Copyright © 1997,2004 The Apache Software Foundation or its licensors, as applicable.