Commit 961cc62c authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 153129: Bugzilla uses "mediumtext" as a DB data type when it's not necessary

Patch By Xiaoou Wu <xiaoou.wu@oracle.com> and Max Kanat-Alexander <mkanat@bugzilla.org> r=mkanat, a=mkanat
parent eb08f76a
...@@ -218,7 +218,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -218,7 +218,7 @@ use constant ABSTRACT_SCHEMA => {
bug_id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, bug_id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1,
PRIMARYKEY => 1}, PRIMARYKEY => 1},
assigned_to => {TYPE => 'INT3', NOTNULL => 1}, assigned_to => {TYPE => 'INT3', NOTNULL => 1},
bug_file_loc => {TYPE => 'TEXT'}, bug_file_loc => {TYPE => 'MEDIUMTEXT'},
bug_severity => {TYPE => 'varchar(64)', NOTNULL => 1}, bug_severity => {TYPE => 'varchar(64)', NOTNULL => 1},
bug_status => {TYPE => 'varchar(64)', NOTNULL => 1}, bug_status => {TYPE => 'varchar(64)', NOTNULL => 1},
creation_ts => {TYPE => 'DATETIME'}, creation_ts => {TYPE => 'DATETIME'},
...@@ -322,7 +322,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -322,7 +322,7 @@ use constant ABSTRACT_SCHEMA => {
bug_when => {TYPE => 'DATETIME', NOTNULL => 1}, bug_when => {TYPE => 'DATETIME', NOTNULL => 1},
work_time => {TYPE => 'decimal(5,2)', NOTNULL => 1, work_time => {TYPE => 'decimal(5,2)', NOTNULL => 1,
DEFAULT => '0'}, DEFAULT => '0'},
thetext => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, thetext => {TYPE => 'LONGTEXT', NOTNULL => 1},
isprivate => {TYPE => 'BOOLEAN', NOTNULL => 1, isprivate => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'}, DEFAULT => 'FALSE'},
already_wrapped => {TYPE => 'BOOLEAN', NOTNULL => 1, already_wrapped => {TYPE => 'BOOLEAN', NOTNULL => 1,
...@@ -373,8 +373,8 @@ use constant ABSTRACT_SCHEMA => { ...@@ -373,8 +373,8 @@ use constant ABSTRACT_SCHEMA => {
bug_id => {TYPE => 'INT3', NOTNULL => 1}, bug_id => {TYPE => 'INT3', NOTNULL => 1},
creation_ts => {TYPE => 'DATETIME', NOTNULL => 1}, creation_ts => {TYPE => 'DATETIME', NOTNULL => 1},
modification_time => {TYPE => 'DATETIME', NOTNULL => 1}, modification_time => {TYPE => 'DATETIME', NOTNULL => 1},
description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, description => {TYPE => 'TINYTEXT', NOTNULL => 1},
mimetype => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, mimetype => {TYPE => 'TINYTEXT', NOTNULL => 1},
ispatch => {TYPE => 'BOOLEAN'}, ispatch => {TYPE => 'BOOLEAN'},
filename => {TYPE => 'varchar(100)', NOTNULL => 1}, filename => {TYPE => 'varchar(100)', NOTNULL => 1},
submitter_id => {TYPE => 'INT3', NOTNULL => 1, submitter_id => {TYPE => 'INT3', NOTNULL => 1,
...@@ -469,7 +469,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -469,7 +469,7 @@ use constant ABSTRACT_SCHEMA => {
id => {TYPE => 'SMALLSERIAL', NOTNULL => 1, id => {TYPE => 'SMALLSERIAL', NOTNULL => 1,
PRIMARYKEY => 1}, PRIMARYKEY => 1},
name => {TYPE => 'varchar(50)', NOTNULL => 1}, name => {TYPE => 'varchar(50)', NOTNULL => 1},
description => {TYPE => 'TEXT'}, description => {TYPE => 'MEDIUMTEXT'},
cc_list => {TYPE => 'varchar(200)'}, cc_list => {TYPE => 'varchar(200)'},
target_type => {TYPE => 'char(1)', NOTNULL => 1, target_type => {TYPE => 'char(1)', NOTNULL => 1,
DEFAULT => "'b'"}, DEFAULT => "'b'"},
...@@ -527,7 +527,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -527,7 +527,7 @@ use constant ABSTRACT_SCHEMA => {
DEFAULT => FIELD_TYPE_UNKNOWN}, DEFAULT => FIELD_TYPE_UNKNOWN},
custom => {TYPE => 'BOOLEAN', NOTNULL => 1, custom => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'}, DEFAULT => 'FALSE'},
description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, description => {TYPE => 'TINYTEXT', NOTNULL => 1},
mailhead => {TYPE => 'BOOLEAN', NOTNULL => 1, mailhead => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'}, DEFAULT => 'FALSE'},
sortkey => {TYPE => 'INT2', NOTNULL => 1}, sortkey => {TYPE => 'INT2', NOTNULL => 1},
...@@ -781,7 +781,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -781,7 +781,7 @@ use constant ABSTRACT_SCHEMA => {
COLUMN => 'userid', COLUMN => 'userid',
DELETE => 'CASCADE'}}, DELETE => 'CASCADE'}},
name => {TYPE => 'varchar(64)', NOTNULL => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1},
query => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, query => {TYPE => 'LONGTEXT', NOTNULL => 1},
query_type => {TYPE => 'BOOLEAN', NOTNULL => 1}, query_type => {TYPE => 'BOOLEAN', NOTNULL => 1},
], ],
INDEXES => [ INDEXES => [
...@@ -869,7 +869,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -869,7 +869,7 @@ use constant ABSTRACT_SCHEMA => {
id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1,
PRIMARYKEY => 1}, PRIMARYKEY => 1},
name => {TYPE => 'varchar(255)', NOTNULL => 1}, name => {TYPE => 'varchar(255)', NOTNULL => 1},
description => {TYPE => 'TEXT', NOTNULL => 1}, description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
isbuggroup => {TYPE => 'BOOLEAN', NOTNULL => 1}, isbuggroup => {TYPE => 'BOOLEAN', NOTNULL => 1},
userregexp => {TYPE => 'TINYTEXT', NOTNULL => 1, userregexp => {TYPE => 'TINYTEXT', NOTNULL => 1,
DEFAULT => "''"}, DEFAULT => "''"},
...@@ -1067,7 +1067,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -1067,7 +1067,7 @@ use constant ABSTRACT_SCHEMA => {
name => {TYPE => 'varchar(64)', NOTNULL => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1},
frequency => {TYPE => 'INT2', NOTNULL => 1}, frequency => {TYPE => 'INT2', NOTNULL => 1},
last_viewed => {TYPE => 'DATETIME'}, last_viewed => {TYPE => 'DATETIME'},
query => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, query => {TYPE => 'LONGTEXT', NOTNULL => 1},
is_public => {TYPE => 'BOOLEAN', NOTNULL => 1, is_public => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'}, DEFAULT => 'FALSE'},
], ],
...@@ -1169,7 +1169,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -1169,7 +1169,7 @@ use constant ABSTRACT_SCHEMA => {
quipid => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, quipid => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1,
PRIMARYKEY => 1}, PRIMARYKEY => 1},
userid => {TYPE => 'INT3'}, userid => {TYPE => 'INT3'},
quip => {TYPE => 'TEXT', NOTNULL => 1}, quip => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
approved => {TYPE => 'BOOLEAN', NOTNULL => 1, approved => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'TRUE'}, DEFAULT => 'TRUE'},
], ],
...@@ -2475,18 +2475,16 @@ An auto-increment L</INT4> ...@@ -2475,18 +2475,16 @@ An auto-increment L</INT4>
=item C<TINYTEXT> =item C<TINYTEXT>
Variable length string of characters up to 255 (2^8 - 1) characters wide Variable length string of characters up to 255 (2^8 - 1) characters wide.
or more depending on the character set used.
=item C<MEDIUMTEXT> =item C<MEDIUMTEXT>
Variable length string of characters up to 16M (2^24 - 1) characters wide Variable length string of characters up to 4000 characters wide.
or more depending on the character set used. May be longer on some databases.
=item C<TEXT> =item C<LONGTEXT>
Variable length string of characters up to 64K (2^16 - 1) characters wide Variable length string of characters up to 16M (2^24 - 1) characters wide.
or more depending on the character set used.
=item C<LONGBLOB> =item C<LONGBLOB>
......
...@@ -81,6 +81,7 @@ use constant REVERSE_MAPPING => { ...@@ -81,6 +81,7 @@ use constant REVERSE_MAPPING => {
SMALLINT => 'INT2', SMALLINT => 'INT2',
MEDIUMINT => 'INT3', MEDIUMINT => 'INT3',
INTEGER => 'INT4', INTEGER => 'INT4',
# All the other types have the same name in their abstract version # All the other types have the same name in their abstract version
# as in their db-specific version, so no reverse mapping is needed. # as in their db-specific version, so no reverse mapping is needed.
}; };
...@@ -111,7 +112,7 @@ sub _initialize { ...@@ -111,7 +112,7 @@ sub _initialize {
TINYTEXT => 'tinytext', TINYTEXT => 'tinytext',
MEDIUMTEXT => 'mediumtext', MEDIUMTEXT => 'mediumtext',
TEXT => 'text', LONGTEXT => 'mediumtext',
LONGBLOB => 'longblob', LONGBLOB => 'longblob',
......
...@@ -75,7 +75,7 @@ sub _initialize { ...@@ -75,7 +75,7 @@ sub _initialize {
TINYTEXT => 'varchar(255)', TINYTEXT => 'varchar(255)',
MEDIUMTEXT => 'text', MEDIUMTEXT => 'text',
TEXT => 'text', LONGTEXT => 'text',
LONGBLOB => 'bytea', LONGBLOB => 'bytea',
......
...@@ -24,7 +24,7 @@ use strict; ...@@ -24,7 +24,7 @@ use strict;
use Bugzilla::Constants; use Bugzilla::Constants;
use Bugzilla::Hook; use Bugzilla::Hook;
use Bugzilla::Install::Util qw(indicate_progress); use Bugzilla::Install::Util qw(indicate_progress install_string);
use Bugzilla::Util; use Bugzilla::Util;
use Bugzilla::Series; use Bugzilla::Series;
...@@ -483,7 +483,7 @@ sub update_table_definitions { ...@@ -483,7 +483,7 @@ sub update_table_definitions {
$dbh->bz_add_column('setting', 'subclass', {TYPE => 'varchar(32)'}); $dbh->bz_add_column('setting', 'subclass', {TYPE => 'varchar(32)'});
$dbh->bz_alter_column('longdescs', 'thetext', $dbh->bz_alter_column('longdescs', 'thetext',
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 }, ''); {TYPE => 'LONGTEXT', NOTNULL => 1}, '');
# 2006-10-20 LpSolit@gmail.com - Bug 189627 # 2006-10-20 LpSolit@gmail.com - Bug 189627
$dbh->bz_add_column('group_control_map', 'editcomponents', $dbh->bz_add_column('group_control_map', 'editcomponents',
...@@ -514,6 +514,9 @@ sub update_table_definitions { ...@@ -514,6 +514,9 @@ sub update_table_definitions {
# 2007-08-21 wurblzap@gmail.com - Bug 365378 # 2007-08-21 wurblzap@gmail.com - Bug 365378
_make_lang_setting_dynamic(); _make_lang_setting_dynamic();
# 2007-11-29 xiaoou.wu@oracle.com - Bug 153129
change_text_types();
# 2007-09-09 LpSolit@gmail.com - Bug 99215 # 2007-09-09 LpSolit@gmail.com - Bug 99215
_fix_attachment_modification_date(); _fix_attachment_modification_date();
...@@ -2930,6 +2933,62 @@ sub _fix_attachment_modification_date { ...@@ -2930,6 +2933,62 @@ sub _fix_attachment_modification_date {
[qw(modification_time)]); [qw(modification_time)]);
} }
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);
$dbh->bz_alter_column('bugs', 'bug_file_loc',
{ TYPE => 'MEDIUMTEXT'});
$dbh->bz_alter_column('longdescs', 'thetext',
{ TYPE => 'LONGTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('attachments', 'description',
{ TYPE => 'TINYTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('attachments', 'mimetype',
{ TYPE => 'TINYTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('flagtypes', 'description',
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('fielddefs', 'description',
{ TYPE => 'TINYTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('namedqueries', 'query',
{ TYPE => 'LONGTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('groups', 'description',
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('quips', 'quip',
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('series', 'query',
{ TYPE => 'LONGTEXT', NOTNULL => 1 });
}
sub _check_content_length {
my ($table_name, $field_name, $max_length) = @_;
my $dbh = Bugzilla->dbh;
my $contents = $dbh->selectcol_arrayref(
"SELECT $field_name FROM $table_name
WHERE LENGTH($field_name) > ?", undef, $max_length);
if (@$contents) {
my @trimmed;
foreach my $item (@$contents) {
# 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);
}
}
print install_string('install_data_too_long',
{ column => $field_name,
table => $table_name,
max_length => $max_length,
data => join("\n", @trimmed) });
exit 3;
}
}
1; 1;
__END__ __END__
......
...@@ -43,6 +43,13 @@ with one command, do: ...@@ -43,6 +43,13 @@ with one command, do:
##perl## install-module.pl --all ##perl## install-module.pl --all
EOT EOT
install_data_length_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:
##data##
EOT
install_module => 'Installing ##module## version ##version##...', install_module => 'Installing ##module## version ##version##...',
module_found => "found v##ver##", module_found => "found v##ver##",
module_not_found => "not found", module_not_found => "not found",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment