X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2Fmysql.pm;h=5d9cd2e760ff95b0aa18464142eb2a63a4690076;hb=26334ec166bf25d77c0342c85efebe853303ff41;hp=b649ef974f3072d2cba005c705eb97a581e92b97;hpb=d05d0f449e9354c9c4f1d96952572c8864fa1079;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm index b649ef9..5d9cd2e 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm @@ -115,6 +115,58 @@ sub _table_uniq_info { return \@uniqs; } +sub _columns_info_for { + my $self = shift; + my ($table) = @_; + + my $result = $self->next::method(@_); + + my $dbh = $self->schema->storage->dbh; + + while (my ($col, $info) = each %$result) { + delete $info->{size} + unless $info->{data_type} =~ /^(?: (?:var)?(?:char(?:acter)?|binary) | bit | year)\z/ix; + + if ($info->{data_type} eq 'int') { + $info->{data_type} = 'integer'; + } + elsif ($info->{data_type} eq 'double') { + $info->{data_type} = 'double precision'; + } + + my ($precision, $scale, $column_type) = eval { $dbh->selectrow_array(<<'EOF', {}, lc $table, lc $col) }; +SELECT numeric_precision, numeric_scale, column_type +FROM information_schema.columns +WHERE lower(table_name) = ? AND lower(column_name) = ? +EOF + $column_type = '' if not defined $column_type; + + if ($info->{data_type} eq 'bit' && (not exists $info->{size})) { + $info->{size} = $precision if defined $precision; + } + elsif ($info->{data_type} =~ /^(?:float|double precision|decimal)\z/) { + if (defined $precision && defined $scale) { + if ($precision == 10 && $scale == 0) { + delete $info->{size}; + } + else { + $info->{size} = [$precision,$scale]; + } + } + } + elsif ($info->{data_type} eq 'year') { + if ($column_type =~ /\(2\)/) { + $info->{size} = 2; + } + elsif ($column_type =~ /\(4\)/ || $info->{size} == 4) { + delete $info->{size}; + } + } + } + + return $result; +} + sub _extra_column_info { no warnings 'uninitialized'; my ($self, $table, $col, $info, $dbi_info) = @_; @@ -155,3 +207,4 @@ the same terms as Perl itself. =cut 1; +# vim:et sw=4 sts=4 tw=0: