Closed Bug 286527 Opened 20 years ago Closed 20 years ago

Cross-DB bz_rename_column and bz_drop_column

Categories

(Bugzilla :: Bugzilla-General, enhancement, P1)

2.19.2
enhancement

Tracking

()

RESOLVED FIXED
Bugzilla 2.20

People

(Reporter: mkanat, Assigned: mkanat)

References

Details

Attachments

(1 file, 3 obsolete files)

Just like bz_rename_field, but cross-database compatible! Wow!
Status: NEW → ASSIGNED
Priority: -- → P1
Target Milestone: --- → Bugzilla 2.20
It turns out that I'll pretty much have to implement DROP at the same time, so let's just do that. They're both easy anyhow.
Summary: Cross-DB bz_rename_column → Cross-DB bz_rename_column and bz_drop_column
Attached patch bz_rename_column and bz_drop_column (obsolete) (deleted) — Splinter Review
Tested on PostgreSQL and on MySQL. Once again, this contains various fixes for previous patches. I apologies for mixing them together, but I think that this method of doing things is better than taking out a branch and then having to merge it back in.
Attachment #177730 - Flags: review?(Tomas.Kopal)
Attached patch v1.1 (obsolete) (deleted) — Splinter Review
Oops, I'd left two debug "print" statements in there.
Attachment #177730 - Attachment is obsolete: true
Attachment #177731 - Flags: review?(Tomas.Kopal)
Comment on attachment 177731 [details] [diff] [review] v1.1 >+ # Handle any fields that were NULL before. We *must* have a DEFAULT. >+ push(@statements, "UPDATE $table SET $column = $default" >+ . " WHERE $column IS NULL"); Just for the record, you just created the column so there can't be any sensible data, so leaving out the WHERE and changing all values would be as good as this. But we don't need extra performance so let's play safe. >+ my $abstract_fields = $self->{abstract_schema}{$table}{FIELDS}; >+ my $name_position = lsearch($abstract_fields, $column); >+ # Delete the key/value pair from the array. >+ splice(@$abstract_fields, $name_position, 2); >+ I would really like to see a check for sensible value in $name_position here, as a safeguard. I don't like trusting output from functions like lsearch to be always valid, i.e. the substring always found :-). >--- mkanat4/Bugzilla/DB.pm 2005-03-17 06:14:53.000000000 -0800 >+++ mkanat/Bugzilla/DB.pm 2005-03-17 06:20:06.000000000 -0800 >+sub bz_drop_column { >+sub bz_rename_column { Missing PODs for these. Also, I was just thinking if it wouldn't be handy if these methods in DB.pm returned true/false if any change were performed. Then you could easily do some migration code (or rollback some chages, or whatever is needed) based on the return value. Does it make sense, in the context of your idea how it should be used?
Attachment #177731 - Flags: review?(Tomas.Kopal) → review-
Attachment #177730 - Flags: review?(Tomas.Kopal)
Attached patch v2 (obsolete) (deleted) — Splinter Review
OK, I addressed all the comments.
Attachment #177731 - Attachment is obsolete: true
Attachment #177837 - Flags: review?(Tomas.Kopal)
Comment on attachment 177837 [details] [diff] [review] v2 >--- Bugzilla/DB/Schema.pm 18 Mar 2005 03:28:52 -0000 1.13 >+++ Bugzilla/DB/Schema.pm 18 Mar 2005 07:09:21 -0000 >+ push(@statements, "UPDATE $table SET $column = $default" >+ . " WHERE $column IS NULL"); >--- Bugzilla/DB/Schema/Pg.pm 18 Mar 2005 03:28:53 -0000 1.6 >+++ Bugzilla/DB/Schema/Pg.pm 18 Mar 2005 07:09:21 -0000 >+ push(@statements, "UPDATE $table SET $column = $default"); Is there any reason you changed this only for Postgres? Just to be clear, I don't mind having the WHERE there, quite the opposite, we are not shooting for extra speed here (it's just setup, nothing run by thousands of users every second). Otherwise, it looks perfect.
Attachment #177837 - Flags: review?(Tomas.Kopal) → review+
(In reply to comment #6) > Is there any reason you changed this only for Postgres? Yeah, one of those is ADD COLUMN and the other one is ALTER COLUMN.
(In reply to comment #7) > (In reply to comment #6) > > Is there any reason you changed this only for Postgres? > > Yeah, one of those is ADD COLUMN and the other one is ALTER COLUMN. Ooops :-). Ok, then, no problems with the patch :-).
Flags: approval?
Attached patch v2.1 (bitrot fix) (deleted) — Splinter Review
Just a bitrot fix; carrying forward r+.
Attachment #177837 - Attachment is obsolete: true
Attachment #178791 - Flags: review+
Blocks: 287986
Blocks: 288539
No longer blocks: 288539
Flags: approval? → approval+
Checking in Bugzilla/DB.pm; /cvsroot/mozilla/webtools/bugzilla/Bugzilla/DB.pm,v <-- DB.pm new revision: 1.42; previous revision: 1.41 done Checking in Bugzilla/DB/Schema.pm; /cvsroot/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm,v <-- Schema.pm new revision: 1.18; previous revision: 1.17 done Checking in Bugzilla/DB/Schema/Mysql.pm; /cvsroot/mozilla/webtools/bugzilla/Bugzilla/DB/Schema/Mysql.pm,v <-- Mysql.pm new revision: 1.5; previous revision: 1.4 done Checking in Bugzilla/DB/Schema/Pg.pm; /cvsroot/mozilla/webtools/bugzilla/Bugzilla/DB/Schema/Pg.pm,v <-- Pg.pm new revision: 1.7; previous revision: 1.6 done
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: