package Plack::Middleware::Debug::MySQLTrace; use 5.008; use strict; use warnings; use parent qw(Plack::Middleware::Debug::Base); use Plack::Util::Accessor qw(skip_packages); use Sub::Uplevel (); our $VERSION = '0.07'; sub run { my($self, $env, $panel) = @_; my $old_trace; my @output; my $queries = 0; if (defined &DBI::trace) { $old_trace = DBI->trace; open my $trace_handle, '>:via(Plack::Middleware::Debug::MySQLTrace::IO)', { skip_packages => $self->skip_packages, logger => sub { my $sql = shift; $sql =~ s/\s+\z//; $sql =~ s/\A\s+//; $queries++; push @output, sprintf('%s - %s[%s]', $queries, (caller 1)[3], (caller 0)[2]), $sql; }, }; DBI->trace('2,SQL', $trace_handle); } else { return $panel->disable; } return sub { my $res = shift; if (defined $old_trace) { DBI->trace($old_trace); $panel->title('MySQL Trace'); $panel->nav_title('MySQL Trace'); $panel->nav_subtitle($queries . ' Queries'); $panel->content('