org.apache.derby.impl.sql.execute
Class ConstraintConstantAction

java.lang.Object
  extended byorg.apache.derby.impl.sql.execute.GenericConstantAction
      extended byorg.apache.derby.impl.sql.execute.DDLConstantAction
          extended byorg.apache.derby.impl.sql.execute.DDLSingleTableConstantAction
              extended byorg.apache.derby.impl.sql.execute.ConstraintConstantAction
All Implemented Interfaces:
ConstantAction
Direct Known Subclasses:
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
Author:
Jerry Brenner

Field Summary
protected  java.lang.String constraintName
           
protected  int constraintType
           
protected  IndexConstantAction indexAction
           
protected  UUID schemaId
           
protected  java.lang.String schemaName
           
protected  UUID tableId
           
protected  java.lang.String tableName
           
 
Fields inherited from interface org.apache.derby.iapi.sql.execute.ConstantAction
RUNTIMESTATISTICS, STATISTICSTIMING
 
Constructor Summary
(package private) ConstraintConstantAction(java.lang.String constraintName, int constraintType, java.lang.String tableName, UUID tableId, java.lang.String schemaName, IndexConstantAction indexAction)
          Make one of these puppies.
 
Method Summary
 java.lang.String getConstraintName()
          Get the constraint name
 int getConstraintType()
          Get the constraint type.
 IndexConstantAction getIndexAction()
          Get the associated index constant action.
 boolean modifiesTableId(UUID tableId)
          Does this constant action modify the passed in table uuid?
(package private) static boolean validateConstraint(java.lang.String constraintName, java.lang.String constraintText, TableDescriptor td, LanguageConnectionContext lcc, boolean isCheckConstraint)
          Evaluate a check constraint or not null column constraint.
(package private) static void validateFKConstraint(TransactionController tc, DataDictionary dd, ForeignKeyConstraintDescriptor fk, ReferencedKeyConstraintDescriptor refcd, ExecRow indexTemplateRow)
          Make sure that the foreign key constraint is valid with the existing data in the target table.
 
Methods inherited from class org.apache.derby.impl.sql.execute.DDLConstantAction
constructToString, getAndCheckSchemaDescriptor, getSchemaDescriptorForCreate, lockTableForDDL, readExternal, upToDate, writeExternal
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.iapi.sql.execute.ConstantAction
executeConstantAction
 

Field Detail

constraintName

protected java.lang.String constraintName

constraintType

protected int constraintType

tableName

protected java.lang.String tableName

schemaName

protected java.lang.String schemaName

schemaId

protected UUID schemaId

indexAction

protected IndexConstantAction indexAction

tableId

protected UUID tableId
Constructor Detail

ConstraintConstantAction

ConstraintConstantAction(java.lang.String constraintName,
                         int constraintType,
                         java.lang.String tableName,
                         UUID tableId,
                         java.lang.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 Detail

getConstraintType

public int getConstraintType()
Get the constraint type.

Returns:
The constraint type

getConstraintName

public java.lang.String getConstraintName()
Get the constraint name

Returns:
the constraint name

getIndexAction

public IndexConstantAction getIndexAction()
Get the associated index constant action.

Returns:
the constant action for the backing index

validateFKConstraint

static void validateFKConstraint(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(java.lang.String constraintName,
                                  java.lang.String constraintText,
                                  TableDescriptor td,
                                  LanguageConnectionContext lcc,
                                  boolean isCheckConstraint)
                           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
td - referenced table
lcc - the language connection context
isCheckConstraint - the constraint is a check constraint
Returns:
true if null constraint passes, false otherwise
Throws:
StandardException - if check constraint fails

modifiesTableId

public boolean modifiesTableId(UUID tableId)
Does this constant action modify the passed in table uuid? By modify we mean add or drop things tied to this table (e.g. index, trigger, constraint). Things like views or spses that reference this table don't count.

Specified by:
modifiesTableId in interface ConstantAction
Overrides:
modifiesTableId in class DDLConstantAction
Parameters:
tableId - the table id


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