[
http://issues.apache.org/jira/browse/DERBY-1490?page=comments#action_12445290 ]
A B commented on DERBY-1490:
----------------------------
I reviewed the patch and functionally it looks good to me. I ran the new test
cases in altertable.sql and they all passed.
Just some minor things that jumped out at me while I was reviewing:
---------------------------------
Two comments on the patch itself:
1. Test cases say "FIXME" for some of the trigger tests. This appears to be
correlated with your comment #4 above, except that the Jira comment says that
this behavior is "pretty reasonable" while the test itself suggests that there
is something here to be fixed. Are we just waiting for community feedback in
order to determine which conclusion ("reasonable" vs "FIXME") is the most
appropriate?
2. sqlgrammar.jj has the following diff:
+ if (oldColumnReference.getTableNameNode() == null)
+ throw StandardException.newException(
+ SQLState.LANG_OBJECT_DOES_NOT_EXIST,
+ "RENAME COLUMN", "(Missing Table)");
>From a user perspective this shows up as something like:
ERROR 42Y55: 'RENAME COLUMN' cannot be performed on '(Missing Table)' because
it does not exist.
The string literal "(Missing Table)" is hardcoded into the error message
because it is passed as an error argument. This means that someone who is
using Derby in a different locale will see the phrase "(Missing Table)" in
English; it will not be translated. I don't know what the Derby practice
regarding message translation is, but my understanding is that it's generally
best to restrict hard-coded error tokens to actual SQL syntax words, since
syntax words are constant across locales. Thus it's fine to use "RENAME
COLUMN" because that's an explicit part of the syntax and it does not change
from locale to locale. But "Missing Table" is a locale-specific phrase and so
it's best to avoid passing it as an error message argument. If needed, I think
a new error message would be a cleaner way to go.
Of course, after writing that I did a quick look in sqlgrammar.jj and I noticed
two places where the English word "MISSING" is hard-coded as an error argument.
So I guess it has been done before...but it still seems like something to avoid
as a general rule.
As an alternative, I wonder if you couldn't just pass the column name as an
argument in this case? Ex.
ij> rename column renc_1 to b;
ERROR 42Y55: 'RENAME COLUMN' cannot be performed on 'RENC_1' because it does
not exist.
The plus side to this is that the message is locale-independent and there is a
clear indication of what part of the command is causing the error. The
downside is that this error message does not really express what we want it to
express--namely, that the syntax is missing a table name. So again, perhaps
the best bet is to create a new error message that explicitly tells what the
problem is...?
------------------------------------------
In response to the questions you asked in your comment above:
#1) Umm...don't know which is better. I think I'll plea "undecided" on this
one :)
#2) I think you've done a great job of covering the various test cases. Thanks
for being so thorough! The only test case that I didn't see was one for trying
to rename a column to itself, but when I tried that it threw the expected error
(i.e. column already exists). I also tried renaming the column on a synonym,
which failed as expected, and I verified that renaming a column in a table
"renames" it (functionally) in the synonym, as well. So the tests look good to
me.
As for #3 and #4, I personally do not have any problems with the behavior as
you describe. I do wonder, though, why it is that we allow renaming to occur
when it "breaks" a trigger but do not allow it when it would "break" a view or
a check constraint. Is this just because, as the altertable.sql test says, the
trigger dependency information is not correctly updated? If that's the case,
then is there a Jira issue for fixing that particular problem?
------------------------------------------------
Other minor nits that shouldn't block the patch:
- There appears to be a mix of spaces and tabs in the new code, which makes the
file a bit harder to read. In some cases the difference is between existing
code and new code, which is probably okay. But there are also some places
where the new code itself mixes spaces with tabs...
- One line over 80 chars in sqlgrammar.jj...
As I said, nothing major to report here--certainly not anything I would call a
"blocker" for the patch. Functionally the patch looks solid to me. Thanks for
taking the time to work on this feature!
> Provide ALTER TABLE RENAME COLUMN functionality
> -----------------------------------------------
>
> Key: DERBY-1490
> URL: http://issues.apache.org/jira/browse/DERBY-1490
> 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.6, 10.1.2.1,
> 10.1.3.1
> Reporter: Bryan Pendleton
> Assigned To: Bryan Pendleton
> Attachments: derby1490_v1_needMoreTests.diff,
> renameColumn_v2_with_tests.diff
>
>
> Provide a way to rename a column in an existing table. Possible syntax could
> be:
> ALTER TABLE tablename RENAME COLUMN oldcolumn TO newcolumn;
> Feature should properly handle the possibility that the column is currently
> used in constraints, views, indexes, triggers, 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