|
The techniques in
repro.sql is a first start at a script demonstrating the problem
I started working on a possible patch, but hit a bit of a confusion while trying
to re-factor some code in DataDictionaryImpl.java. I don't want to lose the work I did, so I'm attaching d1909_partial_incomplete.diff to save that work. Hopefully I can pick up this work and continue it once I understand the fix better. Attached is rewrite_syscolperms_v1.diff, a proposed patch for this problem.
The core of this proposed patch involves refactoring and reusing the to update the COLUMNS column. The only handled the case of adding a bit to the COLUMNS column; this patch extends that method to support removing a bit from the COLUMNS column as well, then calls the method from the AlterTable execution logic. The diff file is rather large because because it includes the removal of altertableDropColumn.sql and altertableDropColumn.out, and the merging of those files into altertable.sql and altertable.out, so the entire contents of those files are included in the diff twice each :) The rest of the diff is pretty small and straightforward and hopefully is not hard to review. The diff includes the proposed 2-line change from that change is mandatory for this fix. Once the resolved, I'll revisit this diff to remove those two lines from DataDictionaryImpl.java The proposed patch has one particularly interesting behavior: in the case in which a column is dropped from a table, and there exists a user who was granted privileges on that column, and that column only, in that table, the diff processes their SYSCOLPERMS row and leaves a "empty" row; that is, a row in which the COLUMNS column of SYSCOLPERMS has all bits clear. From what I can tell, this does not cause any problems; the behavior is reasonable. However, it might be argued that it would be preferable to entirely delete the row in this case. Feedback from reviewers about this behavior and about how to address it (if necessary), would be much appreciated. Attached is rewrite_syscolperms_v2.diff. This patch proposal differs from
the v1 version only in that the code patch to DataDictionaryImpl.java for This patch now applies cleanly against the head of trunk and is, I believe, ready for commit. derbyall and suites.All pass with this patch. Please review the patch as time permits. Attached is rewrite_syscolperms_v3.diff. This patch is up to date with the head of trunk, and includes the change to EmptyDictionary.java (thanks Andrew!).
I intend to commit this patch, unless I find any problems in my last re-run of derbyall & suites.All. If there are any review comments, please let me know. Committed rewrite_syscolperms_v3.diff to subversion as revision 503550.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DERBY-1489.DERBY-1489implements most of the DROP COLUMN behaviors, but did not handle the interaction with GRANTed column privileges.