X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F64db.t;h=14ad6e0f130e26546beb4577ce6f2846729eacef;hb=c9304c0522f5cc186066acd3fba3437f3734f33c;hp=5208614fecdaccc6aff5a54171f97db6b970f0ba;hpb=d6915f449e2d68ac184d6bc616043fd605913757;p=dbsrgits%2FDBIx-Class.git diff --git a/t/64db.t b/t/64db.t index 5208614..14ad6e0 100644 --- a/t/64db.t +++ b/t/64db.t @@ -5,9 +5,9 @@ use Test::More; use lib qw(t/lib); use DBICTest; -my $schema = DBICTest::init_schema(); +my $schema = DBICTest->init_schema(); -plan tests => 3; +plan tests => 4; # add some rows inside a transaction and commit it # XXX: Is storage->dbh the only way to get a dbh? @@ -34,23 +34,69 @@ $schema->storage->txn_rollback; ($artist) = $schema->resultset("Artist")->search( artistid => 25 ); is($artist, undef, "Rollback ok"); -my $type_info = $schema->storage->columns_info_for('artist'); - -# I know this is gross but SQLite reports the size differently from release -# to release. At least this way the test still passes. +is_deeply ( + get_storage_column_info ($schema->storage, 'collection', qw/size is_nullable/), + { + collectionid => { + data_type => 'INTEGER', + }, + name => { + data_type => 'varchar', + }, + }, + 'Correctly retrieve column info (no size or is_nullable)' +); -delete $type_info->{artistid}{size}; -delete $type_info->{name}{size}; +TODO: { + local $TODO = 'All current versions of SQLite seem to mis-report is_nullable'; -my $test_type_info = { - 'artistid' => { - 'data_type' => 'INTEGER', - 'is_nullable' => 0, - }, - 'name' => { - 'data_type' => 'varchar', - 'is_nullable' => 0, + is_deeply ( + get_storage_column_info ($schema->storage, 'artist', qw/size/), + { + 'artistid' => { + 'data_type' => 'INTEGER', + 'is_nullable' => 0, + }, + 'name' => { + 'data_type' => 'varchar', + 'is_nullable' => 1, + }, + 'rank' => { + 'data_type' => 'integer', + 'is_nullable' => 0, + 'default_value' => '13', + }, + 'charfield' => { + 'data_type' => 'char', + 'is_nullable' => 1, + }, }, + 'Correctly retrieve column info (mixed null and non-null columns)' + ); }; -is_deeply($type_info, $test_type_info, 'columns_info_for - column data types'); + +# Depending on test we need to strip away certain column info. +# - SQLite is known to report the size differently from release to release +# - Current DBD::SQLite versions do not implement NULLABLE +# - Some SQLite releases report stuff that isn't there as undef + +sub get_storage_column_info { + my ($storage, $table, @ignore) = @_; + + my $type_info = $storage->columns_info_for($table); + + for my $col (keys %$type_info) { + for my $type (keys %{$type_info->{$col}}) { + if ( + grep { $type eq $_ } (@ignore) + or + not defined $type_info->{$col}{$type} + ) { + delete $type_info->{$col}{$type}; + } + } + } + + return $type_info; +}