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 dj...@apache.org on 2007/05/17 20:31:34 UTC
svn commit: r539071 - in /db/derby/code/trunk/java:
engine/org/apache/derby/iapi/sql/dictionary/
engine/org/apache/derby/impl/sql/catalog/
engine/org/apache/derby/impl/sql/execute/
storeless/org/apache/derby/impl/storeless/
Author: djd
Date: Thu May 17 11:31:32 2007
New Revision: 539071
URL: http://svn.apache.org/viewvc?view=rev&rev=539071
Log:
DERBY-2397 (partial) Move drop code for constraints and indexes into their descriptors
as drop() methods instead of static methods in constant actions.
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/ConglomerateDescriptor.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/DataDictionary.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/execute/AlterTableConstantAction.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/DropIndexConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java
db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -22,8 +22,11 @@
package org.apache.derby.iapi.sql.dictionary;
import org.apache.derby.catalog.ReferencedColumns;
import org.apache.derby.catalog.UUID;
+import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.services.sanity.SanityManager;
import org.apache.derby.iapi.sql.StatementType;
+import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
+import org.apache.derby.iapi.store.access.TransactionController;
/**
* This class represents a check constraint descriptor.
@@ -31,8 +34,8 @@
*/
public class CheckConstraintDescriptor extends ConstraintDescriptor
{
- ReferencedColumns referencedColumns;
- String constraintText;
+ private ReferencedColumns referencedColumns;
+ private String constraintText;
CheckConstraintDescriptor(
DataDictionary dataDictionary,
@@ -159,7 +162,7 @@
// if update, only relevant if columns intersect
return doColumnsIntersect(modifiedCols, getReferencedColumns());
- }
+ }
/**
* Convert the CheckConstraintDescriptor to a String.
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java Thu May 17 11:31:32 2007
@@ -342,6 +342,16 @@
/** @see TupleDescriptor#getDescriptorName */
public String getDescriptorName() { return name; }
+ /**
+ * Drop this ConglomerateDescriptor when it represents
+ * an index. If this is the last desciptor for
+ * a physical index then the physical index (conglomerate)
+ * and its descriptor will be dropped.
+ *
+ * @param lcc
+ * @param td
+ * @throws StandardException
+ */
public void drop(LanguageConnectionContext lcc,
TableDescriptor td)
throws StandardException
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -35,8 +35,7 @@
import org.apache.derby.iapi.services.io.StoredFormatIds;
import org.apache.derby.iapi.sql.depend.DependencyManager;
import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
-
-import org.apache.derby.impl.sql.execute.DropConstraintConstantAction;
+import org.apache.derby.iapi.store.access.TransactionController;
/**
* This class is used to get information from a ConstraintDescriptor.
@@ -607,13 +606,7 @@
//depend on a privilege. None of the other constraint types
//can be dependent on a privilege becuse those constraint types
//can not reference a table/routine.
- DropConstraintConstantAction.dropConstraintAndIndex(
- getDataDictionary().getDependencyManager(),
- table,
- getDataDictionary(),
- this,
- lcc.getTransactionExecute(),
- lcc, true);
+ drop(lcc, true);
return;
}
@@ -642,6 +635,69 @@
}
}
}
+
+ /**
+ * Drop the constraint. Clears dependencies, drops
+ * the backing index and removes the constraint
+ * from the list on the table descriptor. Does NOT
+ * do an dm.invalidateFor()
+ */
+ public void drop(LanguageConnectionContext lcc,
+ boolean clearDependencies)
+ throws StandardException
+ {
+ DataDictionary dd = getDataDictionary();
+ DependencyManager dm = dd.getDependencyManager();
+ TransactionController tc = lcc.getTransactionExecute();
+
+ if (clearDependencies)
+ {
+ dm.clearDependencies(lcc, this);
+ }
+
+ /* Drop the constraint.
+ * NOTE: This must occur before dropping any backing index, since
+ * a user is not allowed to drop a backing index without dropping
+ * the constraint.
+ */
+ dd.dropConstraintDescriptor(this, tc);
+
+ /* Drop the index, if there's one for this constraint.
+ * NOTE: There will always be an indexAction. We don't
+ * force the constraint to exist at bind time, so we always
+ * generate one.
+ */
+ if (hasBackingIndex())
+ {
+
+ // it may have duplicates, and we drop a backing index
+ // Bug 4307
+ // We need to get the conglomerate descriptors from the
+ // dd in case we dropped other constraints in a cascade operation.
+ ConglomerateDescriptor[]conglomDescs =
+ dd.getConglomerateDescriptors(getConglomerateId());
+
+ if (conglomDescs.length != 0)
+ {
+ // Typically there is only one ConglomerateDescriptor
+ // for a given UUID, but due to an old bug
+ // there may be more than one. If there is more
+ // than one then which one is remvoed does not
+ // matter since they will all have the same critical
+ // information since they point to the same physical index.
+ for (int i = 0; i < conglomDescs.length; i++)
+ {
+ if (conglomDescs[i].isConstraint())
+ {
+ conglomDescs[i].drop(lcc, table);
+ break;
+ }
+ }
+ }
+ }
+
+ table.removeConstraintDescriptor(this);
+ }
/** @see TupleDescriptor#getDescriptorName */
public String getDescriptorName() { return constraintName; }
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -808,8 +808,7 @@
throws StandardException;
/**
- * Drops the given ConstraintDescriptor that is associated
- * with the given table and constraint type from the data dictionary.
+ * Drops the given ConstraintDescriptor from the data dictionary.
*
* NOTE: Caller is responsible for dropping any backing index
*
@@ -820,7 +819,7 @@
*
* @exception StandardException Thrown on failure
*/
- public void dropConstraintDescriptor(TableDescriptor table,
+ public void dropConstraintDescriptor(
ConstraintDescriptor descriptor,
TransactionController tc)
throws StandardException;
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -4944,17 +4944,14 @@
}
/**
- * Drops the given ConstraintDescriptor that is associated
- * with the given table and constraint type from the data dictionary.
+ * Drops the given ConstraintDescriptor from the data dictionary.
*
- * @param table The table from which to drop the
- * constraint descriptor
* @param descriptor The descriptor to drop
* @param tc The TransactionController
*
* @exception StandardException Thrown on error
*/
- public void dropConstraintDescriptor(TableDescriptor table,
+ public void dropConstraintDescriptor(
ConstraintDescriptor descriptor,
TransactionController tc)
throws StandardException
@@ -5015,7 +5012,7 @@
for (Iterator iterator = cdl.iterator(); iterator.hasNext(); )
{
ConstraintDescriptor cd = (ConstraintDescriptor) iterator.next();
- dropConstraintDescriptor(table, cd, tc);
+ dropConstraintDescriptor(cd, tc);
}
/*
@@ -8223,7 +8220,7 @@
//record the new timestamp
if (timeNow > timeForLastSystemSQLName) {
systemSQLNameNumber = 0;
- calendarForLastSystemSQLName.setTime(new Date(timeNow));
+ calendarForLastSystemSQLName.setTimeInMillis(timeNow);
timeForLastSystemSQLName = timeNow;
} else {
//the request has come at the same time as the last generated name request
@@ -8237,7 +8234,7 @@
systemSQLNameNumber = 0;
timeForLastSystemSQLName = timeForLastSystemSQLName + 10L;
//increment the timestamp for system generated names by 10ms
- calendarForLastSystemSQLName.setTime(new Date(timeForLastSystemSQLName));
+ calendarForLastSystemSQLName.setTimeInMillis(timeForLastSystemSQLName);
}
}
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -836,7 +836,7 @@
{
if ((cd instanceof CheckConstraintDescriptor) && changed)
{
- dd.dropConstraintDescriptor(td, cd, tc);
+ dd.dropConstraintDescriptor(cd, tc);
for (j = 0; j < numRefCols; j++)
{
if (referencedColumns[j] > droppedColumnPosition)
@@ -870,8 +870,7 @@
// drop now in all other cases
dm.invalidateFor(cd, DependencyManager.DROP_CONSTRAINT,
lcc);
- DropConstraintConstantAction.dropConstraintAndIndex(dm, td, dd,
- cd, tc, lcc, true);
+ cd.drop(lcc, true);
activation.addWarning(
StandardException.newWarning(SQLState.LANG_CONSTRAINT_DROPPED,
@@ -881,8 +880,7 @@
for (int i = tbr_size - 1; i >= 0; i--)
{
ConstraintDescriptor cd = toBeRemoved[i];
- DropConstraintConstantAction.dropConstraintAndIndex(
- dm, td, dd, cd, tc, lcc, false);
+ cd.drop(lcc, false);
activation.addWarning(
StandardException.newWarning(SQLState.LANG_CONSTRAINT_DROPPED,
@@ -900,8 +898,7 @@
DependencyManager.DROP_CONSTRAINT,
lcc);
- DropConstraintConstantAction.dropConstraintAndIndex(
- dm, fkcd.getTableDescriptor(), dd, fkcd, tc, lcc, true);
+ fkcd.drop(lcc, true);
activation.addWarning(
StandardException.newWarning(
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?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- 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 Thu May 17 11:31:32 2007
@@ -227,7 +227,7 @@
** be repeatedly changing the reference count of the referenced
** key and generating unnecessary I/O.
*/
- dropConstraintAndIndex(dm, td, dd, conDesc, tc, lcc, !cascadeOnRefKey);
+ conDesc.drop(lcc, !cascadeOnRefKey);
if (cascadeOnRefKey)
{
@@ -243,8 +243,7 @@
{
fkcd = (ForeignKeyConstraintDescriptor) cdl.elementAt(index);
dm.invalidateFor(fkcd, DependencyManager.DROP_CONSTRAINT, lcc);
- dropConstraintAndIndex(dm, fkcd.getTableDescriptor(), dd, fkcd,
- tc, lcc, true);
+ fkcd.drop(lcc, true);
}
/*
@@ -255,72 +254,5 @@
dm.invalidateFor(conDesc, DependencyManager.DROP_CONSTRAINT, lcc);
dm.clearDependencies(lcc, conDesc);
}
- }
-
- /*
- * Drop the constraint. Clears dependencies, drops
- * the backing index and removes the constraint
- * from the list on the table descriptor. Does NOT
- * do an dm.invalidateFor()
- */
- public static void dropConstraintAndIndex(DependencyManager dm,
- TableDescriptor td,
- DataDictionary dd,
- ConstraintDescriptor conDesc,
- TransactionController tc,
- LanguageConnectionContext lcc,
- boolean clearDependencies)
- throws StandardException
- {
- if (SanityManager.DEBUG)
- {
- SanityManager.ASSERT(tc != null, "tc is null");
- SanityManager.ASSERT(td != null, "td is null");
- }
-
- if (clearDependencies)
- {
- dm.clearDependencies(lcc, conDesc);
- }
-
- /* Drop the constraint.
- * NOTE: This must occur before dropping any backing index, since
- * a user is not allowed to drop a backing index without dropping
- * the constraint.
- */
- dd.dropConstraintDescriptor(td, conDesc, tc);
-
- /* Drop the index, if there's one for this constraint.
- * NOTE: There will always be an indexAction. We don't
- * force the constraint to exist at bind time, so we always
- * generate one.
- */
- if (conDesc.hasBackingIndex())
- {
- ConglomerateDescriptor[] conglomDescs;
-
- // it may have duplicates, and we drop a backing index
- // Bug 4307
- // We need to get the conglomerate descriptors from the
- // dd in case we dropped other constraints in a cascade operation.
- conglomDescs = dd.getConglomerateDescriptors(
- conDesc.getConglomerateId());
-
- if (conglomDescs.length != 0)
- {
- for (int i = 0; i < conglomDescs.length; i++)
- {
- if (conglomDescs[i].isConstraint())
- {
- DropIndexConstantAction.dropIndex(dm, dd, tc,
- conglomDescs[i], td,
- lcc);
- break;
- }
- }
- }
- }
-
- td.removeConstraintDescriptor(conDesc);
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropIndexConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropIndexConstantAction.java?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropIndexConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropIndexConstantAction.java Thu May 17 11:31:32 2007
@@ -173,45 +173,4 @@
cd.drop(lcc, td);
}
-
- public static void dropIndex(DependencyManager dm,
- DataDictionary dd,
- TransactionController tc,
- ConglomerateDescriptor cd,
- TableDescriptor td,
- LanguageConnectionContext lcc)
- throws StandardException
- {
- if (SanityManager.DEBUG)
- {
- SanityManager.ASSERT(tc != null, "tc is null");
- SanityManager.ASSERT(cd != null, "cd is null");
- }
-
- // only drop the conglomerate if no similar index but with different
- // name. Get from dd in case we drop other dup indexes with a cascade operation
-
- if (dd.getConglomerateDescriptors(cd.getConglomerateNumber()).length == 1)
- {
- /* Drop statistics */
- dd.dropStatisticsDescriptors(td.getUUID(), cd.getUUID(), tc);
-
- /* Drop the conglomerate */
- tc.dropConglomerate(cd.getConglomerateNumber());
- }
-
- // invalidate any prepared statements that
- // depended on the index (including this one)
- dm.invalidateFor(cd, DependencyManager.DROP_INDEX, lcc);
-
- /* Drop the conglomerate descriptor */
- dd.dropConglomerateDescriptor(cd, tc);
-
- /*
- ** Remove the conglomerate descriptor from the list hanging off of the
- ** table descriptor
- */
- td.removeConglomerateDescriptor(cd);
- }
-
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java Thu May 17 11:31:32 2007
@@ -312,8 +312,7 @@
}
dm.invalidateFor(cd, DependencyManager.DROP_CONSTRAINT, lcc);
- DropConstraintConstantAction.dropConstraintAndIndex(dm, td, dd, cd,
- tc, lcc, true);
+ cd.drop(lcc, true);
}
/*
@@ -344,8 +343,7 @@
** Pass in false to dropConstraintsAndIndex so it
** doesn't clear dependencies, we'll do that ourselves.
*/
- DropConstraintConstantAction.dropConstraintAndIndex(dm, td, dd, cd,
- tc, lcc, false);
+ cd.drop(lcc, false);
/*
** If we are going to cascade, get all the
@@ -368,9 +366,7 @@
{
fkcd = (ConstraintDescriptor) fkcdl.elementAt(inner);
dm.invalidateFor(fkcd, DependencyManager.DROP_CONSTRAINT, lcc);
- DropConstraintConstantAction.dropConstraintAndIndex(
- dm, fkcd.getTableDescriptor(), dd, fkcd,
- tc, lcc, true);
+ fkcd.drop(lcc, true);
activation.addWarning(
StandardException.newWarning(SQLState.LANG_CONSTRAINT_DROPPED,
fkcd.getConstraintName(),
Modified: db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java?view=diff&rev=539071&r1=539070&r2=539071
==============================================================================
--- db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java (original)
+++ db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java Thu May 17 11:31:32 2007
@@ -320,8 +320,8 @@
}
- public void dropConstraintDescriptor(TableDescriptor table,
- ConstraintDescriptor descriptor, TransactionController tc)
+ public void dropConstraintDescriptor(
+ ConstraintDescriptor descriptor, TransactionController tc)
throws StandardException {
// TODO Auto-generated method stub