You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by da...@apache.org on 2013/08/27 16:05:04 UTC
svn commit: r1517823 [1/2] - in /db/derby/code/trunk:
java/engine/org/apache/derby/iapi/sql/dictionary/
java/engine/org/apache/derby/impl/sql/catalog/
java/engine/org/apache/derby/impl/sql/compile/
java/engine/org/apache/derby/impl/sql/execute/ java/en...
Author: dag
Date: Tue Aug 27 14:05:03 2013
New Revision: 1517823
URL: http://svn.apache.org/r1517823
Log:
DERBY-532 Support deferrable constraints
Patch derby-532-syntax-binding-dict-all-1. This patch wires in the syntax
for deferred constraints (aka "constraint characteristics"). It also
does
- binding checks for CREATE TABLE constraints and SET constraints
statement (new). Binding is still missing for ALTER TABLE
constraints clauses.
- temporarily throws not yet implemented (0A000.S) for all usage
*except* when characteristics coincide with the current (and future)
Derby defaults, i.e. NOT DEFERRABLE [INITIALLY IMMEDIATE] ENFORCED
- checks inconsistencies in characteristics (illegal combinations), cf.
42X97 "Conflicting constraint characteristics for constraint"
- implements implied DEFERRABLE of (only) INITIALLY DEFERRED is
specified.
- if the property "derby.constraintsTesting" is set, persists
characteristics to dictionary by overloading the existing STATE
character according to specification. This property will go away
once the feature set is implemented, only implemented not to be able
to test dictionary persistence
- throws 42XAK "Constraint characteristics not allowed for NOT NULL."
for NOT NULL characteristics since this constraint type is not
explicitly implemented as a constraint in Derby (yet, at least)
- adds a new test, ConstraintCharacteristicsTest to test the above and
wires it into the lang suite.
(part 2):
- Elaborates ALTER TABLE ALTER TABLE, correcting syntax, adding name
binding and updating dictionary (subject to the property
derby.constraintsTesting) in a new AlterConstraintConstantAction
class.
- Built out tests in ConstraintCharacteristicsTest to systematically
check all possible characteristics combinations in all cases, and
adding tests for ALTER TABLE ALTER TABLE, including dictionary
updates.
Added:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SetConstraintsNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterConstraintConstantAction.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ConstraintCharacteristicsTest.java
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/CheckConstraintDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptorList.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ForeignKeyConstraintDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/KeyConstraintDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TriggerDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCONSTRAINTSRowFactory.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ConstraintDefinitionNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementList.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropConstraintConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericConstantActionFactory.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/SetConstraintsConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/UpdatableVTIConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
db/derby/code/trunk/tools/ide/netbeans/nbproject/project.xml
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/CheckConstraintDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/CheckConstraintDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/CheckConstraintDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/CheckConstraintDescriptor.java Tue Aug 27 14:05:03 2013
@@ -145,7 +145,7 @@ public class CheckConstraintDescriptor e
/*
** If we are disabled, we never fire
*/
- if (!isEnabled)
+ if (!enforced())
{
return false;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptor.java Tue Aug 27 14:05:03 2013
@@ -60,11 +60,11 @@ public abstract class ConstraintDescript
// field that we want users to be able to know about
public static final int SYSCONSTRAINTS_STATE_FIELD = 6;
- TableDescriptor table;
- final String constraintName;
- private final boolean deferrable;
- private final boolean initiallyDeferred;
- boolean isEnabled;
+ TableDescriptor table;
+ final String constraintName;
+ private boolean deferrable;
+ private boolean initiallyDeferred;
+ private boolean enforced;
private final int[] referencedColumns;
final UUID constraintId;
private final SchemaDescriptor schemaDesc;
@@ -81,6 +81,7 @@ public abstract class ConstraintDescript
* @param referencedColumns columns that the constraint references
* @param constraintId UUID of constraint
* @param schemaDesc SchemaDescriptor
+ * @param enforced Is the constraint enforced?
*/
ConstraintDescriptor(
@@ -92,7 +93,7 @@ public abstract class ConstraintDescript
int[] referencedColumns,
UUID constraintId,
SchemaDescriptor schemaDesc,
- boolean isEnabled
+ boolean enforced
)
{
super( dataDictionary );
@@ -100,11 +101,11 @@ public abstract class ConstraintDescript
this.table = table;
this.constraintName = constraintName;
this.deferrable = deferrable;
- this.initiallyDeferred = initiallyDeferred;
+ this.initiallyDeferred = initiallyDeferred;
this.referencedColumns = referencedColumns;
this.constraintId = constraintId;
this.schemaDesc = schemaDesc;
- this.isEnabled = isEnabled;
+ this.enforced = enforced;
}
@@ -161,29 +162,34 @@ public abstract class ConstraintDescript
/**
* 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).
*
- * @return TRUE if the constraint is deferrable, FALSE if not
+ * @return TRUE if the constraint is DEFERRABLE, FALSE if it is
+ * NOT DEFERRABLE.
*/
- public boolean deferrable()
+ public boolean deferrable()
{
return deferrable;
}
+ public void setDeferrable(boolean b) {
+ deferrable = b;
+ }
+
/**
* 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).
*
- * @return TRUE if the constraint is initially deferred,
- * FALSE if not
+ * @return TRUE if the constraint is initially DEFERRED,
+ * FALSE if the constraint is initially IMMEDIATE
*/
public boolean initiallyDeferred()
{
- return initiallyDeferred;
+ return initiallyDeferred;
}
+ public void setInitiallyDeferred(boolean b) {
+ initiallyDeferred = b;
+ }
+
/**
* Returns an array of column ids (i.e. ordinal positions) for
* the columns referenced in this table for a primary key, unique
@@ -238,32 +244,18 @@ public abstract class ConstraintDescript
}
/**
- * Is this constraint active?
+ * Is this constraint enforced?
*
* @return true/false
*/
- public boolean isEnabled()
- {
- return isEnabled;
- }
-
- /**
- * Set the constraint to enabled.
- * Does not update the data dictionary
- */
- public void setEnabled()
+ public boolean enforced()
{
- isEnabled = true;
+ return enforced;
}
- /**
- * Set the constraint to disabled.
- * Does not update the data dictionary
- */
- public void setDisabled()
- {
- isEnabled = false;
- }
+ public void setEnforced(boolean b) {
+ enforced = b;
+ }
/**
* Is this constraint referenced? Return
@@ -277,7 +269,7 @@ public abstract class ConstraintDescript
}
/**
- * Get the number of enabled fks that
+ * Get the number of enforced fks that
* reference this key. Overriden by
* ReferencedKeyConstraints.
*
@@ -456,7 +448,7 @@ public abstract class ConstraintDescript
"constraintName: " + constraintName + "\n" +
"constraintId: " + constraintId + "\n" +
"deferrable: " + deferrable + "\n" +
- "initiallyDeferred: " + initiallyDeferred + "\n" +
+ "initiallyDeferred: " + initiallyDeferred + "\n" +
"referencedColumns: " +
Arrays.toString(referencedColumns) + "\n" +
"schemaDesc: " + schemaDesc + "\n"
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptorList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptorList.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptorList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConstraintDescriptorList.java Tue Aug 27 14:05:03 2013
@@ -193,17 +193,17 @@ public class ConstraintDescriptorList ex
}
/**
- * Return a list of constraints where enabled is
+ * Return a list of constraints where enforced is
* as passed in.
*
- * @param enabled true or false
+ * @param enforced true or false
*
* @return a constraint descriptor list built from this. Always
* a new list even if all the elements in this were of the correct
* type (i.e. not optimized for the case where every element is
* desired).
*/
- public ConstraintDescriptorList getConstraintDescriptorList(boolean enabled)
+ public ConstraintDescriptorList getConstraintDescriptorList(boolean enforced)
{
ConstraintDescriptorList cdl = new ConstraintDescriptorList();
int size = size();
@@ -212,7 +212,7 @@ public class ConstraintDescriptorList ex
{
ConstraintDescriptor cd = elementAt(index);
- if (cd.isEnabled() == enabled)
+ if (cd.enforced() == enforced)
{
cdl.add(cd);
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java Tue Aug 27 14:05:03 2013
@@ -210,6 +210,7 @@ public interface DataDictionary
public static final int CHECK_CONSTRAINT = 4;
public static final int DROP_CONSTRAINT = 5;
public static final int FOREIGNKEY_CONSTRAINT = 6;
+ public static final int MODIFY_CONSTRAINT = 7;
/** Modes returned from startReading() */
public static final int COMPILE_ONLY_MODE = 0;
@@ -834,13 +835,13 @@ public interface DataDictionary
/**
* Load up the constraint descriptor list for this table
- * descriptor and return it. If the descriptor list
- * is already loaded up, it is retuned without further
+ * descriptor (or all) and return it. If the descriptor list
+ * is already loaded up, it is returned without further
* ado.
*
- * @param td The table descriptor.
- *
- * @return The ConstraintDescriptorList for the table
+ * @param td The table descriptor.
+ * @return The ConstraintDescriptorList for the table. If null, return
+ * a list of all the constraint descriptors in all schemas.
*
* @exception StandardException Thrown on failure
*/
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ForeignKeyConstraintDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ForeignKeyConstraintDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ForeignKeyConstraintDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ForeignKeyConstraintDescriptor.java Tue Aug 27 14:05:03 2013
@@ -62,7 +62,7 @@ public class ForeignKeyConstraintDescrip
* @param indexId The UUID for the backing index
* @param schemaDesc The SchemaDescriptor for the constraint
* @param referencedConstraintDescriptor is referenced constraint descriptor
- * @param isEnabled is the constraint enabled?
+ * @param enforced is the constraint enforced?
*/
protected ForeignKeyConstraintDescriptor(
DataDictionary dataDictionary,
@@ -75,14 +75,14 @@ public class ForeignKeyConstraintDescrip
UUID indexId,
SchemaDescriptor schemaDesc,
ReferencedKeyConstraintDescriptor referencedConstraintDescriptor,
- boolean isEnabled,
+ boolean enforced,
int raDeleteRule,
int raUpdateRule
)
{
super(dataDictionary, table, constraintName, deferrable,
initiallyDeferred, fkColumns,
- constraintId, indexId, schemaDesc, isEnabled);
+ constraintId, indexId, schemaDesc, enforced);
this.referencedConstraintDescriptor = referencedConstraintDescriptor;
this.raDeleteRule = raDeleteRule;
@@ -102,7 +102,7 @@ public class ForeignKeyConstraintDescrip
* @param indexId The UUID for the backing index
* @param schemaDesc The SchemaDescriptor for the constraint
* @param referencedConstraintId is referenced constraint id
- * @param isEnabled is the constraint enabled?
+ * @param enforced {@code true} if this constraint is enforced
*/
ForeignKeyConstraintDescriptor(
DataDictionary dataDictionary,
@@ -115,14 +115,14 @@ public class ForeignKeyConstraintDescrip
UUID indexId,
SchemaDescriptor schemaDesc,
UUID referencedConstraintId,
- boolean isEnabled,
+ boolean enforced,
int raDeleteRule,
int raUpdateRule
)
{
super(dataDictionary, table, constraintName, deferrable,
initiallyDeferred, fkColumns,
- constraintId, indexId, schemaDesc, isEnabled);
+ constraintId, indexId, schemaDesc, enforced);
this.referencedConstraintId = referencedConstraintId;
this.raDeleteRule = raDeleteRule;
this.raUpdateRule = raUpdateRule;
@@ -236,7 +236,7 @@ public class ForeignKeyConstraintDescrip
/*
** If we are disabled, we never fire
*/
- if (!isEnabled)
+ if (!enforced())
{
return false;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/KeyConstraintDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/KeyConstraintDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/KeyConstraintDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/KeyConstraintDescriptor.java Tue Aug 27 14:05:03 2013
@@ -62,7 +62,7 @@ public abstract class KeyConstraintDescr
* @param constraintId UUID of constraint
* @param indexId The UUID for the backing index
* @param schemaDesc The SchemaDescriptor for the constraint
- * @param isEnabled is this constraint enabled
+ * @param enforced {@code true} if this constraint is enforced
*/
KeyConstraintDescriptor(
DataDictionary dataDictionary,
@@ -74,12 +74,12 @@ public abstract class KeyConstraintDescr
UUID constraintId,
UUID indexId,
SchemaDescriptor schemaDesc,
- boolean isEnabled
+ boolean enforced
)
{
super(dataDictionary, table, constraintName, deferrable,
initiallyDeferred, referencedColumns,
- constraintId, schemaDesc, isEnabled);
+ constraintId, schemaDesc, enforced);
this.indexId = indexId;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ReferencedKeyConstraintDescriptor.java Tue Aug 27 14:05:03 2013
@@ -50,7 +50,7 @@ public class ReferencedKeyConstraintDesc
int referenceCount;
- // enabled foreign keys
+ // enforced foreign keys
private ConstraintDescriptorList fkEnabledConstraintList;
// all foreign keys
private ConstraintDescriptorList fkConstraintList;
@@ -71,8 +71,8 @@ public class ReferencedKeyConstraintDesc
* @param constraintId UUID of constraint
* @param indexId The UUID for the backing index
* @param schemaDesc The SchemaDescriptor for the constraint
- * @param isEnabled is the constraint enabled?
- * @param referenceCount number of FKs (enabled only)
+ * @param enforced is the constraint enforced?
+ * @param referenceCount number of FKs (enforced only)
*/
protected ReferencedKeyConstraintDescriptor(int constraintType,
DataDictionary dataDictionary,
@@ -84,13 +84,13 @@ public class ReferencedKeyConstraintDesc
UUID constraintId,
UUID indexId,
SchemaDescriptor schemaDesc,
- boolean isEnabled,
+ boolean enforced,
int referenceCount
)
{
super(dataDictionary, table, constraintName, deferrable,
initiallyDeferred, columns,
- constraintId, indexId, schemaDesc, isEnabled);
+ constraintId, indexId, schemaDesc, enforced);
this.referenceCount = referenceCount;
this.constraintType = constraintType;
}
@@ -248,7 +248,7 @@ public class ReferencedKeyConstraintDesc
/**
* Is this constraint referenced? Returns
- * true if there are enabled fks that
+ * true if there are enforced fks that
* reference this constraint.
*
* @return false
@@ -260,7 +260,7 @@ public class ReferencedKeyConstraintDesc
}
/**
- * Get the number of enabled fks that
+ * Get the number of enforced fks that
* reference this key.
*
* @return the number of fks
@@ -308,7 +308,7 @@ public class ReferencedKeyConstraintDesc
/*
** If we are disabled, we never fire
*/
- if (!isEnabled)
+ if (!enforced())
{
return false;
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TriggerDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TriggerDescriptor.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TriggerDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TriggerDescriptor.java Tue Aug 27 14:05:03 2013
@@ -79,7 +79,7 @@ import java.io.IOException;
* <li> public ReferencedColumns getReferencedColumnsDescriptor()
* <li> public int[] getReferencedCols();
* <li> public int[] getReferencedColsInTriggerAction();
- * <li> public boolean isEnabled();
+ * <li> public boolean enforced();
* <li> public void setEnabled();
* <li> public void setDisabled();
* <li> public boolean needsToFire(int stmtType, int[] modifiedCols)
@@ -140,7 +140,7 @@ public class TriggerDescriptor extends U
* @param eventMask TriggerDescriptor.TRIGGER_EVENT_XXXX
* @param isBefore is this a before (as opposed to after) trigger
* @param isRow is this a row trigger or statement trigger
- * @param isEnabled is this trigger enabled or disabled
+ * @param isEnabled is this trigger enabled or disabled
* @param td the table upon which this trigger is defined
* @param whenSPSId the sps id for the when clause (may be null)
* @param actionSPSId the spsid for the trigger action (may be null)
@@ -488,9 +488,9 @@ public class TriggerDescriptor extends U
}
/**
- * Is this trigger enabled
+ * Is this trigger enforced
*
- * @return true if it is enabled
+ * @return true if it is enforced
*/
public boolean isEnabled()
{
@@ -498,7 +498,7 @@ public class TriggerDescriptor extends U
}
/**
- * Mark this trigger as enabled
+ * Mark this trigger as enforced
*
*/
public void setEnabled()
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java Tue Aug 27 14:05:03 2013
@@ -4742,7 +4742,7 @@ public final class DataDictionaryImpl
getConstraintDescriptorViaHeap(
(ScanQualifier[][]) null,
ti,
- (TupleDescriptor) null,
+ (TupleDescriptor) null,
list);
return list;
}
@@ -6228,7 +6228,7 @@ public final class DataDictionaryImpl
/**
* Return a list of foreign keys constraints referencing
- * this constraint. Returns both enabled and disabled
+ * this constraint. Returns both enforced and not enforced
* foreign keys.
*
* @param constraintId The id of the referenced constraint
@@ -6463,12 +6463,12 @@ public final class DataDictionaryImpl
* Update the constraint descriptor in question. Updates
* every row in the base conglomerate.
*
- * @param cd The Constraintescriptor
+ * @param cd The Constraint descriptor
* @param formerUUID The UUID for this column in SYSCONSTRAINTS,
- * may differ from what is in cd if this
+ * may differ from what is in {@code cd} if this
* is the column that is being set.
- * @param colsToSet Array of ints of columns to be modified,
- * 1 based. May be null (all cols).
+ * @param colsToSet Array of integers of columns to be modified,
+ * 1 based. May be null (all columns).
* @param tc The TransactionController to use
*
* @exception StandardException Thrown on failure
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCONSTRAINTSRowFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCONSTRAINTSRowFactory.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCONSTRAINTSRowFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCONSTRAINTSRowFactory.java Tue Aug 27 14:05:03 2013
@@ -46,6 +46,7 @@ import org.apache.derby.iapi.types.DataV
import org.apache.derby.iapi.types.SQLChar;
import org.apache.derby.iapi.types.SQLInteger;
import org.apache.derby.iapi.types.SQLVarchar;
+import org.apache.derby.impl.sql.compile.ConstraintDefinitionNode;
/**
* Factory for creating a SYSCONTRAINTS row.
@@ -62,7 +63,7 @@ public class SYSCONSTRAINTSRowFactory ex
protected static final int SYSCONSTRAINTS_CONSTRAINTNAME = 3;
protected static final int SYSCONSTRAINTS_TYPE = 4;
protected static final int SYSCONSTRAINTS_SCHEMAID = 5;
- protected static final int SYSCONSTRAINTS_STATE = ConstraintDescriptor.SYSCONSTRAINTS_STATE_FIELD;
+ public static final int SYSCONSTRAINTS_STATE = ConstraintDescriptor.SYSCONSTRAINTS_STATE_FIELD;
protected static final int SYSCONSTRAINTS_REFERENCECOUNT = 7;
protected static final int SYSCONSTRAINTS_INDEX1_ID = 0;
@@ -129,7 +130,14 @@ public class SYSCONSTRAINTSRowFactory ex
String tableID = null;
String constraintName = null;
String schemaID = null;
- boolean isEnabled = true;
+
+ boolean deferrable =
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT;
+ boolean initiallyDeferred =
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT;
+ boolean enforced =
+ ConstraintDefinitionNode.ENFORCED_DEFAULT;
+
int referenceCount = 0;
if (td != null)
@@ -174,8 +182,13 @@ public class SYSCONSTRAINTSRowFactory ex
}
schemaID = constraint.getSchemaDescriptor().getUUID().toString();
- isEnabled = constraint.isEnabled();
- referenceCount = constraint.getReferenceCount();
+
+ // constraint characteristics
+ deferrable = constraint.deferrable();
+ initiallyDeferred = constraint.initiallyDeferred();
+ enforced = constraint.enforced();
+
+ referenceCount = constraint.getReferenceCount();
}
/* Insert info into sysconstraints */
@@ -203,7 +216,8 @@ public class SYSCONSTRAINTSRowFactory ex
row.setColumn(SYSCONSTRAINTS_SCHEMAID, new SQLChar(schemaID));
/* 6th column is STATE (char(1)) */
- row.setColumn(SYSCONSTRAINTS_STATE, new SQLChar(isEnabled ? "E" : "D"));
+ row.setColumn(SYSCONSTRAINTS_STATE,
+ new SQLChar(encodeCharacteristics(deferrable, initiallyDeferred, enforced)));
/* 7th column is REFERENCED */
row.setColumn(SYSCONSTRAINTS_REFERENCECOUNT, new SQLInteger(referenceCount));
@@ -211,6 +225,56 @@ public class SYSCONSTRAINTSRowFactory ex
return row;
}
+ /*
+ * Encode the characteristics of the constraints into a single character.
+ *
+ * {deferrable, initiallyDeferred, enforced} -> 'e'
+ * {deferrable, initiallyDeferred, not enforced} -> 'd'
+ * {deferrable, immediate, enforced} -> 'i'
+ * {deferrable, immediate, not enforced} -> 'j'
+ * {not deferrable, immediate, enforced} -> 'E'
+ * {not deferrable, immediate, not enforced -> 'D'
+ *
+ * Other combinations are prohibited and not used. Note that the
+ * value 'E' is only value used prior to version 10.11, and as
+ * such upward compatibily since by default, constraints are {not
+ * deferrable, immediate, enforced}.
+ */
+ private String encodeCharacteristics(
+ boolean deferrable, boolean initiallyDeferred, boolean enforced) {
+ char c;
+
+ if (deferrable) {
+ if (initiallyDeferred) {
+ if (enforced) {
+ c = 'e'; // deferrable initially deferred enforced
+ } else {
+ c = 'd'; // deferrable initially deferred not enforced
+ }
+ } else {
+ if (enforced) {
+ c = 'i'; // deferrable initially immediate enforced
+ } else {
+ c = 'j'; // deferrable initially immediate not enforced
+ }
+ }
+ } else {
+ if (initiallyDeferred) {
+ if (SanityManager.DEBUG) {
+ SanityManager.NOTREACHED();
+ }
+ c = 'E';
+ } else {
+ if (enforced) {
+ c = 'E'; // not deferrable initially immediate enforced
+ } else {
+ c = 'D'; // not deferrable initially immediate not enforced
+ }
+ }
+ }
+
+ return String.valueOf(c);
+ }
///////////////////////////////////////////////////////////////////////////
//
@@ -257,7 +321,12 @@ public class SYSCONSTRAINTSRowFactory ex
String constraintName;
String constraintSType;
String constraintStateStr;
- boolean constraintEnabled;
+ boolean deferrable =
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT;
+ boolean initiallyDeferred =
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT;
+ boolean enforced =
+ ConstraintDefinitionNode.ENFORCED_DEFAULT;
int referenceCount;
String constraintUUIDString;
String schemaUUIDString;
@@ -420,16 +489,41 @@ public class SYSCONSTRAINTSRowFactory ex
"Sixth column (state) type incorrect");
}
+ // Cf. the encoding description in javadoc for
+ // #encodeCharacteristics.
switch (constraintStateStr.charAt(0))
{
case 'E':
- constraintEnabled = true;
+ deferrable = false;
+ initiallyDeferred = false;
+ enforced = true;
break;
case 'D':
- constraintEnabled = false;
- break;
+ deferrable = false;
+ initiallyDeferred = false;
+ enforced = false;
+ break;
+ case 'e':
+ deferrable = true;
+ initiallyDeferred = true;
+ enforced = true;
+ break;
+ case 'd':
+ deferrable = true;
+ initiallyDeferred = true;
+ enforced = false;
+ break;
+ case 'i':
+ deferrable = true;
+ initiallyDeferred = false;
+ enforced = true;
+ break;
+ case 'j':
+ deferrable = true;
+ initiallyDeferred = false;
+ enforced = false;
+ break;
default:
- constraintEnabled = true;
if (SanityManager.DEBUG)
{
SanityManager.THROWASSERT("Invalidate state value '"
@@ -449,14 +543,14 @@ public class SYSCONSTRAINTSRowFactory ex
constraintDesc = ddg.newPrimaryKeyConstraintDescriptor(
td,
constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ deferrable,
+ initiallyDeferred,
keyColumns,//genReferencedColumns(dd, td), //int referencedColumns[],
constraintUUID,
((SubKeyConstraintDescriptor)
parentTupleDescriptor).getIndexId(),
schema,
- constraintEnabled,
+ enforced,
referenceCount);
break;
@@ -464,14 +558,14 @@ public class SYSCONSTRAINTSRowFactory ex
constraintDesc = ddg.newUniqueConstraintDescriptor(
td,
constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ deferrable,
+ initiallyDeferred,
keyColumns,//genReferencedColumns(dd, td), //int referencedColumns[],
constraintUUID,
((SubKeyConstraintDescriptor)
parentTupleDescriptor).getIndexId(),
schema,
- constraintEnabled,
+ enforced,
referenceCount);
break;
@@ -485,15 +579,15 @@ public class SYSCONSTRAINTSRowFactory ex
constraintDesc = ddg.newForeignKeyConstraintDescriptor(
td,
constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ deferrable,
+ initiallyDeferred,
keyColumns,//genReferencedColumns(dd, td), //int referencedColumns[],
constraintUUID,
((SubKeyConstraintDescriptor)
parentTupleDescriptor).getIndexId(),
schema,
referencedConstraintId,
- constraintEnabled,
+ enforced,
((SubKeyConstraintDescriptor)
parentTupleDescriptor).getRaDeleteRule(),
((SubKeyConstraintDescriptor)
@@ -511,15 +605,15 @@ public class SYSCONSTRAINTSRowFactory ex
constraintDesc = ddg.newCheckConstraintDescriptor(
td,
constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ deferrable,
+ initiallyDeferred,
constraintUUID,
((SubCheckConstraintDescriptor)
parentTupleDescriptor).getConstraintText(),
((SubCheckConstraintDescriptor)
parentTupleDescriptor).getReferencedColumnsDescriptor(),
schema,
- constraintEnabled);
+ enforced);
break;
}
return constraintDesc;
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ConstraintDefinitionNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ConstraintDefinitionNode.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ConstraintDefinitionNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ConstraintDefinitionNode.java Tue Aug 27 14:05:03 2013
@@ -38,7 +38,7 @@ import org.apache.derby.iapi.sql.diction
*
*/
-class ConstraintDefinitionNode extends TableElementNode
+public class ConstraintDefinitionNode extends TableElementNode
{
private TableName constraintName;
@@ -56,6 +56,15 @@ class ConstraintDefinitionNode extends T
private int behavior;
private int verifyType;
+ public final static boolean DEFERRABLE_DEFAULT = false;
+ public final static boolean INITIALLY_DEFERRED_DEFAULT = false;
+ public final static boolean ENFORCED_DEFAULT = true;
+
+ /**
+ * boolean[3]: {deferrable?, initiallyDeferred?, enforced?}
+ */
+ private boolean[] characteristics;
+
ConstraintDefinitionNode(
TableName constraintName,
int constraintType,
@@ -87,6 +96,23 @@ class ConstraintDefinitionNode extends T
this.verifyType = verifyType;
}
+
+ void setCharacteristics(boolean[] cc) {
+ characteristics = cc.clone();
+ }
+
+ boolean[] getCharacteristics() {
+ if (characteristics == null) {
+ characteristics = new boolean[]{
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT,
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT,
+ ConstraintDefinitionNode.ENFORCED_DEFAULT
+ };
+ }
+
+ return characteristics.clone();
+ }
+
/**
* Convert this object to a String. See comments in QueryTreeNode.java
* for how this should be done for tree printing.
@@ -167,7 +193,7 @@ class ConstraintDefinitionNode extends T
}
/**
- To support dropping exisiting constraints that may have mismatched schema names
+ To support dropping existing constraints that may have mismatched schema names
we need to support ALTER TABLE S1.T DROP CONSTRAINT S2.C.
If a constraint name was specified this returns it, otherwise it returns null.
*/
@@ -285,9 +311,11 @@ class ConstraintDefinitionNode extends T
}
/**
- * Is this a foreign key constraint.
+ * Does this constraint require a backing index for its implementation?
*
- * @return boolean Whether or not this is a unique key constraint
+ * @return boolean {@code true} if this constraint requires a backing
+ * index, i.e. if is a foreign key, primary key or
+ * unique key constraint
*/
boolean requiresBackingIndex()
{
@@ -303,9 +331,10 @@ class ConstraintDefinitionNode extends T
}
/**
- * Is this a foreign key constraint.
+ * Is this a primary key or unique constraint?
*
- * @return boolean Whether or not this is a unique key constraint
+ * @return boolean {@code true} if this is a primary key or
+ * unique key constraint
*/
boolean requiresUniqueIndex()
{
@@ -433,7 +462,8 @@ class ConstraintDefinitionNode extends T
}
/**
- * Return the behavior of this constriant (DropStatementNode.xxx)
+ * Return the behavior of this constraint.
+ * See {@link org.apache.derby.iapi.sql.StatementType#DROP_CASCADE} etc.
*
* @return the behavior
*/
Added: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SetConstraintsNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SetConstraintsNode.java?rev=1517823&view=auto
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SetConstraintsNode.java (added)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SetConstraintsNode.java Tue Aug 27 14:05:03 2013
@@ -0,0 +1,130 @@
+/*
+
+ Derby - Class org.apache.derby.impl.sql.compile.SetConstraintsNode
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ */
+
+package org.apache.derby.impl.sql.compile;
+
+import java.util.List;
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.services.context.ContextManager;
+import org.apache.derby.shared.common.sanity.SanityManager;
+import org.apache.derby.iapi.sql.compile.CompilerContext;
+import org.apache.derby.iapi.sql.dictionary.ConglomerateDescriptor;
+import org.apache.derby.iapi.sql.dictionary.ConstraintDescriptorList;
+import org.apache.derby.iapi.sql.dictionary.DataDictionary;
+import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
+import org.apache.derby.iapi.sql.dictionary.TableDescriptor;
+import org.apache.derby.iapi.sql.execute.ConstantAction;
+
+/**
+ * A SetConstraintsNode is the root of a QueryTree that represents a
+ * SET CONSTRAINTS statement.
+ */
+
+class SetConstraintsNode extends MiscellaneousStatementNode
+{
+ /**
+ * List of strings representing the constraints we want to
+ * set. If empty, this means ALL.
+ */
+ final private List<TableName> constraints;
+
+ /**
+ * Encodes IMMEDIATE (false), DEFERRED (true)
+ */
+ final private boolean deferred;
+
+ /**
+ *
+ * @param constraints List of strings representing the constraints
+ * we want to set (empty means ALL).
+ * @param deferred Encodes IMMEDIATE ({@code false}) or DEFERRED
+ * ({@code true})
+ * @param cm The context manager
+ * @throws StandardException
+ */
+ SetConstraintsNode(
+ List<TableName> constraints,
+ boolean deferred,
+ ContextManager cm) {
+ super(cm);
+ this.constraints = constraints;
+ this.deferred = deferred;
+ }
+
+ /**
+ * Convert this object to a String. See comments in QueryTreeNode.java
+ * for how this should be done for tree printing.
+ *
+ * @return This object as a String
+ */
+ @Override
+ public String toString()
+ {
+ if (SanityManager.DEBUG) {
+ return super.toString() + formatList(constraints) + ":" +
+ (deferred ? " DEFERRED" : " IMMEDIATE") + "\n";
+ } else {
+ return "";
+ }
+ }
+
+ String formatList(List<TableName> constraints) {
+ StringBuilder sb = new StringBuilder();
+
+ for (TableName tn : constraints) {
+ sb.append(tn);
+ sb.append(", ");
+ }
+
+ return sb.substring(0, Math.max(0, sb.length() - 2));
+ }
+
+ public String statementToString()
+ {
+ return "SET CONSTRAINTS";
+ }
+
+ /**
+ * Create the Constant information that will drive the guts of
+ * Execution.
+ *
+ * @exception StandardException Thrown on failure
+ */
+ @Override
+ public ConstantAction makeConstantAction() throws StandardException
+ {
+ return getGenericConstantActionFactory().
+ getSetConstraintsConstantAction(constraints, deferred);
+ }
+
+ @Override
+ public void bindStatement() throws StandardException
+ {
+ final DataDictionary dd = getDataDictionary();
+
+ if (constraints != null) {
+ for (TableName c : constraints) {
+ c.bind(dd);
+ }
+ }
+ }
+
+}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementList.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementList.java Tue Aug 27 14:05:03 2013
@@ -276,7 +276,8 @@ class TableElementList extends QueryTree
checkForDuplicateConstraintNames(ddlStmt, constraintNames, cdn.getConstraintMoniker());
/* Make sure that the constraint we are trying to drop exists */
- if (cdn.getConstraintType() == DataDictionary.DROP_CONSTRAINT)
+ if (cdn.getConstraintType() == DataDictionary.DROP_CONSTRAINT ||
+ cdn.getConstraintType() == DataDictionary.MODIFY_CONSTRAINT)
{
/*
** If no schema descriptor, then must be an invalid
@@ -298,7 +299,7 @@ class TableElementList extends QueryTree
false);
if (cd == null)
{
- throw StandardException.newException(SQLState.LANG_DROP_NON_EXISTENT_CONSTRAINT,
+ throw StandardException.newException(SQLState.LANG_DROP_OR_ALTER_NON_EXISTING_CONSTRAINT,
(sd.getSchemaName() + "."+ dropConstraintName),
td.getQualifiedName());
}
@@ -501,7 +502,7 @@ class TableElementList extends QueryTree
coldef.getAutoinc_create_or_modify_Start_Increment() : -1));
/* Remember how many constraints that we've seen */
- if (coldef.hasConstraint())
+ if (coldef.hasConstraint())
{
numConstraints++;
}
@@ -999,6 +1000,7 @@ class TableElementList extends QueryTree
}
int constraintType = constraintDN.getConstraintType();
+ boolean[] cChars = constraintDN.getCharacteristics();
String constraintText = constraintDN.getConstraintText();
/*
@@ -1076,6 +1078,19 @@ class TableElementList extends QueryTree
constraintDN.getDropBehavior(),
constraintDN.getVerifyType());
}
+ else if (constraintType == DataDictionary.MODIFY_CONSTRAINT) {
+ conActions[conActionIndex] =
+ getGenericConstantActionFactory().
+ getAlterConstraintConstantAction(
+ constraintName,
+ constraintDN.getDropSchemaName(),
+ cChars,
+ tableName,
+ td.getUUID(),
+ tableSd.getSchemaName(),
+ indexAction);
+
+ }
else
{
ProviderList apl = constraintDN.getAuxiliaryProviderList();
@@ -1107,6 +1122,7 @@ class TableElementList extends QueryTree
getCreateConstraintConstantAction(
constraintName,
constraintType,
+ cChars,
forCreateTable,
tableName,
((td != null) ? td.getUUID() : (UUID) null),
@@ -1114,7 +1130,6 @@ class TableElementList extends QueryTree
columnNames,
indexAction,
constraintText,
- true, // enabled
refInfo,
providerInfos);
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java Tue Aug 27 14:05:03 2013
@@ -47,6 +47,7 @@ class TableElementNode extends QueryTree
public static final int AT_DROP_CONSTRAINT = 5;
public static final int AT_MODIFY_COLUMN = 6;
public static final int AT_DROP_COLUMN = 7;
+ public static final int AT_MODIFY_CONSTRAINT = 8;
/////////////////////////////////////////////////////////////////////////
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Tue Aug 27 14:05:03 2013
@@ -2329,6 +2329,7 @@ TOKEN [IGNORE_CASE] :
| <DEFINER: "definer">
| <DETERMINISTIC: "deterministic">
| <DYNAMIC: "dynamic">
+| <ENFORCED: "enforced">
| <FORTRAN: "fortran">
| <GENERATED: "generated">
| <IDENTITY_VAL_LOCAL: "identity_val_local">
@@ -3050,29 +3051,83 @@ spsSetStatement() throws StandardExcepti
StatementNode statementNode;
}
{
- LOOKAHEAD ( { getToken(1).kind == SET && getToken(2).kind != CURRENT } )
+ LOOKAHEAD ( { getToken(1).kind == SET && getToken(2).kind != CURRENT } )
<SET>
- (
- statementNode = setIsolationStatement() |
- statementNode = setSchemaStatement() |
- statementNode = setMessageLocaleStatement() |
- statementNode = setRoleStatement()
- )
+ (
+ statementNode = setIsolationStatement() |
+ statementNode = setSchemaStatement() |
+ statementNode = setMessageLocaleStatement() |
+ statementNode = setRoleStatement() |
+ statementNode = setConstraintsStatement()
+ )
{
return statementNode;
}
|
- LOOKAHEAD ( { getToken(1).kind == SET && getToken(2).kind == CURRENT } )
+ LOOKAHEAD ( { getToken(1).kind == SET && getToken(2).kind == CURRENT } )
<SET>
- (
- statementNode = setSchemaStatement() |
- statementNode = setIsolationStatement()
-
- )
+ (
+ statementNode = setSchemaStatement() |
+ statementNode = setIsolationStatement()
+ )
{
return statementNode;
}
}
+
+
+/**
+ * <A NAME="constraintsReference">constraintsReference</A>
+ */
+void
+constraintsReference(List<TableName> constraints) throws StandardException :
+{
+ TableName constraint;
+}
+{
+ constraint = qualifiedName(Limits.MAX_IDENTIFIER_LENGTH)
+ {
+ constraints.add(constraint);
+ }
+}
+
+
+/**
+ * <A NAME="setConstraintsStatement">setConstraintsStatement</A>
+ */
+StatementNode
+setConstraintsStatement() throws StandardException :
+{
+ List<TableName> constraints = new ArrayList<TableName>();
+ boolean initiallyDeferred;
+}
+{
+ <CONSTRAINTS>
+ (
+ constraintsReference(constraints)
+ ( <COMMA> constraintsReference(constraints) )*
+ |
+ <ALL>
+ {
+ constraints = null;
+ }
+ )
+ (
+ <DEFERRED>
+ {
+ initiallyDeferred = true;
+ }
+ |
+ <IMMEDIATE>
+ {
+ initiallyDeferred = false;
+ }
+ )
+ {
+ return new SetConstraintsNode(constraints, initiallyDeferred, cm);
+ }
+}
+
/*
* <A NAME="preparableSQLDataStatement">preparableSQLDataStatement</A>
@@ -12532,22 +12587,26 @@ ConstraintDefinitionNode
tableConstraint(TableName constraintName) throws StandardException :
{
ConstraintDefinitionNode tcdn;
+ boolean[] cc = null;
}
{
- tcdn = uniqueConstraintDefinition(constraintName)
- {
- return tcdn;
- }
-|
- tcdn = referentialConstraintDefinition(constraintName)
- {
- return tcdn;
- }
-|
- tcdn = checkConstraintDefinition(constraintName, null)
- {
- return tcdn;
- }
+ (
+ tcdn = uniqueConstraintDefinition(constraintName)
+ |
+ tcdn = referentialConstraintDefinition(constraintName)
+ |
+ tcdn = checkConstraintDefinition(constraintName, null)
+ )
+
+ [ cc = constraintCharacteristics() ]
+
+ {
+ if (cc != null) {
+ tcdn.setCharacteristics(cc);
+ }
+
+ return tcdn;
+ }
}
ConstraintDefinitionNode
@@ -12710,6 +12769,135 @@ deleteReferentialAction() :
)
}
+
+/*
+ * <A NAME="constraintCharacteristics">constraintCharacteristics</A>
+ */
+boolean[]
+constraintCharacteristics() throws StandardException :
+{
+ boolean deferrable =
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT;
+ boolean initiallyDeferred =
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT;
+ boolean enforced =
+ ConstraintDefinitionNode.ENFORCED_DEFAULT;
+ boolean explicitlySpecified[] =
+ new boolean[]{false, false}; // deferrable, initiallyDeferred
+}
+{
+ (
+ ( initiallyDeferred = initiallyDeferred()
+ {
+ explicitlySpecified[1] = true;
+ } )
+
+ [ LOOKAHEAD ( { getToken(1).kind == DEFERRABLE || getToken(2).kind == DEFERRABLE } )
+ deferrable = deferrable()
+ {
+ explicitlySpecified[0] = true;
+ } ]
+
+ [ LOOKAHEAD ( { getToken(1).kind == ENFORCED || getToken(2).kind == ENFORCED } )
+ enforced = constraintEnforcement() ]
+ |
+ LOOKAHEAD ( { getToken(1).kind == DEFERRABLE || getToken(2).kind == DEFERRABLE } )
+ ( deferrable = deferrable()
+ {
+ explicitlySpecified[0] = true;
+ } )
+
+ [ initiallyDeferred = initiallyDeferred()
+ {
+ explicitlySpecified[1] = true;
+ } ]
+
+ [ LOOKAHEAD ( { getToken(1).kind == ENFORCED || getToken(2).kind == ENFORCED } )
+ enforced = constraintEnforcement() ]
+ |
+ LOOKAHEAD ( { getToken(1).kind == ENFORCED || getToken(2).kind == ENFORCED } )
+ enforced = constraintEnforcement()
+ )
+ {
+ if (!explicitlySpecified[0] &&
+ explicitlySpecified[1] && initiallyDeferred) {
+ // "INITIALLY DEFERRED" implies "DEFERRABLE"
+ deferrable = true;
+ }
+
+ if (explicitlySpecified[0] && (!deferrable) &&
+ explicitlySpecified[1] && initiallyDeferred) {
+ // "NOT DEFERRABLE INITIALLY DEFERRED" is inconsistent
+ throw StandardException.newException(
+ SQLState.LANG_INCONSISTENT_CONSTRAINT_CHARACTERISTICS);
+ }
+
+ return new boolean[]{deferrable, initiallyDeferred, enforced};
+ }
+}
+
+/*
+ * <A NAME="initiallyDeferred">initiallyDeferred</A>
+ */
+boolean
+initiallyDeferred() :
+{
+}
+{
+ <INITIALLY>
+ (
+ <IMMEDIATE>
+ {
+ return false;
+ }
+ | <DEFERRED>
+ {
+ return true;
+ }
+ )
+}
+
+/*
+ * <A NAME="deferrable">deferrable</A>
+ */
+boolean
+deferrable() :
+{
+ boolean deferrable = true;
+}
+{
+ [ <NOT>
+ {
+ deferrable = false;
+ }
+ ]
+ <DEFERRABLE>
+ {
+ return deferrable;
+ }
+}
+
+/*
+ * <A NAME="constraintEnforcement">constraintEnforcement</A>
+ */
+boolean
+constraintEnforcement() :
+{
+ boolean enforced = true;
+}
+{
+ [ <NOT>
+ {
+ enforced = false;
+ }
+ ]
+ <ENFORCED>
+ {
+ return enforced;
+ }
+}
+
+
/*
* <A NAME="columnConstraintDefinition">columnConstraintDefinition</A>
*/
@@ -12719,13 +12907,24 @@ columnConstraintDefinition(DataTypeDescr
String columnName) throws StandardException :
{
int constraintType;
- TableElementNode tcdn;
+ ConstraintDefinitionNode tcdn;
TableName constraintName = null;
+ boolean[] cc = null; // constraint characteristics
}
{
[ constraintName = constraintNameDefinition() ]
- tcdn = columnConstraint(constraintName, dataTypeDescriptor, columnName)
+ tcdn = columnConstraint(constraintName, dataTypeDescriptor, columnName)
+ [ cc = constraintCharacteristics() ]
{
+ if (cc != null) {
+ if (tcdn == null) {
+ throw StandardException.newException(
+ SQLState.LANG_NOT_NULL_CHARACTERISTICS);
+ }
+
+ tcdn.setCharacteristics(cc);
+ }
+
/* NOT NULL constraints are handled by marking the dataTypeDescriptor
* as being non-nullable.
*/
@@ -13126,6 +13325,8 @@ alterTableAction(TableElementList tableE
Token tok = null;
String columnName;
long[] autoIncrementInfo = new long[4];
+ boolean enforced;
+ TableName constraintName;
}
{
<ADD>
@@ -13147,6 +13348,7 @@ alterTableAction(TableElementList tableE
return lockGranularity;
}
|
+ LOOKAHEAD ( { getToken(1).kind == ALTER && getToken(2).kind != CONSTRAINT } )
<ALTER> [ <COLUMN> ] columnName = identifier(Limits.MAX_IDENTIFIER_LENGTH, true)
tableElement = columnAlterClause(columnName)
{
@@ -13155,6 +13357,32 @@ alterTableAction(TableElementList tableE
return lockGranularity;
}
|
+ <ALTER> constraintName = constraintNameDefinition()
+ enforced = constraintEnforcement()
+ {
+ ConstraintDefinitionNode cdn = new ConstraintDefinitionNode(
+ constraintName,
+ DataDictionary.MODIFY_CONSTRAINT,
+ null,
+ null,
+ null,
+ null,
+ StatementType.DROP_DEFAULT,
+ DataDictionary.MODIFY_CONSTRAINT,
+ getContextManager());
+
+ boolean[] cc = new boolean[]{
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT,
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT,
+ enforced};
+
+ cdn.setCharacteristics(cc);
+ changeType[0] = DDLStatementNode.MODIFY_TYPE;
+ tableElementList.addTableElement(cdn);
+
+ return lockGranularity;
+ }
+|
lockGranularity = DB2lockGranularityClause()
{
changeType[0] = DDLStatementNode.LOCKING_TYPE;
@@ -14452,6 +14680,7 @@ nonReservedKeyword() :
| tok = <DERBY>
| tok = <DERBY_JDBC_RESULT_SET>
| tok = <DOCUMENT>
+ | tok = <ENFORCED>
| tok = <EACH>
| tok = <EMPTY>
| tok = <EXCLUSIVE>
Added: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterConstraintConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterConstraintConstantAction.java?rev=1517823&view=auto
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterConstraintConstantAction.java (added)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterConstraintConstantAction.java Tue Aug 27 14:05:03 2013
@@ -0,0 +1,175 @@
+/*
+
+ Derby - Class org.apache.derby.impl.sql.execute.AlterConstraintConstantAction
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ */
+
+package org.apache.derby.impl.sql.execute;
+
+import org.apache.derby.catalog.UUID;
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.reference.SQLState;
+import org.apache.derby.iapi.services.property.PropertyUtil;
+import org.apache.derby.iapi.sql.Activation;
+import org.apache.derby.iapi.sql.StatementType;
+import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
+import org.apache.derby.iapi.sql.depend.DependencyManager;
+import org.apache.derby.iapi.sql.dictionary.ConstraintDescriptor;
+import org.apache.derby.iapi.sql.dictionary.ConstraintDescriptorList;
+import org.apache.derby.iapi.sql.dictionary.DataDictionary;
+import org.apache.derby.iapi.sql.dictionary.ForeignKeyConstraintDescriptor;
+import org.apache.derby.iapi.sql.dictionary.ReferencedKeyConstraintDescriptor;
+import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
+import org.apache.derby.iapi.sql.dictionary.TableDescriptor;
+import org.apache.derby.iapi.sql.execute.ConstantAction;
+import org.apache.derby.iapi.store.access.TransactionController;
+import org.apache.derby.impl.sql.catalog.SYSCONSTRAINTSRowFactory;
+import org.apache.derby.impl.sql.compile.ConstraintDefinitionNode;
+
+/**
+ * This class describes actions that are ALWAYS performed for a
+ * alter constraint at Execution time.
+ */
+
+public class AlterConstraintConstantAction extends ConstraintConstantAction
+{
+
+ private String constraintSchemaName;
+ boolean[] characteristics;
+
+ /**
+ * Constructor.
+ *
+ * @param constraintName The constraint name.
+ * @param constraintSchemaName The schema that constraint lives in.
+ * @param characteristics The (presumably) altered enforcement
+ * characteristics.
+ * @param tableName Table name.
+ * @param tableId The UUID of table.
+ * @param tableSchemaName The schema that table lives in.
+ * @param indexAction IndexConstantAction for constraint
+ */
+ AlterConstraintConstantAction(
+ String constraintName,
+ String constraintSchemaName,
+ boolean[] characteristics,
+ String tableName,
+ UUID tableId,
+ String tableSchemaName,
+ IndexConstantAction indexAction)
+ {
+ super(constraintName, DataDictionary.DROP_CONSTRAINT, tableName,
+ tableId, tableSchemaName, indexAction);
+
+ this.constraintSchemaName = constraintSchemaName;
+ this.characteristics = characteristics.clone();
+ }
+
+ @Override
+ public String toString()
+ {
+ // Do not put this under SanityManager.DEBUG - it is needed for
+ // error reporting.
+ String ss = constraintSchemaName == null ? schemaName : constraintSchemaName;
+ return "ALTER CONSTRAINT " + ss + "." + constraintName;
+ }
+
+ /**
+ * This is the guts of the Execution-time logic for ALTER CONSTRAINT.
+ *
+ * @see ConstantAction#executeConstantAction
+ *
+ * @exception StandardException Thrown on failure
+ */
+ public void executeConstantAction(
+ Activation activation ) throws StandardException {
+
+ final LanguageConnectionContext lcc =
+ activation.getLanguageConnectionContext();
+ final DataDictionary dd = lcc.getDataDictionary();
+ final DependencyManager dm = dd.getDependencyManager();
+ final TransactionController tc = lcc.getTransactionExecute();
+
+
+ /*
+ ** Inform the data dictionary that we are about to write to it.
+ ** There are several calls to data dictionary "get" methods here
+ ** that might be done in "read" mode in the data dictionary, but
+ ** it seemed safer to do this whole operation in "write" mode.
+ **
+ ** We tell the data dictionary we're done writing at the end of
+ ** the transaction.
+ */
+ dd.startWriting(lcc);
+
+ final TableDescriptor td = dd.getTableDescriptor(tableId);
+
+ if (td == null)
+ {
+ throw StandardException.newException(SQLState.LANG_TABLE_NOT_FOUND_DURING_EXECUTION, tableName);
+ }
+
+ /* Table gets locked in AlterTableConstantAction */
+
+ /*
+ ** If the schema descriptor is null, then
+ ** we must have just read ourselves in.
+ ** So we will get the corresponding schema
+ ** descriptor from the data dictionary.
+ */
+
+ SchemaDescriptor tdSd = td.getSchemaDescriptor();
+ SchemaDescriptor constraintSd = constraintSchemaName == null
+ ? tdSd
+ : dd.getSchemaDescriptor(constraintSchemaName, tc, true);
+
+
+ /* Get the constraint descriptor for the index, along
+ * with an exclusive row lock on the row in sys.sysconstraints
+ * in order to ensure that no one else compiles against the
+ * index.
+ */
+ final ConstraintDescriptor conDesc =
+ dd.getConstraintDescriptorByName(td, constraintSd, constraintName, true);
+
+
+ if (conDesc == null) {
+ throw StandardException.newException(
+ SQLState.LANG_DROP_OR_ALTER_NON_EXISTING_CONSTRAINT,
+ constraintSd.getSchemaName() + "."+ constraintName,
+ td.getQualifiedName());
+ }
+
+ if (characteristics[2] != ConstraintDefinitionNode.ENFORCED_DEFAULT) {
+ // Remove when feature DERBY-532 is completed
+ if (!PropertyUtil.getSystemProperty("derby.constraintsTesting",
+ tableName).equals("true")) {
+ throw StandardException.newException(SQLState.NOT_IMPLEMENTED,
+ "non-default enforcement");
+ }
+ }
+
+ // The first two characteristics are unused during ALTER CONSTRAINT; only
+ // enforcement can change.
+ conDesc.setEnforced(characteristics[2]);
+
+ int[] colsToSet = new int[1];
+ colsToSet[0] = SYSCONSTRAINTSRowFactory.SYSCONSTRAINTS_STATE;
+ dd.updateConstraintDescriptor(conDesc, conDesc.getUUID(), colsToSet, tc);
+ }
+}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java Tue Aug 27 14:05:03 2013
@@ -538,7 +538,7 @@ class AlterTableConstantAction extends D
// adjust dependencies on user defined types
adjustUDTDependencies( lcc, dd, td, columnInfo, false );
- /* Create/Drop any constraints */
+ /* Create/Drop/alter any constraints */
if (constraintActions != null)
{
for (int conIndex = 0;
@@ -607,7 +607,8 @@ class AlterTableConstantAction extends D
{
if (SanityManager.DEBUG)
{
- if (!(cca instanceof DropConstraintConstantAction))
+ if (!(cca instanceof DropConstraintConstantAction ||
+ cca instanceof AlterConstraintConstantAction))
{
SanityManager.THROWASSERT(
"constraintActions[" + conIndex +
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateConstraintConstantAction.java Tue Aug 27 14:05:03 2013
@@ -55,6 +55,8 @@ import org.apache.derby.iapi.sql.Activat
import org.apache.derby.iapi.store.access.TransactionController;
import org.apache.derby.iapi.services.loader.ClassFactory;
+import org.apache.derby.iapi.services.property.PropertyUtil;
+import org.apache.derby.impl.sql.compile.ConstraintDefinitionNode;
/**
* This class describes actions that are ALWAYS performed for a
@@ -74,13 +76,16 @@ public class CreateConstraintConstantAct
private ClassFactory cf;
/*
- ** Is this constraint to be created as enabled or not.
+ ** Is this constraint to be created as enforced or not.
** The only way to create a disabled constraint is by
** publishing a disabled constraint.
*/
private boolean enabled;
- private ProviderInfo[] providerInfo;
+ // boolean[3]: {deferrable?, initiallyDeferred?, enforced?}
+ private boolean[] characteristics;
+
+ private ProviderInfo[] providerInfo;
// CONSTRUCTORS
@@ -89,6 +94,7 @@ public class CreateConstraintConstantAct
*
* @param constraintName Constraint name.
* @param constraintType Constraint type.
+ * @param characteristics Constraint characteristics
* @param forCreateTable Constraint is being added for a CREATE TABLE
* @param tableName Table name.
* @param tableId UUID of table.
@@ -96,16 +102,13 @@ public class CreateConstraintConstantAct
* @param columnNames String[] for column names
* @param indexAction IndexConstantAction for constraint (if necessary)
* @param constraintText Text for check constraint
- * RESOLVE - the next parameter should go away once we use UUIDs
- * (Generated constraint names will be based off of uuids)
- * @param enabled Should the constraint be created as enabled
- * (enabled == true), or disabled (enabled == false).
* @param otherConstraint information about the constraint that this references
* @param providerInfo Information on all the Providers
*/
CreateConstraintConstantAction(
String constraintName,
int constraintType,
+ boolean[] characteristics,
boolean forCreateTable,
String tableName,
UUID tableId,
@@ -113,7 +116,6 @@ public class CreateConstraintConstantAct
String[] columnNames,
IndexConstantAction indexAction,
String constraintText,
- boolean enabled,
ConstraintInfo otherConstraint,
ProviderInfo[] providerInfo)
{
@@ -122,7 +124,7 @@ public class CreateConstraintConstantAct
this.forCreateTable = forCreateTable;
this.columnNames = columnNames;
this.constraintText = constraintText;
- this.enabled = enabled;
+ this.characteristics = characteristics.clone();
this.otherConstraintInfo = otherConstraint;
this.providerInfo = providerInfo;
}
@@ -282,6 +284,23 @@ public class CreateConstraintConstantAct
UUID constraintId = uuidFactory.createUUID();
+ boolean[] defaults = new boolean[]{
+ ConstraintDefinitionNode.DEFERRABLE_DEFAULT,
+ ConstraintDefinitionNode.INITIALLY_DEFERRED_DEFAULT,
+ ConstraintDefinitionNode.ENFORCED_DEFAULT
+ };
+
+ for (int i=0; i < characteristics.length; i++) {
+ if (characteristics[i] != defaults[i]) {
+ // Remove when feature DERBY-532 is completed
+ if (!PropertyUtil.getSystemProperty("derby.constraintsTesting",
+ tableName).equals("true")) {
+ throw StandardException.newException(SQLState.NOT_IMPLEMENTED,
+ "non-default constraint characteristics");
+ }
+ }
+ }
+
/* Now, lets create the constraint descriptor */
DataDescriptorGenerator ddg = dd.getDataDescriptorGenerator();
switch (constraintType)
@@ -289,13 +308,13 @@ public class CreateConstraintConstantAct
case DataDictionary.PRIMARYKEY_CONSTRAINT:
conDesc = ddg.newPrimaryKeyConstraintDescriptor(
td, constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ characteristics[0], //deferable,
+ characteristics[1], //initiallyDeferred,
genColumnPositions(td, false), //int[],
constraintId,
indexId,
sd,
- enabled,
+ characteristics[2],
0 // referenceCount
);
dd.addConstraintDescriptor(conDesc, tc);
@@ -304,13 +323,13 @@ public class CreateConstraintConstantAct
case DataDictionary.UNIQUE_CONSTRAINT:
conDesc = ddg.newUniqueConstraintDescriptor(
td, constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ characteristics[0], //deferable,
+ characteristics[1], //initiallyDeferred,
genColumnPositions(td, false), //int[],
constraintId,
indexId,
sd,
- enabled,
+ characteristics[2],
0 // referenceCount
);
dd.addConstraintDescriptor(conDesc, tc);
@@ -319,13 +338,13 @@ public class CreateConstraintConstantAct
case DataDictionary.CHECK_CONSTRAINT:
conDesc = ddg.newCheckConstraintDescriptor(
td, constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ characteristics[0], //deferable,
+ characteristics[1], //initiallyDeferred,
constraintId,
constraintText,
new ReferencedColumnsDescriptorImpl(genColumnPositions(td, false)), //int[],
sd,
- enabled
+ characteristics[2]
);
dd.addConstraintDescriptor(conDesc, tc);
storeConstraintDependenciesOnPrivileges
@@ -339,14 +358,14 @@ public class CreateConstraintConstantAct
conDesc = ddg.newForeignKeyConstraintDescriptor(
td, constraintName,
- false, //deferable,
- false, //initiallyDeferred,
+ characteristics[0], //deferable,
+ characteristics[1], //initiallyDeferred,
genColumnPositions(td, false), //int[],
constraintId,
indexId,
sd,
referencedConstraint,
- enabled,
+ characteristics[2],
otherConstraintInfo.getReferentialActionDeleteRule(),
otherConstraintInfo.getReferentialActionUpdateRule()
);
@@ -379,6 +398,10 @@ public class CreateConstraintConstantAct
providerInfo);
break;
+ case DataDictionary.MODIFY_CONSTRAINT:
+ throw StandardException.newException(SQLState.NOT_IMPLEMENTED,
+ "ALTER CONSTRAINT");
+
default:
if (SanityManager.DEBUG)
{
@@ -388,6 +411,9 @@ public class CreateConstraintConstantAct
break;
}
+
+
+
/* Create stored dependencies for each provider */
if (providerInfo != null)
{
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropConstraintConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropConstraintConstantAction.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropConstraintConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropConstraintConstantAction.java Tue Aug 27 14:05:03 2013
@@ -188,7 +188,7 @@ public class DropConstraintConstantActio
String errorName = constraintName == null ? "PRIMARY KEY" :
(constraintSd.getSchemaName() + "."+ constraintName);
- throw StandardException.newException(SQLState.LANG_DROP_NON_EXISTENT_CONSTRAINT,
+ throw StandardException.newException(SQLState.LANG_DROP_OR_ALTER_NON_EXISTING_CONSTRAINT,
errorName,
td.getQualifiedName());
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericConstantActionFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericConstantActionFactory.java?rev=1517823&r1=1517822&r2=1517823&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericConstantActionFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericConstantActionFactory.java Tue Aug 27 14:05:03 2013
@@ -85,27 +85,14 @@ public class GenericConstantActionFactor
/**
* Get ConstantAction for SET CONSTRAINTS statement.
*
- * @param cdl the constraints to set, if null,
- * we'll go ahead and set them all
- * @param enable if true, turn them on, if false
- * disable them
- * @param unconditionallyEnforce Replication sets this to true at
- * the end of REFRESH. This forces us
- * to run the included foreign key constraints even
- * if they're already marked ENABLED.
- * @param ddlList Replication list of actions to propagate,
- * null unless a replication source
- */
- public ConstantAction getSetConstraintsConstantAction
- (
- ConstraintDescriptorList cdl,
- boolean enable,
- boolean unconditionallyEnforce,
- Object[] ddlList
- )
- {
- // ignore rep arg
- return new SetConstraintsConstantAction(cdl, enable, unconditionallyEnforce);
+ * @param constraints The constraints to set, if null,
+ * set them ALL.
+ * @param initiallyDeferred ncodes IMMEDIATE (false), DEFERRED (true)
+ */
+ public ConstantAction getSetConstraintsConstantAction(
+ List<TableName> constraints,
+ boolean initiallyDeferred) {
+ return new SetConstraintsConstantAction(constraints, initiallyDeferred);
}
@@ -183,6 +170,9 @@ public class GenericConstantActionFactor
*
* @param constraintName Constraint name.
* @param constraintType Constraint type.
+ * @param constraintCharacteristics
+ * Constraint characteristics, see {@link
+ * org.apache.derby.impl.sql.compile.ConstraintDefinitionNode#characteristics}
* @param forCreateTable True if for a CREATE TABLE
* @param tableName Table name.
* @param tableId UUID of table.
@@ -190,8 +180,6 @@ public class GenericConstantActionFactor
* @param columnNames String[] for column names
* @param indexAction IndexConstantAction for constraint (if necessary)
* @param constraintText Text for check constraint
- * @param enabled Should the constraint be created as enabled
- * (enabled == true), or disabled (enabled == false).
* @param otherConstraint The referenced constraint, if a foreign key constraint
* @param providerInfo Information on all the Providers
*/
@@ -199,6 +187,7 @@ public class GenericConstantActionFactor
(
String constraintName,
int constraintType,
+ boolean[] constraintCharacteristics,
boolean forCreateTable,
String tableName,
UUID tableId,
@@ -206,15 +195,23 @@ public class GenericConstantActionFactor
String[] columnNames,
IndexConstantAction indexAction,
String constraintText,
- boolean enabled,
ConstraintInfo otherConstraint,
ProviderInfo[] providerInfo
)
{
- return new CreateConstraintConstantAction
- ( constraintName, constraintType, forCreateTable, tableName,
- tableId, schemaName, columnNames, indexAction, constraintText,
- enabled, otherConstraint, providerInfo );
+ return new CreateConstraintConstantAction(
+ constraintName,
+ constraintType,
+ constraintCharacteristics,
+ forCreateTable,
+ tableName,
+ tableId,
+ schemaName,
+ columnNames,
+ indexAction,
+ constraintText,
+ otherConstraint,
+ providerInfo );
}
@@ -554,6 +551,39 @@ public class GenericConstantActionFactor
/**
+ * Make ConstantAction to drop a constraint.
+ *
+ * @param constraintName Constraint name.
+ * @param constraintSchemaName Constraint Schema Name
+ * @param characteristics The presumably altered characteristics
+ * @param tableName Table name.
+ * @param tableId UUID of table.
+ * @param tableSchemaName The schema that table lives in.
+ * @param indexAction IndexConstantAction for constraint (if necessary)
+ */
+ public ConstraintConstantAction getAlterConstraintConstantAction
+ (
+ String constraintName,
+ String constraintSchemaName,
+ boolean[] characteristics,
+ String tableName,
+ UUID tableId,
+ String tableSchemaName,
+ IndexConstantAction indexAction
+ )
+ {
+ return new AlterConstraintConstantAction(
+ constraintName,
+ constraintSchemaName,
+ characteristics,
+ tableName,
+ tableId,
+ tableSchemaName,
+ indexAction);
+ }
+
+
+ /**
* Make the ConstantAction for a DROP INDEX statement.
*
*
@@ -782,7 +812,9 @@ public class GenericConstantActionFactor
/**
* Make the ConstantAction for an updatable VTI statement.
*
- * @param deferred Deferred mode?
+ * @param statementType Statement type, cf.
+ * {@link org.apache.derby.vti.DeferModification#INSERT_STATEMENT} etc.
+ * @param deferred Deferred processing mode?
*
* @exception StandardException Thrown on failure
*/
@@ -795,7 +827,9 @@ public class GenericConstantActionFactor
/**
* Make the ConstantAction for an updatable VTI statement.
*
- * @param deferred Deferred mode?
+ * @param statementType Statement type, cf.
+ * {@link org.apache.derby.vti.DeferModification#INSERT_STATEMENT} etc.
+ * @param deferred Deferred processing mode?
* @param changedColumnIds Array of ids of changed columns
*
* @exception StandardException Thrown on failure