use strict;
use warnings;
-use base qw/DBIx::Class::AccessorGroup Class::Data::Accessor/;
-__PACKAGE__->mk_group_accessors(simple => qw/callback debugfh/);
+use base qw/Class::Accessor::Grouped/;
+use IO::File;
+
+__PACKAGE__->mk_group_accessors(simple => qw/callback debugfh silence/);
=head1 NAME
=cut
sub new {
- my $self = {};
- bless $self, (ref($_[0]) || $_[0]);
+ my $self = {};
+ bless $self, (ref($_[0]) || $_[0]);
- return $self;
+ return $self;
}
=head2 debugfh
should be set to STDERR - although see information on the
L<DBIC_TRACE> 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) = @_;
+
+ return if $self->silence;
+
+ 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.
=cut
sub txn_begin {
- my $self = shift();
+ my $self = shift;
- $self->debugfh->print("BEGIN WORK\n");
+ $self->print("BEGIN WORK\n");
}
=head2 txn_rollback
=cut
sub txn_rollback {
- my $self = shift();
+ my $self = shift;
- $self->debugfh->print("ROLLBACK\n");
+ $self->print("ROLLBACK\n");
}
=head2 txn_commit
=cut
sub txn_commit {
- my $self = shift();
+ my $self = shift;
+
+ $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->debugfh->print("COMMIT\n");
+ $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
=cut
sub query_start {
- my ($self, $string, @bind) = @_;
+ my ($self, $string, @bind) = @_;
- my $message = "$string: ".join(', ', @bind)."\n";
+ my $message = "$string: ".join(', ', @bind)."\n";
- if(defined($self->callback())) {
- $string =~ m/^(\w+)/;
- $self->callback()->($1, $message);
- return;
- }
+ if(defined($self->callback)) {
+ $string =~ m/^(\w+)/;
+ $self->callback->($1, $message);
+ return;
+ }
- $self->debugfh->print($message);
+ $self->print($message);
}
=head2 query_end
=cut
sub query_end {
- my $self = shift();
- my $string = shift();
+ my ($self, $string) = @_;
}
1;