From: Rafael Kitover Date: Wed, 3 Feb 2010 12:21:37 +0000 (+0000) Subject: test DT inflation for Sybase SQL Anywhere over ODBC too X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5be953ff3103bb583a07ed11d9dbbd34cf09c173;p=dbsrgits%2FDBIx-Class-Historic.git test DT inflation for Sybase SQL Anywhere over ODBC too --- diff --git a/Makefile.PL b/Makefile.PL index 4db29cc..0dcb502 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -123,6 +123,11 @@ my %force_requires_if_author = ( 'DateTime::Format::Sybase' => 0, ) : () , + grep $_, @ENV{qw/DBICTEST_SYBASE_ASA_DSN DBICTEST_SYBASE_ASA_ODBC_DSN/} + ? ( + 'DateTime::Format::Strptime' => 0, + ) : () + , ); #************************************************************************# # Make ABSOLUTELY SURE that nothing on the list above is a real require, # diff --git a/t/inflate/datetime_sybase_asa.t b/t/inflate/datetime_sybase_asa.t index d027c47..5a20da0 100644 --- a/t/inflate/datetime_sybase_asa.t +++ b/t/inflate/datetime_sybase_asa.t @@ -6,12 +6,15 @@ use Test::Exception; use lib qw(t/lib); use DBICTest; -my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_SYBASE_ASA_${_}" } qw/DSN USER PASS/}; +my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_SYBASE_ASA_${_}" } qw/DSN USER PASS/}; +my ($dsn2, $user2, $pass2) = @ENV{map { "DBICTEST_SYBASE_ASA_ODBC_${_}" } qw/DSN USER PASS/}; -if (not $dsn) { - plan skip_all => - 'Set $ENV{DBICTEST_SYBASE_ASA_DSN}, _USER and _PASS to run this test' . - "\nWarning: This test drops and creates a table called 'track'"; +if (not ($dsn || $dsn2)) { + plan skip_all => <<'EOF'; +Set $ENV{DBICTEST_SYBASE_ASA_DSN} and/or $ENV{DBICTEST_SYBASE_ASA_ODBC_DSN} +_USER and _PASS to run this test'. +Warning: This test drops and creates a table called 'track'"; +EOF } else { eval "use DateTime; use DateTime::Format::Strptime;"; if ($@) { @@ -19,52 +22,65 @@ if (not $dsn) { } } -my $schema; +my @info = ( + [ $dsn, $user, $pass ], + [ $dsn2, $user2, $pass2 ], +); + +my @handles_to_clean; + +foreach my $info (@info) { + my ($dsn, $user, $pass) = @$info; -$schema = DBICTest::Schema->clone; + next unless $dsn; -$schema->connection($dsn, $user, $pass, { - on_connect_call => [ 'datetime_setup' ], -}); + my $schema = DBICTest::Schema->clone; + + $schema->connection($dsn, $user, $pass, { + on_connect_call => [ 'datetime_setup' ], + }); + + push @handles_to_clean, $schema->storage->dbh; # coltype, col, date -my @dt_types = ( - ['TIMESTAMP', 'last_updated_at', '2004-08-21 14:36:48.080444'], + my @dt_types = ( + ['TIMESTAMP', 'last_updated_at', '2004-08-21 14:36:48.080444'], # date only (but minute precision according to ASA docs) - ['DATE', 'small_dt', '2004-08-21 00:00:00.000000'], -); + ['DATE', 'small_dt', '2004-08-21 00:00:00.000000'], + ); + + for my $dt_type (@dt_types) { + my ($type, $col, $sample_dt) = @$dt_type; -for my $dt_type (@dt_types) { - my ($type, $col, $sample_dt) = @$dt_type; - - eval { $schema->storage->dbh->do("DROP TABLE track") }; - $schema->storage->dbh->do(<<"SQL"); -CREATE TABLE track ( - trackid INT IDENTITY PRIMARY KEY, - cd INT, - position INT, - $col $type, -) + eval { $schema->storage->dbh->do("DROP TABLE track") }; + $schema->storage->dbh->do(<<"SQL"); + CREATE TABLE track ( + trackid INT IDENTITY PRIMARY KEY, + cd INT, + position INT, + $col $type, + ) SQL - ok(my $dt = $schema->storage->datetime_parser->parse_datetime($sample_dt)); - - my $row; - ok( $row = $schema->resultset('Track')->create({ - $col => $dt, - cd => 1, - })); - ok( $row = $schema->resultset('Track') - ->search({ trackid => $row->trackid }, { select => [$col] }) - ->first - ); - is( $row->$col, $dt, 'DateTime roundtrip' ); + ok(my $dt = $schema->storage->datetime_parser->parse_datetime($sample_dt)); + + my $row; + ok( $row = $schema->resultset('Track')->create({ + $col => $dt, + cd => 1, + })); + ok( $row = $schema->resultset('Track') + ->search({ trackid => $row->trackid }, { select => [$col] }) + ->first + ); + is( $row->$col, $dt, 'DateTime roundtrip' ); + } } done_testing; # clean up our mess END { - if (my $dbh = eval { $schema->storage->_dbh }) { - $dbh->do('DROP TABLE track'); + foreach my $dbh (@handles_to_clean) { + eval { $dbh->do("DROP TABLE $_") } for qw/track/; } }