X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fdebug.t;h=514b43bd73649fced735887f0d433c5ce645a9d8;hb=2cfc22ddff9cb35524031dfc9d429d294b5e3d6e;hp=6d8e94cf89aee57a630658e5b74387c1ceccc962;hpb=680e2ac9adda36197b8b880c25fa344376f5914e;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/debug.t b/t/storage/debug.t index 6d8e94c..514b43b 100644 --- a/t/storage/debug.t +++ b/t/storage/debug.t @@ -6,7 +6,6 @@ use Test::More; use Test::Exception; use lib qw(t/lib); use DBICTest; -use DBIC::DebugObj; use DBIC::SqlMakerTest; use Path::Class qw/file/; @@ -19,6 +18,7 @@ unlink $lfn or die $! if -e $lfn; # make sure we are testing the vanilla debugger and not ::PrettyPrint +require DBIx::Class::Storage::Statistics; $schema->storage->debugobj(DBIx::Class::Storage::Statistics->new); ok ( $schema->storage->debug(1), 'debug' ); @@ -61,25 +61,45 @@ dies_ok { open(STDERR, '>&STDERRCOPY'); -# test trace output correctness for bind params +# test debugcb and debugobj protocol { - my ($sql, @bind); - $schema->storage->debugobj(DBIC::DebugObj->new(\$sql, \@bind)); - - my @cds = $schema->resultset('CD')->search( { artist => 1, cdid => { -between => [ 1, 3 ] }, } ); - is_same_sql_bind( - $sql, \@bind, - "SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE ( artist = ? AND (cdid BETWEEN ? AND ?) )", - [qw/'1' '1' '3'/], - 'got correct SQL with all bind parameters (debugcb)' - ); - - @cds = $schema->resultset('CD')->search( { artist => 1, cdid => { -between => [ 1, 3 ] }, } ); - is_same_sql_bind( - $sql, \@bind, - "SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE ( artist = ? AND (cdid BETWEEN ? AND ?) )", ["'1'", "'1'", "'3'"], - 'got correct SQL with all bind parameters (debugobj)' - ); + my $rs = $schema->resultset('CD')->search( { + artist => 1, + cdid => { -between => [ 1, 3 ] }, + title => { '!=' => \[ '?', undef ] } + }); + + my $sql_trace = 'SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE ( ( artist = ? AND ( cdid BETWEEN ? AND ? ) AND title != ? ) )'; + my @bind_trace = qw( '1' '1' '3' NULL ); # quotes are in fact part of the trace + + + my @args; + $schema->storage->debugcb(sub { push @args, @_ } ); + + $rs->all; + + is_deeply( \@args, [ + "SELECT", + sprintf( "%s: %s\n", $sql_trace, join ', ', @bind_trace ), + ]); + + { + package DBICTest::DebugObj; + our @ISA = 'DBIx::Class::Storage::Statistics'; + + sub query_start { + my $self = shift; + ( $self->{_traced_sql}, @{$self->{_traced_bind}} ) = @_; + } + } + + my $do = $schema->storage->debugobj(DBICTest::DebugObj->new); + + $rs->all; + + is( $do->{_traced_sql}, $sql_trace ); + + is_deeply ( $do->{_traced_bind}, \@bind_trace ); } done_testing;