loader as a schema subclass basically working (needs some cleanup and docs and whatnot)
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / Pg.pm
CommitLineData
18fca96a 1package DBIx::Class::Schema::Loader::Pg;
a78e3fed 2
3use strict;
18fca96a 4use base 'DBIx::Class::Schema::Loader::Generic';
a78e3fed 5use Carp;
6
a78e3fed 7=head1 NAME
8
18fca96a 9DBIx::Class::Schema::Loader::Pg - DBIx::Class::Schema::Loader Postgres Implementation.
a78e3fed 10
11=head1 SYNOPSIS
12
18fca96a 13 use DBIx::Class::Schema::Loader;
a78e3fed 14
18fca96a 15 # $loader is a DBIx::Class::Schema::Loader::Pg
16 my $loader = DBIx::Class::Schema::Loader->new(
a78e3fed 17 dsn => "dbi:Pg:dbname=dbname",
18 user => "postgres",
19 password => "",
20 namespace => "Data",
21 );
a78e3fed 22
23=head1 DESCRIPTION
24
18fca96a 25See L<DBIx::Class::Schema::Loader>.
a78e3fed 26
27=cut
28
29sub _db_classes {
30 return qw/DBIx::Class::PK::Auto::Pg/;
31}
32
33sub _tables {
a4a19f3c 34 my $class = shift;
35 my $dbh = $class->storage->dbh;
a78e3fed 36
37 # This is split out to avoid version parsing errors...
38 my $is_dbd_pg_gte_131 = ( $DBD::Pg::VERSION >= 1.31 );
39 my @tables = $is_dbd_pg_gte_131 ?
a4a19f3c 40 $dbh->tables( undef, $class->loader_data->{_db_schema}, "", "table", { noprefix => 1, pg_noprefix => 1 } )
a78e3fed 41 : $dbh->tables;
42
a78e3fed 43 s/"//g for @tables;
44 return @tables;
45}
46
47sub _table_info {
a4a19f3c 48 my ( $class, $table ) = @_;
49 my $dbh = $class->storage->dbh;
a78e3fed 50
a4a19f3c 51 my $sth = $dbh->column_info(undef, $class->loader_data->{_db_schema}, $table, undef);
a78e3fed 52 my @cols = map { $_->[3] } @{ $sth->fetchall_arrayref };
53 s/"//g for @cols;
54
a4a19f3c 55 my @primary = $dbh->primary_key(undef, $class->loader_data->{_db_schema}, $table);
a78e3fed 56
57 s/"//g for @primary;
58
59 return ( \@cols, \@primary );
60}
61
62=head1 SEE ALSO
63
18fca96a 64L<DBIx::Class::Schema::Loader>
a78e3fed 65
66=cut
67
681;