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 )