App-Repository
view release on metacpan or search on metacpan
lib/App/SessionObject/RepositoryObjectSet.pm view on Meta::CPAN
}
}
&App::sub_exit() if ($App::trace);
}
sub _clear_cache_if_auto_columns_changed {
&App::sub_entry if ($App::trace);
my ($self, $options) = @_;
if (defined $self->{auto_columns}) {
my (@auto_columns, %column, $new_columns);
my $context = $self->{context};
foreach my $wname (split(/,/, $self->{auto_columns})) {
$new_columns = $context->so_get($wname);
if ($new_columns) {
push(@auto_columns, split(/,/, $new_columns));
}
}
if (!$self->{columns}) {
$self->{columns} = \@auto_columns;
$self->_clear_cache();
}
}
&App::sub_exit() if ($App::trace);
}
sub set_params {
&App::sub_entry if ($App::trace);
my ($self, $params) = @_;
$params ||= {};
my $redefined = 0;
my $self_params = $self->{params};
if (!$self_params) {
$redefined = 1;
}
else {
my (%param_already_defined, $key);
foreach $key (keys %$self_params) {
$param_already_defined{$key} = 1;
if ((! exists $params->{$key}) ||
(! defined $params->{$key} && defined $self_params->{$key}) ||
(defined $params->{$key} && ! defined $self_params->{$key}) ||
(defined $params->{$key} && defined $self_params->{$key} && $params->{$key} ne $self_params->{$key})) {
$redefined = 1;
}
}
if (!$redefined) {
foreach $key (keys %$params) {
if (! exists $self_params->{$key}) {
$redefined = 1;
}
}
}
}
if ($redefined) {
$self->{params} = { %$params };
$self->_clear_cache();
}
&App::sub_exit() if ($App::trace);
}
sub update_params {
&App::sub_entry if ($App::trace);
my ($self, $params) = @_;
my $self_params = $self->{params};
die "params must be set before update_params() is called" if (!$self_params);
my $param_changed = 0;
foreach my $key (keys %$self_params) {
if (exists $params->{$key} &&
$self_params->{$key} ne $params->{$key}) {
$self_params->{$key} = $params->{$key};
$param_changed = 1;
}
}
if ($param_changed && $self->{objects}) {
$self->_clear_cache();
}
&App::sub_exit() if ($App::trace);
}
sub _get_all_objects {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $objects = $self->{objects};
if (!$objects) {
if ($self->{temporary}) {
$objects = [];
}
else {
my $context = $self->{context};
my $repname = $self->{repository};
my $rep = $context->repository($repname);
my $table = $self->{table} || die "table not defined";
my $params = $self->{params} || {};
my $columns = $self->{columns};
# Make a copy of $params so that if $db->get_objects() changes them,
# it does not affect the cacheing aspects of the object set.
$params = {%$params};
$objects = $rep->get_objects($table, $params, $columns, {extend_columns => 1});
$self->{objects} = $objects;
$self->{max_age_time} = time();
}
}
&App::sub_exit($objects) if ($App::trace);
return($objects);
}
###########################################################################
# Column Control
###########################################################################
sub set_columns {
&App::sub_entry if ($App::trace);
my ($self, $new_columns) = @_;
$self->{columns} = $new_columns;
$self->_clear_cache();
&App::sub_exit() if ($App::trace);
}
sub include_columns {
&App::sub_entry if ($App::trace);
my ($self, $new_columns) = @_;
( run in 0.518 second using v1.01-cache-2.11-cpan-39bf76dae61 )