X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fbindtype_columns.t;h=1462d9bde952f3c74e17bb6dc9a44ac2794b6b72;hb=6ffb5be522e752ea1ad2a99d36648535fe30a43b;hp=2d9bffe20c189b6678d802aac069a0b3b7227fcf;hpb=9fdf90df36ee55e3b16dacd82ad35b12c9d4e15a;p=dbsrgits%2FDBIx-Class.git diff --git a/t/bindtype_columns.t b/t/bindtype_columns.t index 2d9bffe..1462d9b 100644 --- a/t/bindtype_columns.t +++ b/t/bindtype_columns.t @@ -7,58 +7,82 @@ use DBICTest; my ($dsn, $dbuser, $dbpass) = @ENV{map { "DBICTEST_PG_${_}" } qw/DSN USER PASS/}; -$dsn = 'dbi:Pg:dbname=postgres;host=localhost' unless $dsn; -$dbuser = 'postgres' unless $dbuser; -$dbpass = 'postgres' unless $dbpass; - plan skip_all => 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test' unless ($dsn && $dbuser); -plan tests => 3; - -DBICTest::Schema->compose_connection('PGTest' => $dsn, $dbuser, $dbpass); - -my $dbh = PGTest->schema->storage->dbh; - -$dbh->do(qq[ - - CREATE TABLE artist - ( - artistid serial NOT NULL PRIMARY KEY, - media bytea NOT NULL, - name varchar NULL - ); -],{ RaiseError => 1, PrintError => 1 }); - - -PGTest::Artist->load_components(qw/ - - PK::Auto - Core -/); - -PGTest::Artist->add_columns( - - "media", { - - data_type => "bytea", - is_nullable => 0, - }, -); - -# test primary key handling -my $big_long_string = 'abcd' x 250000; - -my $new = PGTest::Artist->create({ media => $big_long_string }); - -ok($new->artistid, "Created a blob row"); -is($new->media, $big_long_string, "Set the blob correctly."); - -my $rs = PGTest::Artist->find({artistid=>$new->artistid}); - -is($rs->get_column('media'), $big_long_string, "Created the blob correctly."); - -$dbh->do("DROP TABLE artist"); - - - +plan tests => 6; + +my $schema = DBICTest::Schema->connection($dsn, $dbuser, $dbpass, { AutoCommit => 1 }); + +my $dbh = $schema->storage->dbh; + +{ + local $SIG{__WARN__} = sub {}; + $dbh->do('DROP TABLE IF EXISTS bindtype_test'); + + # the blob/clob are for reference only, will be useful when we switch to SQLT and can test Oracle along the way + $dbh->do(qq[ + CREATE TABLE bindtype_test + ( + id serial NOT NULL PRIMARY KEY, + bytea bytea NULL, + blob bytea NULL, + clob text NULL + ); + ],{ RaiseError => 1, PrintError => 1 }); +} + +my $big_long_string = "\x00\x01\x02 abcd" x 125000; + +my $new; +# test inserting a row +{ + $new = $schema->resultset('BindType')->create({ bytea => $big_long_string }); + + ok($new->id, "Created a bytea row"); + is($new->bytea, $big_long_string, "Set the blob correctly."); +} + +# test retrieval of the bytea column +{ + my $row = $schema->resultset('BindType')->find({ id => $new->id }); + is($row->get_column('bytea'), $big_long_string, "Created the blob correctly."); +} + +TODO: { + local $TODO = + 'Passing bind attributes to $sth->bind_param() should be implemented (it only works in $storage->insert ATM)'; + + my $rs = $schema->resultset('BindType')->search({ bytea => $big_long_string }); + + # search on the bytea column (select) + { + my $row = $rs->first; + is($row ? $row->id : undef, $new->id, "Found the row searching on the bytea column."); + } + + # search on the bytea column (update) + { + my $new_big_long_string = $big_long_string . "2"; + $schema->txn_do(sub { + $rs->update({ bytea => $new_big_long_string }); + my $row = $schema->resultset('BindType')->find({ id => $new->id }); + is($row ? $row->get_column('bytea') : undef, $new_big_long_string, + "Updated the row correctly (searching on the bytea column)." + ); + $schema->txn_rollback; + }); + } + + # search on the bytea column (delete) + { + $schema->txn_do(sub { + $rs->delete; + my $row = $schema->resultset('BindType')->find({ id => $new->id }); + is($row, undef, "Deleted the row correctly (searching on the bytea column)."); + $schema->txn_rollback; + }); + } +} + +$dbh->do("DROP TABLE bindtype_test");