[ http://issues.apache.org/jira/browse/DERBY-1489?page=comments#action_12438937 ] Bryan Pendleton commented on DERBY-1489: ----------------------------------------
Mamta, thanks again for the great review and the suggestions! They have been very interesting to pursue. I am intending to attach a revised patch later this weekend incorporating your suggestions, but I wanted to respond to a couple of your notes separately, as follows: 1) Regarding the handling of indexes when dropping a column, there was a discussion in early July on the derby-dev list in which we concluded that CASCADE/RESTRICT should not consider indexes, but instead should always simply remove the column from any affected indexes, and drop the entire index if this column was the last column. Here's a pointer to the email discussion: http://www.nabble.com/forum/ViewPost.jtp?post=5254954&framed=y 2) I'm glad you asked some questions about constraint handling because that caused me to write some more tests with PRIMARY and FOREIGN keys, and I found a problem in the case where the primary key, and the foreign key which references it, are both in the same table. The execution code was correctly cascading the delete, but during the table rebuild we were using a stale table descriptor and getting a "conglomerate not found" error. I changed the execution logic so that, after it has dropped all the affected PRIMARY and FOREIGN key constraints (and indexes) and before it rebuilds the base table, it re-reads the table descriptor from the system tables to ensure that it has the right table descriptor information. So I added a bunch more tests in this latest patch :) 3) You asked a very interesting question: why is following if condition not required anymore? if (numRefCols > 1 || cd.getConstraintType() == DataDictionary.PRIMARYKEY_CONSTRAINT) I removed this "if" test when I was changing DROP COLUMN to properly handle UNIQUE constraints. This line of code is in the code path which is performing RESTRICT analysis, to see if the constraint that has been found should cause the DROP COLUMN to fail. The effect of the "if" test was to say that the only constraints that caused DROP COLUMN RESTRICT to fail were those that were either: - PRIMARY KEY constraints that referred to this column, or - other types of constraints that referred to this column, as well as some other column in this table When I added processing for UNIQUE constraints, I thought about modifying this "if" test to say || cd.getConstraintType() == DataDictionary.UNIQUE_CONSTRAINT so that UNIQUE constraints that referred to *only* this column in this table would fail in RESTRICT mode, but the more I looked at this "if" test, the more I thought that the test was just unnecessary. We don't actually care whether the constraint affects 1 column or multiple columns, and we don't care whether it is a PRIMARYKEY_CONSTRAINT or some other sort of constraint. All we care about is that there is a constraint on this table which references this column, and the user has said RESTRICT. By removing the "if" test, the code interprets RESTRICT to apply to any such constraint, which I think is the right behavior. =================== I believe I've incorporated all your other suggestions into the revised patch. When my testing completes, I'll attach that patch, and look forward to additional feedback. > Provide ALTER TABLE DROP COLUMN functionality > --------------------------------------------- > > Key: DERBY-1489 > URL: http://issues.apache.org/jira/browse/DERBY-1489 > Project: Derby > Issue Type: New Feature > Components: Documentation, SQL > Affects Versions: 10.0.2.0, 10.0.2.1, 10.1.1.0, 10.2.1.5, 10.1.2.1, > 10.1.3.0, 10.1.3.1 > Reporter: Bryan Pendleton > Assigned To: Bryan Pendleton > Attachments: drop_column_v5_grant_tests.diff, > drop_column_v6_grant_not_implemented.diff, dropColumn_2.diff, > dropColumn_v3_view_drop.diff, dropColumn_v4_grant_tests.diff > > > Provide a way to drop a column from an existing table. Possible syntax would > be: > ALTER TABLE tablename DROP COLUMN columnname CASCADE / RESTRICT; > Feature should properly handle columns which are used in constraints, views, > triggers, indexes, etc. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira