X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F71mysql.t;h=2e54352923b4fd77735b05d4a769841e2ea66f77;hb=people%2Filmari%2Fset-constraints-deffered-component;hp=58a56698a08d723c8ba99e4dc9bf03407b508dc9;hpb=9acb695654aab4da00bfeea78d8af868649d5e3d;p=dbsrgits%2FDBIx-Class.git diff --git a/t/71mysql.t b/t/71mysql.t index 58a5669..2e54352 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -3,6 +3,7 @@ use warnings; use Test::More; use Test::Exception; +use Test::Warn; use DBI::Const::GetInfoType; use Scalar::Util qw/weaken/; @@ -10,7 +11,6 @@ use DBIx::Class::Optional::Dependencies (); use lib qw(t/lib); use DBICTest; -use DBIC::SqlMakerTest; plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_rdbms_mysql') unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_rdbms_mysql'); @@ -20,7 +20,7 @@ my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MYSQL_${_}" } qw/DSN USER PASS/}; plan skip_all => 'Set $ENV{DBICTEST_MYSQL_DSN}, _USER and _PASS to run this test' unless ($dsn && $user); -my $schema = DBICTest::Schema->connect($dsn, $user, $pass, { quote_names => 1 }); +my $schema = DBICTest->connect_schema($dsn, $user, $pass, { quote_names => 1 }); my $dbh = $schema->storage->dbh; @@ -52,7 +52,7 @@ $dbh->do("CREATE TABLE books (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, so # make sure sqlt_type overrides work (::Storage::DBI::mysql does this) { - my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + my $schema = DBICTest->connect_schema($dsn, $user, $pass); ok (!$schema->storage->_dbh, 'definitely not connected'); is ($schema->storage->sqlt_type, 'MySQL', 'sqlt_type correct pre-connection'); @@ -198,43 +198,6 @@ lives_ok { $cd->set_producers ([ $producer ]) } 'set_relationship doesnt die'; my $cd = $rs->next; is ($cd->artist->name, $artist->name, 'Prefetched artist'); }, 'join does not throw (mysql 3 test)'; - - # induce a jointype override, make sure it works even if we don't have mysql3 - local $schema->storage->sql_maker->{_default_jointype} = 'inner'; - is_same_sql_bind ( - $rs->as_query, - '( - SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year`, `me`.`genreid`, `me`.`single_track`, - `artist`.`artistid`, `artist`.`name`, `artist`.`rank`, `artist`.`charfield` - FROM cd `me` - INNER JOIN `artist` `artist` ON `artist`.`artistid` = `me`.`artist` - )', - [], - 'overridden default join type works', - ); -} - -{ - # 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? @@ -246,7 +209,7 @@ lives_ok { $cd->set_producers ([ $producer ]) } 'set_relationship doesnt die'; # with it (ribasushi, 2009/07/03) NULLINSEARCH: { - my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { on_connect_call => 'set_strict_mode' }); + my $ansi_schema = DBICTest->connect_schema ($dsn, $user, $pass, { on_connect_call => 'set_strict_mode' }); $ansi_schema->resultset('Artist')->create ({ name => 'last created artist' }); @@ -270,7 +233,7 @@ NULLINSEARCH: { # check for proper grouped counts { - my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { + my $ansi_schema = DBICTest->connect_schema ($dsn, $user, $pass, { on_connect_call => 'set_strict_mode', quote_char => '`', }); @@ -321,15 +284,9 @@ NULLINSEARCH: { is ($rs->count, 10, '10 artists present'); - my $orig_debug = $schema->storage->debug; - $schema->storage->debug(1); - my $query_count; - $schema->storage->debugcb(sub { $query_count++ }); - - $query_count = 0; - $complex_rs->delete; - - is ($query_count, 1, 'One delete query fired'); + $schema->is_executed_querycount( sub { + $complex_rs->delete; + }, 1, 'One delete query fired' ); is ($rs->count, 0, '10 Artists correctly deleted'); $rs->create({ @@ -338,15 +295,13 @@ NULLINSEARCH: { }); is ($rs->count, 1, 'Artist with cd created'); - $query_count = 0; - $schema->resultset('CD')->search_related('artist', - { 'artist.name' => { -like => 'baby_with_%' } } - )->delete; - is ($query_count, 1, 'And one more delete query fired'); - is ($rs->count, 0, 'Artist with cd deleted'); - $schema->storage->debugcb(undef); - $schema->storage->debug($orig_debug); + $schema->is_executed_querycount( sub { + $schema->resultset('CD')->search_related('artist', + { 'artist.name' => { -like => 'baby_with_%' } } + )->delete; + }, 1, 'And one more delete query fired'); + is ($rs->count, 0, 'Artist with cd deleted'); } ZEROINSEARCH: { @@ -370,16 +325,22 @@ ZEROINSEARCH: { select => [ \ 'YEAR(year)' ], as => ['y'], distinct => 1, }); - is_deeply ( - [ sort ($rs->get_column ('y')->all) ], + my $y_rs = $rs->get_column ('y'); + + warnings_exist { is_deeply ( + [ sort ($y_rs->all) ], [ sort keys %$cds_per_year ], 'Years group successfully', - ); + ) } qr/ + \QUse of distinct => 1 while selecting anything other than a column \E + \Qdeclared on the primary ResultSource is deprecated\E + /x, 'deprecation warning'; + $rs->create ({ artist => 1, year => '0-1-1', title => 'Jesus Rap' }); is_deeply ( - [ sort $rs->get_column ('y')->all ], + [ sort $y_rs->all ], [ 0, sort keys %$cds_per_year ], 'Zero-year groups successfully', ); @@ -390,16 +351,19 @@ ZEROINSEARCH: { year => { '!=', undef } ]}); - is_deeply ( - [ $restrict_rs->get_column('y')->all ], - [ $rs->get_column ('y')->all ], + warnings_exist { is_deeply ( + [ sort $restrict_rs->get_column('y')->all ], + [ sort $y_rs->all ], 'Zero year was correctly excluded from resultset', - ); + ) } qr/ + \QUse of distinct => 1 while selecting anything other than a column \E + \Qdeclared on the primary ResultSource is deprecated\E + /x, 'deprecation warning'; } # make sure find hooks determine driver { - my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + my $schema = DBICTest->connect_schema($dsn, $user, $pass); $schema->resultset("Artist")->find(4); isa_ok($schema->storage->sql_maker, 'DBIx::Class::SQLMaker::MySQL'); } @@ -407,13 +371,13 @@ ZEROINSEARCH: { # make sure the mysql_auto_reconnect buggery is avoided { local $ENV{MOD_PERL} = 'boogiewoogie'; - my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + my $schema = DBICTest->connect_schema($dsn, $user, $pass); ok (! $schema->storage->_get_dbh->{mysql_auto_reconnect}, 'mysql_auto_reconnect unset regardless of ENV' ); # Make sure hardcore forking action still works even if mysql_auto_reconnect # is true (test inspired by ether) - my $schema_autorecon = DBICTest::Schema->connect($dsn, $user, $pass, { mysql_auto_reconnect => 1 }); + my $schema_autorecon = DBICTest->connect_schema($dsn, $user, $pass, { mysql_auto_reconnect => 1 }); my $orig_dbh = $schema_autorecon->storage->_get_dbh; weaken $orig_dbh;