From: Rafael Kitover Date: Tue, 2 Feb 2010 14:15:44 +0000 (+0000) Subject: fix stupid identity bug, test empty insert (works), test DTs (not working yet) X-Git-Tag: v0.08116~14^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ed720bc5bef8e8497ef8c3a56efc55143a6bd465;p=dbsrgits%2FDBIx-Class.git fix stupid identity bug, test empty insert (works), test DTs (not working yet) --- diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/ASA.pm b/lib/DBIx/Class/Storage/DBI/Sybase/ASA.pm index 59c9ae9..3e78845 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/ASA.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/ASA.pm @@ -38,9 +38,11 @@ sub insert { ? 1 : 0; - if (not $is_identity_insert) { - my ($identity_col) = grep $source->column_info($_)->{is_auto_increment}, - $source->columns; + my $identity_col = List::Util::first { + $source->column_info($_)->{is_auto_increment} + } $source->columns; + + if ((not $is_identity_insert) && $identity_col) { my $dbh = $self->_get_dbh; my $table_name = $source->from; $table_name = $$table_name if ref $table_name; diff --git a/t/749sybase_asa.t b/t/749sybase_asa.t index 9731985..2424d3b 100644 --- a/t/749sybase_asa.t +++ b/t/749sybase_asa.t @@ -19,7 +19,14 @@ my $dbh = $schema->storage->dbh; eval { $dbh->do("DROP TABLE artist") }; -$dbh->do("CREATE TABLE artist (artistid INT IDENTITY PRIMARY KEY, name VARCHAR(255), charfield CHAR(10), rank INT DEFAULT 13)"); +$dbh->do(<resultset('Artist'); is ( $ars->count, 0, 'No rows at first' ); @@ -72,6 +79,14 @@ is( $lim->next->artistid, 101, "iterator->next ok" ); is( $lim->next->artistid, 102, "iterator->next ok" ); is( $lim->next, undef, "next past end of resultset ok" ); +# test empty insert +{ + local $ars->result_source->column_info('artistid')->{is_auto_increment} = 0; + + lives_ok { $ars->create({}) } + 'empty insert works'; +} + # test blobs (stolen from 73oracle.t) eval { $dbh->do('DROP TABLE bindtype_test') }; $dbh->do(qq[ @@ -97,6 +112,9 @@ foreach my $type (qw( blob clob )) { foreach my $size (qw( small large )) { $id++; +# turn off horrendous binary DBIC_TRACE output + local $schema->storage->{debug} = 0; + lives_ok { $rs->create( { 'id' => $id, $type => $binstr{$size} } ) } "inserted $size $type without dying"; @@ -108,8 +126,7 @@ done_testing; # clean up our mess END { - my $dbh = eval { $schema->storage->_dbh }; - if ($dbh) { - $dbh->do("DROP TABLE $_") for qw/artist bindtype_test/; - } + if (my $dbh = eval { $schema->storage->_dbh }) { + $dbh->do("DROP TABLE $_") for qw/artist bindtype_test/; + } } diff --git a/t/inflate/datetime_sybase_asa.t b/t/inflate/datetime_sybase_asa.t new file mode 100644 index 0000000..387b179 --- /dev/null +++ b/t/inflate/datetime_sybase_asa.t @@ -0,0 +1,71 @@ +use strict; +use warnings; + +use Test::More; +use Test::Exception; +use lib qw(t/lib); +use DBICTest; + +my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_SYBASE_ASA_${_}" } 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'"; +} else { + eval "use DateTime; use DateTime::Format::Sybase;"; + if ($@) { + plan skip_all => 'needs DateTime and DateTime::Format::Sybase for testing'; + } +} + +my $schema; + +$schema = DBICTest::Schema->clone; + +$schema->connection($dsn, $user, $pass, { + AutoCommit => 1, + on_connect_call => [ 'datetime_setup' ], +}); + +# coltype, col, date +my @dt_types = ( + ['DATETIME', 'last_updated_at', '2004-08-21T14:36:48.080Z'], +# minute precision + ['SMALLDATETIME', 'small_dt', '2004-08-21T14:36:00.000Z'], +); + +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, +) +SQL + ok(my $dt = DateTime::Format::Sybase->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'); + } +}