]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 414012: Include the table id in fields that fail their new max-length check.
authormkanat%bugzilla.org <>
Mon, 28 Jan 2008 06:54:58 +0000 (06:54 +0000)
committermkanat%bugzilla.org <>
Mon, 28 Jan 2008 06:54:58 +0000 (06:54 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=justdave, a=justdave

Bugzilla/Install/DB.pm
template/en/default/setup/strings.txt.pl

index e9ce742d82869fadd40f0955d850f92193e62661..6b8a6fdc6e5815e630a1113199ccb5c063930114 100644 (file)
@@ -516,7 +516,7 @@ sub update_table_definitions {
     _make_lang_setting_dynamic();
     
     # 2007-11-29 xiaoou.wu@oracle.com - Bug 153129
-    change_text_types();
+    _change_text_types();
 
     # 2007-09-09 LpSolit@gmail.com - Bug 99215
     _fix_attachment_modification_date();
@@ -2937,12 +2937,12 @@ sub _fix_attachment_modification_date {
                        [qw(modification_time)]);
 }
 
-sub change_text_types {
+sub _change_text_types {
     my $dbh = Bugzilla->dbh; 
     return if $dbh->bz_column_info('series', 'query')->{TYPE} eq 'LONGTEXT';
-    _check_content_length('attachments', 'mimetype',    255);
-    _check_content_length('fielddefs',   'description', 255);
-    _check_content_length('attachments', 'description', 255);
+    _check_content_length('attachments', 'mimetype',    255, 'attach_id');
+    _check_content_length('fielddefs',   'description', 255, 'id');
+    _check_content_length('attachments', 'description', 255, 'attach_id');
 
     $dbh->bz_alter_column('bugs', 'bug_file_loc',
         { TYPE => 'MEDIUMTEXT'});
@@ -2968,28 +2968,27 @@ sub change_text_types {
 } 
 
 sub _check_content_length {
-    my ($table_name, $field_name, $max_length) = @_;
+    my ($table_name, $field_name, $max_length, $id_field) = @_;
     my $dbh = Bugzilla->dbh;
-    my $contents = $dbh->selectcol_arrayref(
-        "SELECT $field_name FROM $table_name 
-          WHERE LENGTH($field_name) > ?", undef, $max_length);
+    my %contents = @{ $dbh->selectcol_arrayref(
+        "SELECT $id_field, $field_name FROM $table_name 
+          WHERE LENGTH($field_name) > ?", {Columns=>[1,2]}, $max_length) };
 
-    if (@$contents) {
-        my @trimmed;
-        foreach my $item (@$contents) {
+    if (scalar keys %contents) {
+        print install_string('install_data_too_long',
+                             { column     => $field_name,
+                               id_column  => $id_field,
+                               table      => $table_name,
+                               max_length => $max_length });
+        foreach my $id (keys %contents) {
+            my $string = $contents{$id};
             # Don't dump the whole string--it could be 16MB.
-            if (length($item) > 80) {
-                push(@trimmed,  substr($item, 0, 30) . "..." 
-                                . substr($item, -30) . "\n");
-            } else {
-                push(@trimmed, $item);
+            if (length($string) > 80) {
+                $string = substr($string, 0, 30) . "..." 
+                         . substr($string, -30) . "\n";
             }
+            print "$id: $string\n";
         }
-        print install_string('install_data_too_long',
-                              { column => $field_name,
-                                table  => $table_name,
-                                max_length => $max_length,
-                                data => join("\n", @trimmed) });
         exit 3;
     }
 }
index 2439112bc6545d101603c937a20e4437ce2057a6..51e1ac0597b1249957305e3ffd942ee92ecdc6be 100644 (file)
@@ -46,10 +46,10 @@ with one command, do:
 EOT
     install_data_too_long => <<EOT,
 WARNING: Some of the data in the ##table##.##column## column is longer than
-its new length limit of ##max_length## characters. Please fix this data
-and then re-run checksetup.pl:
+its new length limit of ##max_length## characters. The data that needs to be
+fixed is printed below with the value of the ##id_column## column first and
+then the value of the ##column## column that needs to be fixed:
 
-##data##
 EOT
     install_module => 'Installing ##module## version ##version##...',
     module_found => "found v##ver##",