add dbic internals warning and todo note about bind values
[dbsrgits/DBIx-Class-RowCountStatistics.git] / lib / CtrlO / DBIC / Cursor / RowCountStatistics.pm
index ba0a828..97ad5e6 100644 (file)
@@ -4,51 +4,101 @@ use warnings;
 package CtrlO::DBIC::Cursor::RowCountStatistics;
 use Class::Method::Modifiers;
 
+use CtrlO::DBIC::Cursor::RowCountStatistics::Storage;
+
 use parent 'DBIx::Class::Storage::DBI::Cursor';
 
 our $VERSION = '0.000001'; # 0.0.1
 $VERSION = eval $VERSION;
 
+around new => sub {
+    my $orig = shift;
+    my ($class, $storage, @rest) = @_;
+    return $orig->(
+        $class,
+        CtrlO::DBIC::Cursor::RowCountStatistics::Storage->new($storage),
+        @rest,
+    );
+};
+
 after next => sub {
     my ($self) = @_;
     $self->{_ctrlo_rcs_count}++
         unless $self->{_done};
 };
 
+around all => sub {
+    my $orig = shift;
+    my ($self) = @_;
+    my @rows = $orig->(@_);
+    $self->_emit_query_complete(scalar(@rows));
+    return @rows;
+};
+
 before __finish_sth => sub {
     my ($self) = @_;
     my $sql = $self->sth->{Statement};
+    $self->_emit_query_complete($self->{_ctrlo_rcs_count} || 0);
+};
+
+sub _emit_query_complete {
+    my ($self, $count) = @_;
     $self->storage->debugobj->query_complete(
-        $self->{_ctrlo_rcs_count} || 0,
-        $sql,
+        $count,
+        $self->storage->_cached_sql,
         # TODO pass bind params
-    ) if $self->storage->debug;
-};
+    ) if $self->storage->debug
+        and $self->storage->debugobj->can('query_complete');
+}
 
 1;
 
 =head1 NAME
 
-CtrlO::DBIC::Cursor::RowCountStatistics - Description goes here
+CtrlO::DBIC::Cursor::RowCountStatistics - Provide row-count statistics
 
 =head1 SYNOPSIS
 
+    my $schema = Schema->connect(
+        $dsn, $username, $password,
+        {},
+        { cursor_class => 'CtrlO::DBIC::Cursor::RowCountStatistics' },
+    );
+
 =head1 DESCRIPTION
 
+This L<DBIx::Class::Storage::DBI::Cursor> subclass allows you to log the
+number of rows that were fetched through the cursor.
+
+B<Warning>: This module currently lies on L<DBIx::Class> internals and
+might break with an update.
+
+=head1 DEBUG OBJECT METHODS
+
+=head2 query_complete (optional)
+
+If available on the L<DBIx::Class::Storage/debugobj>, this method will be
+called with the following signature:
+
+    sub query_complete {
+        my ($self, $row_count, $sql, @bind_values) = @_;
+        ...
+    }
+
+B<Note>: The passing of the C<@bind_values> is currently not yet
+implemented, and no values will be passed yet.
+
 =head1 AUTHOR
 
  r.sedlacek@shadowcat.co.uk
 
 =head1 CONTRIBUTORS
 
-None yet - maybe this software is perfect! (ahahahahahahahahaha)
+None yet.
 
 =head1 COPYRIGHT
 
 Copyright (c) 2015 the CtrlO::DBIC::Cursor::RowCountStatistics L</AUTHOR> and L</CONTRIBUTORS>
 as listed above.
 
-=head1 LICENSE
-
-This library is free software and may be distributed under the same terms
-as perl itself.
+=cut