Change NUMERIC field type to DECIMAL(24,3)

3col
Vitaliy Filippov 2015-03-04 18:39:42 +03:00
parent 78dc6d4f6e
commit 46b762fdce
3 changed files with 50 additions and 34 deletions

View File

@ -4249,6 +4249,44 @@ sub get_string
return $value;
}
# Get attribute value in the default format
sub get_value
{
my ($self, $attr) = @_;
my $field = Bugzilla->get_field($attr);
if (defined $self->{$attr})
{
$self->{$attr} =~ s/\.?0+$//so if $field && $field->type == FIELD_TYPE_NUMERIC;
return $self->{$attr};
}
if ($attr =~ /^(.*)_obj$/s)
{
return $self->get_object($1);
}
if ($field)
{
if ($field->type == FIELD_TYPE_MULTI_SELECT)
{
$self->{$attr} ||= Bugzilla->dbh->selectcol_arrayref(
"SELECT id FROM bug_$attr, $attr WHERE value_id=id AND bug_id=? ORDER BY value",
undef, $self->id);
return $self->{$attr};
}
elsif ($field->type == FIELD_TYPE_BUG_ID_REV)
{
$self->{$attr} ||= Bugzilla->dbh->selectcol_arrayref(
"SELECT bug_id FROM bugs WHERE ".$field->value_field->name." = ".$self->id
);
return $self->{$attr};
}
}
return '';
}
# FIXME WTF this is needed for? bugzilla.dtd? maybe it should be autogenerated?
sub fields
{
@ -4314,38 +4352,7 @@ sub AUTOLOAD
}
no strict 'refs';
*$AUTOLOAD = sub
{
my $self = shift;
return $self->{$attr} if defined $self->{$attr};
if ($attr =~ /^(.*)_obj$/s)
{
return $self->get_object($1);
}
my $field = Bugzilla->get_field($attr);
if ($field)
{
if ($field->type == FIELD_TYPE_MULTI_SELECT)
{
$self->{$attr} ||= Bugzilla->dbh->selectcol_arrayref(
"SELECT id FROM bug_$attr, $attr WHERE value_id=id AND bug_id=? ORDER BY value",
undef, $self->id);
return $self->{$attr};
}
elsif ($field->type == FIELD_TYPE_BUG_ID_REV)
{
$self->{$attr} ||= Bugzilla->dbh->selectcol_arrayref(
"SELECT bug_id FROM bugs WHERE ".$field->value_field->name." = ".$self->id
);
return $self->{$attr};
}
}
return '';
};
*$AUTOLOAD = sub { $_[0]->get_value($attr) };
goto &$AUTOLOAD;
}

View File

@ -143,7 +143,7 @@ use constant SQL_DEFINITIONS => {
FIELD_TYPE_TEXTAREA, { TYPE => 'MEDIUMTEXT' },
FIELD_TYPE_DATETIME, { TYPE => 'DATETIME' },
FIELD_TYPE_BUG_ID, { TYPE => 'INT4' },
FIELD_TYPE_NUMERIC, { TYPE => 'NUMERIC', NOTNULL => 1, DEFAULT => '0' },
FIELD_TYPE_NUMERIC, { TYPE => 'DECIMAL(30,10)', NOTNULL => 1, DEFAULT => '0' },
};
# Field definitions for the fields that ship with Bugzilla.

View File

@ -855,6 +855,12 @@ WHERE description LIKE \'%[CC:%]%\'');
$dbh->bz_drop_column('flagtypes', 'cc_list');
}
# Change all NUMERIC custom fields to their actual type
for (Bugzilla->get_fields({ custom => 1, type => FIELD_TYPE_NUMERIC }))
{
$dbh->bz_alter_column('bugs', $_->name, Bugzilla::Field->SQL_DEFINITIONS->{FIELD_TYPE_NUMERIC()});
}
_move_old_defaults($old_params);
################################################################
@ -4098,7 +4104,10 @@ sub _change_select_fields_to_ids
print "Replacing 'unspecified' versions with NULL\n";
my $id = Bugzilla->get_field('version')->id;
$dbh->do("UPDATE bugs b SET version=NULL WHERE b.version IN (SELECT v.id FROM versions v WHERE v.value='unspecified')");
$dbh->do("UPDATE components c SET default_version=NULL WHERE c.default_version IN (SELECT v.id FROM versions v WHERE v.value='unspecified')");
if ($dbh->bz_column_info('components', 'default_version'))
{
$dbh->do("UPDATE components c SET default_version=NULL WHERE c.default_version IN (SELECT v.id FROM versions v WHERE v.value='unspecified')");
}
$dbh->do("UPDATE fielddefs SET is_mandatory=0 WHERE name='version'");
$dbh->do(
"DELETE FROM fieldvaluecontrol WHERE (field_id, value_id, visibility_value_id) IN ".