From: Arthur Axel 'fREW' Schmidt Date: Sun, 24 Oct 2010 14:44:29 +0000 (-0500) Subject: Add "no_repeats" option to fix it such that repeated SQL may be ellided except for... X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b25246f02c8f12fc5c060f53f2386db8bcca05ab;p=scpubgit%2FQ-Branch.git Add "no_repeats" option to fix it such that repeated SQL may be ellided except for placeholders --- diff --git a/Changes b/Changes index a712212..ea6689a 100644 --- a/Changes +++ b/Changes @@ -3,6 +3,8 @@ Revision history for SQL::Abstract - Hide bulk inserts from DBIx::Class - Highlight transaction keywords - Add EXECUTING for clarity of long running SQL + - Add "no_repeats" option to fix it such that repeated SQL gets ellided + except for placeholders revision 1.69 2010-10-22 ---------------------------- diff --git a/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm b/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm index 5bbadf1..d76477f 100644 --- a/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm +++ b/lib/DBIx/Class/Storage/Debug/PrettyPrint.pm @@ -11,6 +11,8 @@ __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 => '_show_progress' ); +__PACKAGE__->mk_group_accessors( simple => '_last_sql' ); +__PACKAGE__->mk_group_accessors( simple => 'no_repeats' ); sub new { my $class = shift; @@ -23,13 +25,17 @@ sub new { } : 'EXECUTING...'; my $show_progress = defined $args->{show_progress} ? $args->{show_progress} : 1; + my $no_repeats = $args->{no_repeats}; my $sqlat = SQL::Abstract::Tree->new($args); my $self = $class->next::method(@_); $self->_clear_line_str($clear_line); $self->_executing_str($executing); $self->_show_progress($show_progress); + $self->no_repeats($no_repeats); + $self->_sqlat($sqlat); + $self->_last_sql(''); return $self } @@ -50,10 +56,17 @@ sub print { # 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->no_repeats && $self->_last_sql eq $string) { + my ( $l, $r ) = @{ $sqlat->placeholder_surround }; + $formatted = '... : ' . join(', ', map "$l$_$r", @$bindargs) . "\n"; + } else { + $self->_last_sql($string); + $formatted = $sqlat->format($string, $bindargs) . "\n"; + $formatted = "$formatted: " . join ', ', @{$bindargs} + unless $use_placeholders; + } $self->next::method("$lw$formatted$lr", @_); }