From: Rafael Kitover Date: Sat, 2 Jan 2010 16:12:37 +0000 (+0000) Subject: fix up VARBIT for postgres too, that's all the varying types except NUMERIC X-Git-Tag: 0.04999_13~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=afb4c5bc18ef7da2ae6a1688bc1ac218943d550b;p=dbsrgits%2FDBIx-Class-Schema-Loader.git fix up VARBIT for postgres too, that's all the varying types except NUMERIC --- diff --git a/Changes b/Changes index 5eb9d70..d9f5dcd 100644 --- a/Changes +++ b/Changes @@ -1,7 +1,7 @@ Revision history for Perl extension DBIx::Class::Schema::Loader - - exclude 'size' column_info for postgres when unnecessary, correct - datetime_precision in 'size' for time|timestamp|interval types + - exclude 'size' column_info for postgres when unnecessary, and + use the correct precision for varying types (except NUMERIC) - 'naming' attribute and backward compatibility with 0.04006 (in progress) - added relationship_attrs option for setting attributes in diff --git a/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm b/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm index d198a15..517a7de 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Pg.pm @@ -123,7 +123,7 @@ sub _column_comment { } # Make sure data_type's that don't need it don't have a 'size' column_info, and -# set the correct precision for datetime types. +# set the correct precision for datetime and varbit types. sub _columns_info_for { my $self = shift; my ($table) = @_; @@ -138,9 +138,8 @@ sub _columns_info_for { /^(?:bigint|int8|bigserial|serial8|bit|boolean|bool|box|bytea|cidr|circle|date|double precision|float8|inet|integer|int|int4|line|lseg|macaddr|money|path|point|polygon|real|float4|smallint|int2|serial|serial4|text)\z/i) { delete $result->{$col}{size}; } - - # for datetime types, check if it has a precision or not - if ($data_type =~ /^(?:interval|time|timestamp)\b/) { +# for datetime types, check if it has a precision or not + elsif ($data_type =~ /^(?:interval|time|timestamp)\b/) { my ($precision) = $self->schema->storage->dbh ->selectrow_array(<{$col}{size} = $precision; } } + elsif ($data_type =~ /^(?:bit varying|varbit)\z/i) { + my ($precision) = $self->schema->storage->dbh + ->selectrow_array(<{$col}{size} = $precision; + } } return $result; diff --git a/t/12pg_common.t b/t/12pg_common.t index bf1775c..74a6784 100644 --- a/t/12pg_common.t +++ b/t/12pg_common.t @@ -38,7 +38,6 @@ my $tester = dbixcsl_common_tests->new( a_bigserial BIGSERIAL, a_serial8 SERIAL8, a_bit BIT, - a_bit_varying_with_precision BIT VARYING(8), a_boolean BOOLEAN, a_bool BOOL, a_box BOX, @@ -79,12 +78,20 @@ my $tester = dbixcsl_common_tests->new( a_timestamp_without_time_zone TIMESTAMP WITHOUT TIME ZONE, a_timestamp_without_time_zone_with_precision TIMESTAMP(2) WITHOUT TIME ZONE, a_timestamp_with_time_zone TIMESTAMP WITH TIME ZONE, - a_timestamp_with_time_zone_with_precision TIMESTAMP(2) WITH TIME ZONE + a_timestamp_with_time_zone_with_precision TIMESTAMP(2) WITH TIME ZONE, + a_bit_varying_with_precision BIT VARYING(2), + a_varbit_with_precision VARBIT(2), + a_character_varying_with_precision CHARACTER VARYING(2), + a_varchar_with_precision VARCHAR(2), + a_character_with_precision CHARACTER(2), + a_char_with_precision CHAR(2) ) }, +# XXX figure out what to do with DECIMAL(precision, scale) aka +# NUMERIC(precision, scale) ], drop => [ qw/ pg_loader_test1 pg_loader_test2 / ], - count => 49, + count => 54, run => sub { my ($schema, $monikers, $classes) = @_; @@ -103,7 +110,7 @@ my $tester = dbixcsl_common_tests->new( 'column comment and attrs'; my $rsrc = $schema->resultset('PgLoaderTest2')->result_source; - my @type_columns = grep !/^id\z/, $rsrc->columns; + my @type_columns = grep $_ ne 'id', $rsrc->columns; my @without_precision = grep !/_with_precision\z/, @type_columns; my @with_precision = grep /_with_precision\z/, @type_columns; my %with_precision; @@ -124,9 +131,10 @@ my $tester = dbixcsl_common_tests->new( for my $col (@with_precision) { my ($data_type) = $col =~ /^an?_(.*)_with_precision\z/; ($data_type = uc $data_type) =~ s/_/ /g; + my $size = $rsrc->column_info($col)->{size}; - ok($rsrc->column_info($col)->{size}, - "$data_type with precision has a 'size' column_info"); + is $size, 2, + "$data_type with precision has a correct 'size' column_info"; } }, },