X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDebug%2FPrettyPrint.pm;h=44bae619f83f3259af6829fe3d0479a2cb3bbbff;hb=7c2d702e410b5043ec1008f0deaed436cda74828;hp=8569dbc9c39b0137a3f3908fa33852f5c2ab6a28;hpb=416cdb2e2ae9bd3ca942ce91aa5aae13409f2452;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm b/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm index 8569dbc..44bae61 100644 --- a/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm +++ b/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm @@ -8,26 +8,36 @@ use base 'DBIx::Class::Storage::Statistics'; use SQL::Abstract::Tree; __PACKAGE__->mk_group_accessors( simple => '_sqlat' ); -__PACKAGE__->mk_group_accessors( simple => 'clear_line_str' ); -__PACKAGE__->mk_group_accessors( simple => 'executing_str' ); +__PACKAGE__->mk_group_accessors( simple => '_clear_line_str' ); +__PACKAGE__->mk_group_accessors( simple => '_executing_str' ); +__PACKAGE__->mk_group_accessors( simple => '_show_progress' ); +__PACKAGE__->mk_group_accessors( simple => '_last_sql' ); +__PACKAGE__->mk_group_accessors( simple => 'squash_repeats' ); sub new { my $class = shift; my $args = shift; my $clear_line = $args->{clear_line} || "\r"; - my $executing = $args->{executing} || eval { require Term::ANSIColor } ? do { - my $c = \&Term::ANSIColor::color; - $c->('blink white on_black') . 'EXECUTING...' . $c->('reset');; - } : 'EXECUTING...'; -; - + my $executing = $args->{executing} || ( + eval { require Term::ANSIColor } ? do { + my $c = \&Term::ANSIColor::color; + $c->('blink white on_black') . 'EXECUTING...' . $c->('reset'); + } : 'EXECUTING...' + ); + my $show_progress = $args->{show_progress}; + + my $squash_repeats = $args->{squash_repeats}; my $sqlat = SQL::Abstract::Tree->new($args); my $self = $class->next::method(@_); - $self->clear_line_str($clear_line); - $self->executing_str($executing); + $self->_clear_line_str($clear_line); + $self->_executing_str($executing); + $self->_show_progress($show_progress); + + $self->squash_repeats($squash_repeats); $self->_sqlat($sqlat); + $self->_last_sql(''); return $self } @@ -40,18 +50,25 @@ sub print { my ($lw, $lr); ($lw, $string, $lr) = $string =~ /^(\s*)(.+?)(\s*)$/s; - return if defined $bindargs && defined $bindargs->[0] && - $bindargs->[0] eq q('__BULK_INSERT__'); + local $self->_sqlat->{fill_in_placeholders} = 0 if defined $bindargs + && defined $bindargs->[0] && $bindargs->[0] eq q('__BULK_INSERT__'); my $use_placeholders = !!$self->_sqlat->fill_in_placeholders; # DBIC pre-quotes bindargs $bindargs = [map { s/^'//; s/'$//; $_ } @{$bindargs}] if $use_placeholders; - my $formatted = $self->_sqlat->format($string, $bindargs); - - $formatted = "$formatted: " . join ', ', @{$bindargs} - unless $use_placeholders; + my $sqlat = $self->_sqlat; + my $formatted; + if ($self->squash_repeats && $self->_last_sql eq $string) { + my ( $l, $r ) = @{ $sqlat->placeholder_surround }; + $formatted = '... : ' . join(', ', map "$l$_$r", @$bindargs) + } else { + $self->_last_sql($string); + $formatted = $sqlat->format($string, $bindargs); + $formatted = "$formatted : " . join ', ', @{$bindargs} + unless $use_placeholders; + } $self->next::method("$lw$formatted$lr", @_); } @@ -69,11 +86,11 @@ sub query_start { $self->print("$string\n", \@bind); - $self->debugfh->print($self->executing_str) + $self->debugfh->print($self->_executing_str) if $self->_show_progress } sub query_end { - $_[0]->debugfh->print($_[0]->clear_line_str); + $_[0]->debugfh->print($_[0]->_clear_line_str) if $_[0]->_show_progress } 1;