clean up Pg enum code
Rafael Kitover [Sun, 5 Dec 2010 14:16:44 +0000 (09:16 -0500)]
lib/DBIx/Class/Schema/Loader/DBI/Pg.pm
t/12pg_common.t

index 529be87..d61d8d0 100644 (file)
@@ -232,11 +232,27 @@ FROM pg_catalog.pg_type
 WHERE typname = ?
 EOF
             if ($typetype eq 'e') {
+                # The following will extract a list of allowed values for the
+                # enum.
+                my $typevalues = $self->schema->storage->dbh
+                    ->selectall_arrayref(<<EOF, {}, $info->{data_type});
+SELECT e.enumlabel
+FROM pg_catalog.pg_enum e
+JOIN pg_catalog.pg_type t ON t.oid = e.enumtypid
+WHERE t.typname = ?
+EOF
+
+                $info->{extra}{list} = [ map { $_->[0] } @$typevalues ];
+
+                # Store its original name in extra for SQLT to pick up.
+                $info->{extra}{custom_type_name} = $info->{data_type};
+
                 $info->{data_type} = 'enum';
+                
+                delete $info->{size};
             }
         }
 
-
 # process SERIAL columns
         if (ref($info->{default_value}) eq 'SCALAR' && ${ $info->{default_value} } =~ /\bnextval\(['"]([.\w]+)/i) {
             $info->{is_auto_increment} = 1;
@@ -257,30 +273,6 @@ EOF
     return $result;
 }
 
-sub _extra_column_info {
-    my ($self, $table, $col, $info, $dbi_info) = @_;
-    my %extra_info;
-
-    # The following will extract a list of allowed values if this
-    # is an enumerated type. Otherwise, no results and we do nothing.
-    my $typevalues = $self->schema->storage->dbh
-        ->selectall_arrayref(<<EOF, {}, $info->{data_type});
-SELECT e.enumlabel
-FROM pg_catalog.pg_enum e
-JOIN pg_catalog.pg_type t ON t.oid = e.enumtypid
-WHERE t.typname = ?
-EOF
-
-    if (@$typevalues) {
-        # This is an enum type. Store its original name in extra for SQLT to pick up.
-        $extra_info{extra}{list} = [ map { $_->[0] } @$typevalues ];
-        $extra_info{extra}{custom_type_name} = $info->{data_type};
-    }
-
-    return \%extra_info;
-}
-
-
 =head1 SEE ALSO
 
 L<DBIx::Class::Schema::Loader>, L<DBIx::Class::Schema::Loader::Base>,
index 3bc7281..a74bd0d 100644 (file)
@@ -115,7 +115,7 @@ my $tester = dbixcsl_common_tests->new(
 
         # Enum Types
         pg_loader_test_enum => { data_type => 'enum', extra => { custom_type_name => 'pg_loader_test_enum',
-                                                                 list => [ qw/foo bar baz/] }, size => 4 },
+                                                                 list => [ qw/foo bar baz/] } },
     },
     pre_create => [
         q{