::Replicated - test hashref for connect_replicants and croak on coderef, switch to...
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / Statistics.pm
CommitLineData
4c248161 1package DBIx::Class::Storage::Statistics;
2use strict;
aaba9524 3use warnings;
4c248161 4
3e110410 5use base qw/Class::Accessor::Grouped/;
a0024650 6use IO::File;
3e110410 7
9901aad7 8__PACKAGE__->mk_group_accessors(simple => qw/callback debugfh silence/);
4c248161 9
10=head1 NAME
11
12DBIx::Class::Storage::Statistics - SQL Statistics
13
14=head1 SYNOPSIS
15
16=head1 DESCRIPTION
17
18This class is called by DBIx::Class::Storage::DBI as a means of collecting
19statistics on it's actions. Using this class alone merely prints the SQL
20executed, the fact that it completes and begin/end notification for
21transactions.
22
23To really use this class you should subclass it and create your own method
24for collecting the statistics as discussed in L<DBIx::Class::Manual::Cookbook>.
25
26=head1 METHODS
27
28=cut
29
30=head2 new
31
32Returns a new L<DBIx::Class::Storage::Statistics> object.
33
34=cut
35sub new {
04cf5bbf 36 my $self = {};
37 bless $self, (ref($_[0]) || $_[0]);
4c248161 38
04cf5bbf 39 return $self;
4c248161 40}
41
42=head2 debugfh
43
44Sets or retrieves the filehandle used for trace/debug output. This should
45be an IO::Handle compatible object (only the C<print> method is used). Initially
46should be set to STDERR - although see information on the
6fe735fa 47L<DBIC_TRACE> environment variable.
4c248161 48
70f39278 49=head2 print
50
51Prints the specified string to our debugging filehandle, which we will attempt
52to open if we haven't yet. Provided to save our methods the worry of how
53to display the message.
54
55=cut
56sub print {
57 my ($self, $msg) = @_;
58
9901aad7 59 return if $self->silence;
60
70f39278 61 if(!defined($self->debugfh())) {
62 my $fh;
63 my $debug_env = $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG}
64 || $ENV{DBIC_TRACE};
65 if (defined($debug_env) && ($debug_env =~ /=(.+)$/)) {
66 $fh = IO::File->new($1, 'w')
67 or die("Cannot open trace file $1");
68 } else {
69 $fh = IO::File->new('>&STDERR')
70 or die('Duplication of STDERR for debug output failed (perhaps your STDERR is closed?)');
71 }
72
73 $fh->autoflush();
74 $self->debugfh($fh);
75 }
76
77 $self->debugfh->print($msg);
78}
79
4c248161 80=head2 txn_begin
81
82Called when a transaction begins.
83
84=cut
85sub txn_begin {
04cf5bbf 86 my $self = shift;
d2075431 87
70f39278 88 $self->print("BEGIN WORK\n");
4c248161 89}
90
91=head2 txn_rollback
92
93Called when a transaction is rolled back.
94
95=cut
96sub txn_rollback {
04cf5bbf 97 my $self = shift;
d2075431 98
70f39278 99 $self->print("ROLLBACK\n");
4c248161 100}
101
102=head2 txn_commit
103
104Called when a transaction is committed.
105
106=cut
107sub txn_commit {
04cf5bbf 108 my $self = shift;
d2075431 109
70f39278 110 $self->print("COMMIT\n");
4c248161 111}
112
adb3554a 113=head2 svp_begin
114
115Called when a savepoint is created.
116
117=cut
118sub svp_begin {
119 my ($self, $name) = @_;
120
121 $self->print("SAVEPOINT $name\n");
122}
123
124=head2 svp_release
125
126Called when a savepoint is released.
127
128=cut
8432aeca 129sub svp_release {
adb3554a 130 my ($self, $name) = @_;
131
132 $self->print("RELEASE SAVEPOINT $name\n");
133}
134
135=head2 svp_rollback
136
137Called when rolling back to a savepoint.
138
139=cut
140sub svp_rollback {
141 my ($self, $name) = @_;
142
143 $self->print("ROLLBACK TO SAVEPOINT $name\n");
144}
145
4c248161 146=head2 query_start
147
148Called before a query is executed. The first argument is the SQL string being
149executed and subsequent arguments are the parameters used for the query.
150
151=cut
152sub query_start {
04cf5bbf 153 my ($self, $string, @bind) = @_;
68fcff2f 154
04cf5bbf 155 my $message = "$string: ".join(', ', @bind)."\n";
4c248161 156
04cf5bbf 157 if(defined($self->callback)) {
158 $string =~ m/^(\w+)/;
1b7fb46e 159 $self->callback->($1, $message);
04cf5bbf 160 return;
161 }
4c248161 162
70f39278 163 $self->print($message);
4c248161 164}
165
166=head2 query_end
167
168Called when a query finishes executing. Has the same arguments as query_start.
169
170=cut
171sub query_end {
04cf5bbf 172 my ($self, $string) = @_;
4c248161 173}
174
1751;
176
177=head1 AUTHORS
178
179Cory G. Watson <gphat@cpan.org>
180
181=head1 LICENSE
182
183You may distribute this code under the same license as Perl itself.
184
185=cut