Open Bug 505362 Opened 15 years ago Updated 11 years ago

Bugzilla::DB::Schema->_adjust_schema should support overriding the use of varchar

Categories

(Bugzilla :: Database, defect)

defect
Not set
normal

Tracking

()

ASSIGNED

People

(Reporter: mockodin, Assigned: mockodin)

References

(Blocks 1 open bug)

Details

Attachments

(1 file)

Issue:
Bugzilla::DB::Schema->_adjust_schema should allow varchar data types to be overwritten by DB specific data types when added to the db_specific hash.

Such as:
varchar => 'nvarchar'

Result:
All 'varchar' db fields still create as varchar datatype

expected:

fields created with nvarchar data type

For those wondering, nvarchar was improved as of ms sql 2005
http://msdn.microsoft.com/en-us/library/ms186939.aspx
This request is to support porting of Bugzilla to MSSQL.

MSSQL does not natively support UTF8/UTF-8 but will however support it perfectly fine when using a nvarchar data type to store it.

Within my environment this is how I make it work, I can and will put this within Bugzilla::DB::Schema::Mssql but would like it to be in the base class where it belongs.

sub _adjust_schema {

    my $self = shift;

    my $db_specific = $self->{db_specific};

    # Loop over each table in the abstract database schema.
    foreach my $table (keys %{ $self->{schema} }) {
        my %fields = (@{ $self->{schema}{$table}{FIELDS} });
        # Loop over the field definitions in each table.
        foreach my $field_def (values %fields) {
	    # Find the data type, allows for (xyz) in {TYPE}
            # making sure to match from the beginning of the string
            $field_def->{TYPE} =~ m/^(\w*)/;
	    my $datatype = $1 if $1;

            # If the field type is an abstract data type defined in the
            # $db_specific hash, replace it with the DBMS-specific data type
            # that implements it.
            if (exists($db_specific->{$datatype})) {
                $field_def->{TYPE} =~ s/^$datatype/$db_specific->{$datatype}/;
            }

            # Replace abstract default values (such as 'TRUE' and 'FALSE')
            # with their database-specific implementations.
            if (exists($field_def->{DEFAULT})
                && exists($db_specific->{$field_def->{DEFAULT}})) {
                $field_def->{DEFAULT} = $db_specific->{$field_def->{DEFAULT}};
            }
        }
    }

    return $self;

}
Blocks: bz-mssql
Attached patch Patch v1Splinter Review
Attachment #390538 - Flags: review?(mkanat)
Assignee: database → mockodin
Status: NEW → ASSIGNED
Comment on attachment 390538 [details] [diff] [review]
Patch v1

Instead of this, it might be good to make VARCHAR one of our standard abstract types. This would require incrementing DB::Schema::VERSION I believe.

We could have a separate SIZE => element, perhaps, for columns.
Attachment #390538 - Flags: review?(mkanat) → review-
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: