X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F71mysql.t;h=d75474e8361454f63e1425722343ca7ce87b7f25;hb=4e0a89e400d865458081bc5af9e0eedf349f60de;hp=5c5d53c9f0655961a7c9a245bbac1fb02074b61d;hpb=e0d56e264fe10386710097fd1ec62fba37179d50;p=dbsrgits%2FDBIx-Class.git diff --git a/t/71mysql.t b/t/71mysql.t index 5c5d53c..d75474e 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -1,5 +1,5 @@ use strict; -use warnings; +use warnings; use Test::More; use Test::Exception; @@ -75,6 +75,26 @@ $it->next; $it->next; is( $it->next, undef, "next past end of resultset ok" ); +# Limit with select-lock +lives_ok { + $schema->txn_do (sub { + isa_ok ( + $schema->resultset('Artist')->find({artistid => 1}, {for => 'update', rows => 1}), + 'DBICTest::Schema::Artist', + ); + }); +} 'Limited FOR UPDATE select works'; + +# shared-lock +lives_ok { + $schema->txn_do (sub { + isa_ok ( + $schema->resultset('Artist')->find({artistid => 1}, {for => 'shared'}), + 'DBICTest::Schema::Artist', + ); + }); +} 'LOCK IN SHARE MODE select works'; + my $test_type_info = { 'artistid' => { 'data_type' => 'INT', @@ -194,6 +214,29 @@ lives_ok { $cd->set_producers ([ $producer ]) } 'set_relationship doesnt die'; ); } +{ + # Test support for straight joins + my $cdsrc = $schema->source('CD'); + my $artrel_info = $cdsrc->relationship_info ('artist'); + $cdsrc->add_relationship( + 'straight_artist', + $artrel_info->{class}, + $artrel_info->{cond}, + { %{$artrel_info->{attrs}}, join_type => 'straight' }, + ); + is_same_sql_bind ( + $cdsrc->resultset->search({}, { prefetch => 'straight_artist' })->as_query, + '( + SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track, + straight_artist.artistid, straight_artist.name, straight_artist.rank, straight_artist.charfield + FROM cd me + STRAIGHT_JOIN artist straight_artist ON straight_artist.artistid = me.artist + )', + [], + 'straight joins correctly supported for mysql' + ); +} + ## Can we properly deal with the null search problem? ## ## Only way is to do a SET SQL_AUTO_IS_NULL = 0; on connect @@ -225,6 +268,34 @@ NULLINSEARCH: { => 'Nothing Found!'; } +# check for proper grouped counts +{ + my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { + on_connect_call => 'set_strict_mode', + quote_char => '`', + }); + my $rs = $ansi_schema->resultset('CD'); + + my $years; + $years->{$_->year|| scalar keys %$years}++ for $rs->all; # NULL != NULL, thus the keys eval + + lives_ok ( sub { + is ( + $rs->search ({}, { group_by => 'year'})->count, + scalar keys %$years, + 'grouped count correct', + ); + }, 'Grouped count does not throw'); + + lives_ok( sub { + $ansi_schema->resultset('Owners')->search({}, { + join => 'books', group_by => [ 'me.id', 'books.id' ] + })->count(); + }, 'count on grouped columns with the same name does not throw'); + + +} + ZEROINSEARCH: { my $cds_per_year = { 2001 => 2, @@ -243,11 +314,11 @@ ZEROINSEARCH: { is ($rs->count, 6, 'CDs created successfully'); $rs = $rs->search ({}, { - select => [ {year => 'year'} ], as => ['y'], distinct => 1, order_by => 'year', + select => [ \ 'YEAR(year)' ], as => ['y'], distinct => 1, }); is_deeply ( - [ $rs->get_column ('y')->all ], + [ sort ($rs->get_column ('y')->all) ], [ sort keys %$cds_per_year ], 'Years group successfully', ); @@ -255,7 +326,7 @@ ZEROINSEARCH: { $rs->create ({ artist => 1, year => '0-1-1', title => 'Jesus Rap' }); is_deeply ( - [ $rs->get_column ('y')->all ], + [ sort $rs->get_column ('y')->all ], [ 0, sort keys %$cds_per_year ], 'Zero-year groups successfully', ); @@ -280,6 +351,6 @@ ZEROINSEARCH: { my $schema2 = DBICTest::Schema->connect($dsn, $user, $pass); $schema2->resultset("Artist")->find(4); -isa_ok($schema2->storage->sql_maker, 'DBIx::Class::SQLAHacks::MySQL'); +isa_ok($schema2->storage->sql_maker, 'DBIx::Class::SQLMaker::MySQL'); done_testing;