DBI-Easy
view release on metacpan or search on metacpan
lib/DBI/Easy/Record/Collection.pm view on Meta::CPAN
sub records {
my $self = shift;
my $where;
my %params;
if (ref $_[0]) {
$where = shift;
%params = @_;
} else {
%params = @_;
$where = delete $params{where} || {};
}
my $suffix = '';
my $bind_suffix = [];
#TODO: REGRESSION FIX !!!
if ($params{suffix} and ref $params{suffix} and ref $params{suffix} eq 'ARRAY') {
$suffix = shift @{$params{suffix}} || '';
$bind_suffix = delete $params{suffix};
} elsif ($params{suffix}) {
$suffix = delete $params{suffix} || '';
}
my @fetch_params = $self->make_sql_and_bind ('sql_select', undef, $where, $suffix, $bind_suffix, %params);
if ($params{fetch_handler} and ref $params{fetch_handler} eq 'CODE') {
debug "fetch by record";
$self->fetch_handled (@fetch_params, sub {
my $row = shift;
my $rec = $self->record_package->new (column_values => $row);
return $params{fetch_handler}->($rec);
});
} else {
my $db_result = $self->fetch_arrayref (@fetch_params);
debug "result count: ", $#$db_result+1;
$self->columns_to_fields_in_place ($db_result);
return $db_result;
}
}
sub list_of_record_hashes {
my $self = shift;
my $records = $self->records (@_);
my $list_of_hashes = [map {$_->hash} @$records];
return $list_of_hashes;
}
sub update {
my $self = shift;
my ($sql, $bind) = $self->make_sql_and_bind ('sql_update', @_);
my $db_result = $self->no_fetch ($sql, $bind);
debug "rows affected: ", $db_result;
return $db_result;
}
sub count {
my $self = shift;
my ($select, $bind);
if (ref $_[0] or @_ % 2) { # make_sql_and_bind (set, where, suffix, bind)
($select, $bind) = $self->make_sql_and_bind ('sql_select_count', undef, @_);
} else { # make_sql_and_bind (set => set, where => where, ...)
($select, $bind) = $self->make_sql_and_bind ('sql_select_count', @_);
}
my $db_result = $self->fetch_single ($select, $bind);
debug "result count: ", $db_result;
return $db_result;
}
sub delete {
my $self = shift;
my ($select, $bind);
if (ref $_[0] or @_ % 2) { # make_sql_and_bind (set, where, suffix, bind)
($select, $bind) = $self->make_sql_and_bind ('sql_delete', undef, @_);
} else { # make_sql_and_bind (set => set, where => where, ...)
($select, $bind) = $self->make_sql_and_bind ('sql_delete', @_);
}
my $db_result = $self->no_fetch ($select, $bind);
debug "rows affected: ", $db_result;
return $db_result;
}
sub tree {
my $self = shift;
my $keys = shift;
my $where = shift;
my $suffix = shift;
my $ref = ref $self;
my $where_w_filter = $where;
( run in 2.662 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )