diff options
-rw-r--r-- | Bugzilla/Install/DB.pm | 43 | ||||
-rw-r--r-- | template/en/default/setup/strings.txt.pl | 6 |
2 files changed, 24 insertions, 25 deletions
diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index e9ce742d8..6b8a6fdc6 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -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; } } diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl index 2439112bc..51e1ac059 100644 --- a/template/en/default/setup/strings.txt.pl +++ b/template/en/default/setup/strings.txt.pl @@ -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##", |