package Class::DBI::Plugin::Iterator::mysql4;
use strict;
use base qw/Class::DBI::Plugin::Iterator/;

sub count {
    my $self = shift;
    return $self->{_count} if defined $self->{_count};

    my $sql = $self->sql;
    $sql =~ s/SELECT(?:\s+(ALL|DISTINCT|DISTINCTROW))?\s+/SELECT $1 SQL_CALC_FOUND_ROWS /;
    $sql .= ' LIMIT 1';

    my $dbh = $self->class->db_Main;
    my $sth = $dbh->prepare($sql);
    $sth->execute(@{$self->{_args}});
    $sth->finish;

    my $sth_rows = $dbh->prepare('SELECT FOUND_ROWS()');
    $sth_rows->execute;
    $self->{_count} = $sth_rows->fetch->[0];
    $sth_rows->finish;

    $self->{_count};
}

1;