1use strict; 2use warnings; 3 4use Test::More; 5use lib qw(t/lib); 6use DBICTest; 7 8my ($dsn, $dbuser, $dbpass) = @ENV{map { "DBICTEST_PG_${_}" } qw/DSN USER PASS/}; 9 10plan skip_all => 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test' 11 unless ($dsn && $dbuser); 12 13plan tests => 6; 14 15my $schema = DBICTest::Schema->connection($dsn, $dbuser, $dbpass, { AutoCommit => 1 }); 16 17my $dbh = $schema->storage->dbh; 18 19{ 20 local $SIG{__WARN__} = sub {}; 21 $dbh->do('DROP TABLE IF EXISTS bindtype_test'); 22 23 # the blob/clob are for reference only, will be useful when we switch to SQLT and can test Oracle along the way 24 $dbh->do(qq[ 25 CREATE TABLE bindtype_test 26 ( 27 id serial NOT NULL PRIMARY KEY, 28 bytea bytea NULL, 29 blob bytea NULL, 30 clob text NULL 31 ); 32 ],{ RaiseError => 1, PrintError => 1 }); 33} 34 35my $big_long_string = "\x00\x01\x02 abcd" x 125000; 36 37my $new; 38# test inserting a row 39{ 40 $new = $schema->resultset('BindType')->create({ bytea => $big_long_string }); 41 42 ok($new->id, "Created a bytea row"); 43 is($new->bytea, $big_long_string, "Set the blob correctly."); 44} 45 46# test retrieval of the bytea column 47{ 48 my $row = $schema->resultset('BindType')->find({ id => $new->id }); 49 is($row->get_column('bytea'), $big_long_string, "Created the blob correctly."); 50} 51 52{ 53 my $rs = $schema->resultset('BindType')->search({ bytea => $big_long_string }); 54 55 # search on the bytea column (select) 56 { 57 my $row = $rs->first; 58 is($row ? $row->id : undef, $new->id, "Found the row searching on the bytea column."); 59 } 60 61 # search on the bytea column (update) 62 { 63 my $new_big_long_string = $big_long_string . "2"; 64 $schema->txn_do(sub { 65 $rs->update({ bytea => $new_big_long_string }); 66 my $row = $schema->resultset('BindType')->find({ id => $new->id }); 67 is($row ? $row->get_column('bytea') : undef, $new_big_long_string, 68 "Updated the row correctly (searching on the bytea column)." 69 ); 70 $schema->txn_rollback; 71 }); 72 } 73 74 # search on the bytea column (delete) 75 { 76 $schema->txn_do(sub { 77 $rs->delete; 78 my $row = $schema->resultset('BindType')->find({ id => $new->id }); 79 is($row, undef, "Deleted the row correctly (searching on the bytea column)."); 80 $schema->txn_rollback; 81 }); 82 } 83} 84 85$dbh->do("DROP TABLE bindtype_test"); 86