use strict; use Test::More tests => 9; use lib("t/lib"); use Class::DBI::Loader; use DBI; my $dbh; my $database = $ENV{PG_NAME}; my $user = $ENV{PG_USER}; my $password = $ENV{PG_PASS}; SKIP: { eval { require Class::DBI::Pg; }; skip "Class::DBI::Pg is not installed", 9 if $@; skip 'You need to set the PG_NAME, PG_USER and PG_PASS environment variables', 9 unless ( $database && $user ); my $dsn = "dbi:Pg:dbname=$database"; $dbh = DBI->connect( $dsn, $user, $password, { RaiseError => 1, PrintError => 1, AutoCommit => 1 } ); $dbh->do(<<'SQL'); CREATE TABLE loader_test1 ( id SERIAL NOT NULL PRIMARY KEY , dat TEXT ) SQL my $sth = $dbh->prepare(<<"SQL"); INSERT INTO loader_test1 (dat) VALUES(?) SQL for my $dat (qw(foo bar baz)) { $sth->execute($dat); $sth->finish; } $dbh->do(<<'SQL'); CREATE TABLE loader_test2 ( id SERIAL NOT NULL PRIMARY KEY, dat TEXT ) SQL $sth = $dbh->prepare(<<"SQL"); INSERT INTO loader_test2 (dat) VALUES(?) SQL for my $dat (qw(aaa bbb ccc ddd)) { $sth->execute($dat); $sth->finish; } my $loader = Class::DBI::Loader->new( dsn => $dsn, user => $user, password => $password, namespace => 'PgTest', constraint => '^loader_test.*', additional_base_classes => [ qw(LoaderBase) ], left_base_classes => [ qw(LoaderLeft) ] ); is( $loader->find_class("loader_test1"), "PgTest::LoaderTest1" ); is( $loader->find_class("loader_test2"), "PgTest::LoaderTest2" ); my $class1 = $loader->find_class("loader_test1"); { no strict 'refs'; is(${"${class1}::ISA"}[0], 'LoaderLeft'); } my $obj = $class1->retrieve(1); is( $obj->id, 1 ); is( $obj->dat, "foo" ); isa_ok($obj, 'LoaderBase'); isa_ok($obj, 'LoaderLeft'); my $class2 = $loader->find_class("loader_test2"); is( $class2->retrieve_all, 4 ); my ($obj2) = $class2->search( dat => 'bbb' ); is( $obj2->id, 2 ); $class1->db_Main->disconnect; $class2->db_Main->disconnect; } END { if ($dbh) { $dbh->do("DROP TABLE loader_test1"); $dbh->do("DROP TABLE loader_test2"); $dbh->disconnect; } }