use strict; use Test::More tests => 8; use DBI; my $dbh; my $database = $ENV{DB_NAME}; my $user = $ENV{DB_USER}; my $password = $ENV{DB_PASS}; SKIP: { skip 'You need to set the DB_NAME, DB_USER and DB_PASS environment variables', 8 unless ( $database && $user ); my $dsn = "dbi:Pg:dbname=$database" if $database; $dbh = DBI->connect( $dsn, $user, $password, { AutoCommit => 1, PrintError => 0, RaiseError => 1, } ); $dbh->do(<<'SQL'); CREATE TABLE class_dbi_pg1 ( id SERIAL NOT NULL PRIMARY KEY, dat TEXT ) SQL my $sth = $dbh->prepare(<<"SQL"); INSERT INTO class_dbi_pg1 (dat) VALUES(?) SQL for my $dat (qw(foo bar baz)) { $sth->execute($dat); } $sth->finish; eval <<'' or die $@; package Class::DBI::Pg::Test; use base qw(Class::DBI::Pg); __PACKAGE__->set_db( Main => $dsn, $user, $password ); __PACKAGE__->set_up_table('class_dbi_pg1'); 1; is( Class::DBI::Pg::Test->retrieve_all, 3 ); my $obj = Class::DBI::Pg::Test->retrieve(2); is( $obj->dat, 'bar' ); my ($obj2) = Class::DBI::Pg::Test->search( dat => 'foo' ); is( $obj2->id, 1 ); like( Class::DBI::Pg::Test->sequence, qr/class_dbi_pg1_id_seq/ ); my $new_obj = Class::DBI::Pg::Test->create( { dat => 'newone' } ); is( $new_obj->id, 4 ); eval <<'' or die $@; package Class::DBI::Pg::Test2; use base qw(Class::DBI::Pg); __PACKAGE__->set_db( Main => $dsn, $user, $password ); __PACKAGE__->set_up_table('class_dbi_pg1', { ColumnGroup => 'Essential' }); 1; $obj = Class::DBI::Pg::Test2->retrieve(2); is( $obj->dat, 'bar' ); is_deeply( [ $obj->columns('Essential') ], [ qw(id dat) ] ); $dbh->do(<<'SQL'); CREATE VIEW class_dbi_pg1_v AS SELECT * FROM class_dbi_pg1 SQL eval <<'' or die $@; package Class::DBI::Pg::TestView; use base qw(Class::DBI::Pg); __PACKAGE__->set_db( Main => $dsn, $user, $password ); __PACKAGE__->set_up_table('class_dbi_pg1_v', { Primary => [ qw(id) ] }); 1; $obj = Class::DBI::Pg::TestView->retrieve(2); is( $obj->dat, 'bar' ); Class::DBI::Pg::Test->db_Main->disconnect; Class::DBI::Pg::Test2->db_Main->disconnect; Class::DBI::Pg::TestView->db_Main->disconnect; } END { if ($dbh) { eval { unless ( Class::DBI::Pg::Test->pg_version >= 7.3 ) { $dbh->do('DROP SEQUENCE class_dbi_pg1_id_seq'); } $dbh->do('DROP TABLE class_dbi_pg1 CASCADE'); }; $dbh->disconnect; } }