X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FStatistics.pm;h=b60c44ea42507ac23b0a088b73f09297520de585;hb=bf7aed106962cc8db897f6712cec2b8b5e15ecb7;hp=4641bc9b2097fbd3cc719ed28bd8d8a5c50b22c6;hpb=04cf5bbf360c2b6a4738056f7379678d77d426cb;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/Statistics.pm b/lib/DBIx/Class/Storage/Statistics.pm index 4641bc9..b60c44e 100644 --- a/lib/DBIx/Class/Storage/Statistics.pm +++ b/lib/DBIx/Class/Storage/Statistics.pm @@ -1,7 +1,10 @@ package DBIx::Class::Storage::Statistics; use strict; +use warnings; + +use base qw/Class::Accessor::Grouped/; +use IO::File; -use base qw/DBIx::Class::AccessorGroup Class::Data::Accessor/; __PACKAGE__->mk_group_accessors(simple => qw/callback debugfh/); =head1 NAME @@ -43,6 +46,35 @@ be an IO::Handle compatible object (only the C method is used). Initially should be set to STDERR - although see information on the L environment variable. +=head2 print + +Prints the specified string to our debugging filehandle, which we will attempt +to open if we haven't yet. Provided to save our methods the worry of how +to display the message. + +=cut +sub print { + my ($self, $msg) = @_; + + if(!defined($self->debugfh())) { + my $fh; + my $debug_env = $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} + || $ENV{DBIC_TRACE}; + if (defined($debug_env) && ($debug_env =~ /=(.+)$/)) { + $fh = IO::File->new($1, 'w') + or die("Cannot open trace file $1"); + } else { + $fh = IO::File->new('>&STDERR') + or die('Duplication of STDERR for debug output failed (perhaps your STDERR is closed?)'); + } + + $fh->autoflush(); + $self->debugfh($fh); + } + + $self->debugfh->print($msg); +} + =head2 txn_begin Called when a transaction begins. @@ -51,7 +83,7 @@ Called when a transaction begins. sub txn_begin { my $self = shift; - $self->debugfh->print("BEGIN WORK\n"); + $self->print("BEGIN WORK\n"); } =head2 txn_rollback @@ -62,7 +94,7 @@ Called when a transaction is rolled back. sub txn_rollback { my $self = shift; - $self->debugfh->print("ROLLBACK\n"); + $self->print("ROLLBACK\n"); } =head2 txn_commit @@ -73,7 +105,40 @@ Called when a transaction is committed. sub txn_commit { my $self = shift; - $self->debugfh->print("COMMIT\n"); + $self->print("COMMIT\n"); +} + +=head2 svp_begin + +Called when a savepoint is created. + +=cut +sub svp_begin { + my ($self, $name) = @_; + + $self->print("SAVEPOINT $name\n"); +} + +=head2 svp_release + +Called when a savepoint is released. + +=cut +sub svp_release { + my ($self, $name) = @_; + + $self->print("RELEASE SAVEPOINT $name\n"); +} + +=head2 svp_rollback + +Called when rolling back to a savepoint. + +=cut +sub svp_rollback { + my ($self, $name) = @_; + + $self->print("ROLLBACK TO SAVEPOINT $name\n"); } =head2 query_start @@ -89,11 +154,11 @@ sub query_start { if(defined($self->callback)) { $string =~ m/^(\w+)/; - $self->callback()->($1, $message); + $self->callback->($1, $message); return; } - $self->debugfh->print($message); + $self->print($message); } =head2 query_end