[Bast-commits] r6380 - in DBIx-Class/0.08/trunk: lib/DBIx/Class
lib/DBIx/Class/Storage/DBI t
caelum at dev.catalyst.perl.org
caelum at dev.catalyst.perl.org
Sat May 23 14:45:00 GMT 2009
Author: caelum
Date: 2009-05-23 14:44:59 +0000 (Sat, 23 May 2009)
New Revision: 6380
Added:
DBIx-Class/0.08/trunk/t/746sybase.t
Modified:
DBIx-Class/0.08/trunk/lib/DBIx/Class/SQLAHacks.pm
DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Sybase.pm
Log:
Sybase autopk, and a test, no limit support yet
Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/SQLAHacks.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/SQLAHacks.pm 2009-05-23 08:09:46 UTC (rev 6379)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/SQLAHacks.pm 2009-05-23 14:44:59 UTC (rev 6380)
@@ -105,8 +105,10 @@
# RowNumberOver is still needed here (should be part of SQLA) leave the
# code in place
my $dbhname = blessed($syntax) ? $syntax->{Driver}{Name} : $syntax;
- if(ref($self) && $dbhname && $dbhname eq 'DB2') {
- return 'RowNumberOver';
+ if(ref($self) && $dbhname) {
+ if ($dbhname eq 'DB2') {
+ return 'RowNumberOver';
+ }
}
$self->{_cached_syntax} ||= $self->SUPER::_find_syntax($syntax);
Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Sybase.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Sybase.pm 2009-05-23 08:09:46 UTC (rev 6379)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Sybase.pm 2009-05-23 14:44:59 UTC (rev 6380)
@@ -19,6 +19,12 @@
}
}
+sub _dbh_last_insert_id {
+ my $self = shift;
+ my $sth = $self->_dbh->prepare_cached('select @@identity');
+ ($self->_dbh->selectrow_array($sth))[0];
+}
+
1;
=head1 NAME
Added: DBIx-Class/0.08/trunk/t/746sybase.t
===================================================================
--- DBIx-Class/0.08/trunk/t/746sybase.t (rev 0)
+++ DBIx-Class/0.08/trunk/t/746sybase.t 2009-05-23 14:44:59 UTC (rev 6380)
@@ -0,0 +1,82 @@
+use strict;
+use warnings;
+
+use Test::More;
+use lib qw(t/lib);
+use DBICTest;
+
+my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_SYBASE_${_}" } qw/DSN USER PASS/};
+
+plan skip_all => 'Set $ENV{DBICTEST_SYBASE_DSN}, _USER and _PASS to run this test'
+ unless ($dsn && $user);
+
+plan tests => 12;
+
+my $schema = DBICTest::Schema->connect($dsn, $user, $pass, {AutoCommit => 1});
+
+$schema->storage->ensure_connected;
+isa_ok( $schema->storage, 'DBIx::Class::Storage::DBI::Sybase' );
+
+$schema->storage->dbh_do (sub {
+ my ($storage, $dbh) = @_;
+ eval { $dbh->do("DROP TABLE artist") };
+ $dbh->do(<<'SQL');
+
+CREATE TABLE artist (
+ artistid INT IDENTITY NOT NULL,
+ name VARCHAR(100),
+ rank INT DEFAULT 13 NOT NULL,
+ charfield CHAR(10) NULL,
+ primary key(artistid)
+)
+
+SQL
+
+});
+
+my %seen_id;
+
+# fresh $schema so we start unconnected
+$schema = DBICTest::Schema->connect($dsn, $user, $pass, {AutoCommit => 1});
+
+# test primary key handling
+my $new = $schema->resultset('Artist')->create({ name => 'foo' });
+ok($new->artistid > 0, "Auto-PK worked");
+
+$seen_id{$new->artistid}++;
+
+# test LIMIT support
+for (1..6) {
+ $new = $schema->resultset('Artist')->create({ name => 'Artist ' . $_ });
+ is ( $seen_id{$new->artistid}, undef, "id for Artist $_ is unique" );
+ $seen_id{$new->artistid}++;
+}
+
+my $it;
+
+$it = $schema->resultset('Artist')->search( {}, {
+ rows => 3,
+ order_by => 'artistid',
+});
+
+TODO: {
+ local $TODO = 'Sybase is very very fucked in the limit department';
+
+ is( $it->count, 3, "LIMIT count ok" );
+}
+
+# The iterator still works correctly with rows => 3, even though the sql is
+# fucked, very interesting.
+
+is( $it->next->name, "foo", "iterator->next ok" );
+$it->next;
+is( $it->next->name, "Artist 2", "iterator->next ok" );
+is( $it->next, undef, "next past end of resultset ok" );
+
+
+# clean up our mess
+END {
+ my $dbh = eval { $schema->storage->_dbh };
+ $dbh->do('DROP TABLE artist') if $dbh;
+}
+
More information about the Bast-commits
mailing list