use strict;
use Carp;
use DBI;
our $VERSION = '1.00';
our @ISA = qw{ Net::Amazon::MechanicalTurk::RowData };
Net::Amazon::MechanicalTurk::RowData::SQLRowData->attributes(qw{
dbh
sql
params
});
sub init {
my $self = shift;
$self->setAttributes(@_);
$self->assertRequiredAttributes(qw{ dbh sql });
}
sub each {
my ($self, $block, @blockXArgs) = @_;
my $sql = $self->sql;
my $sth = $self->dbh->prepare($sql);
if (!$sth) {
Carp::croak("Couldn't prepare sql '$sql' - " . $self->dbh->errstr . ".");
}
$sth->{RaiseError} = 1;
eval {
my @params;
@params = @{$self->params} if $self->params;
$sth->execute(@params);
my $rowNumber = 0;
while (my $row = $sth->fetchrow_hashref) {
if ($rowNumber++ == 0) {
# Make a copy of the fieldNames
$self->fieldNames([@{$sth->{NAME}}]);
}
$block->($self, $row, @blockXArgs);
}
};
if ($@) {
# clean up the handle
$sth->finish;
die $@;
}
$sth->finish;
}
return 1;