From: Peter Rabbitson Date: Sun, 14 Nov 2010 12:24:06 +0000 (+0100) Subject: Attach a storage debugobj lazily instead of at new() time X-Git-Tag: v0.08125~54 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=4d753fb8e9f7ec28334c93f6a798e0cb0874861a;p=dbsrgits%2FDBIx-Class.git Attach a storage debugobj lazily instead of at new() time --- diff --git a/lib/DBIx/Class/Storage.pm b/lib/DBIx/Class/Storage.pm index e26295b..6134b39 100644 --- a/lib/DBIx/Class/Storage.pm +++ b/lib/DBIx/Class/Storage.pm @@ -13,7 +13,7 @@ use DBIx::Class::Storage::TxnScopeGuard; use Try::Tiny; use namespace::clean; -__PACKAGE__->mk_group_accessors('simple' => qw/debug debugobj schema/); +__PACKAGE__->mk_group_accessors('simple' => qw/debug schema/); __PACKAGE__->mk_group_accessors('inherited' => 'cursor_class'); __PACKAGE__->cursor_class('DBIx::Class::Cursor'); @@ -63,34 +63,8 @@ sub new { bless $new, $self; $new->set_schema($schema); - my $debugobj; - if (my $profile = $ENV{DBIC_TRACE_PROFILE}) { - require DBIx::Class::Storage::Debug::PrettyPrint; - if ($profile =~ /^\.?\//) { - require Config::Any; - - my $cfg = try { - Config::Any->load_files({ files => [$profile], use_ext => 1 }); - } catch { - # sanitize the error message a bit - $_ =~ s/at \s+ .+ Storage\.pm \s line \s \d+ $//x; - $self->throw_exception("Failure processing \$ENV{DBIC_TRACE_PROFILE}: $_"); - }; - - my ($filename, $config) = %{$cfg->[0]}; - $debugobj = DBIx::Class::Storage::Debug::PrettyPrint->new($config) - } else { - $debugobj = DBIx::Class::Storage::Debug::PrettyPrint->new({ profile => $profile }) - } - } else { - $debugobj = DBIx::Class::Storage::Statistics->new - } - $new->debugobj($debugobj); - - my $debug_env = $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} - || $ENV{DBIC_TRACE}; - - $new->debug(1) if $debug_env; + $new->debug(1) + if $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} || $ENV{DBIC_TRACE}; $new; } @@ -394,6 +368,42 @@ of L that is compatible with the original method of using a coderef as a callback. See the aforementioned Statistics class for more information. +=cut + +sub debugobj { + my $self = shift; + + if (@_) { + return $self->{debugobj} = $_[0]; + } + + $self->{debugobj} ||= do { + if (my $profile = $ENV{DBIC_TRACE_PROFILE}) { + require DBIx::Class::Storage::Debug::PrettyPrint; + if ($profile =~ /^\.?\//) { + require Config::Any; + + my $cfg = try { + Config::Any->load_files({ files => [$profile], use_ext => 1 }); + } catch { + # sanitize the error message a bit + $_ =~ s/at \s+ .+ Storage\.pm \s line \s \d+ $//x; + $self->throw_exception("Failure processing \$ENV{DBIC_TRACE_PROFILE}: $_"); + }; + + DBIx::Class::Storage::Debug::PrettyPrint->new(values %{$cfg->[0]}); + } + else { + DBIx::Class::Storage::Debug::PrettyPrint->new({ profile => $profile }); + } + } + else { + require DBIx::Class::Storage::Statistics; + DBIx::Class::Storage::Statistics->new + } + }; +} + =head2 debugcb Sets a callback to be executed each time a statement is run; takes a sub diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index c512334..cd2da9e 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -10,7 +10,6 @@ use mro 'c3'; use Carp::Clan qw/^DBIx::Class|^Try::Tiny/; use DBI; use DBIx::Class::Storage::DBI::Cursor; -use DBIx::Class::Storage::Statistics; use Scalar::Util qw/refaddr weaken reftype blessed/; use Data::Dumper::Concise 'Dumper'; use Sub::Name 'subname';