Author: spadkins
Date: Wed Dec 20 07:46:20 2006
New Revision: 8412
Modified:
p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm
Log:
add get_summary(), get_ext_summary(), get_repository(), get_table(),
get_columns()
Modified: p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm
(original)
+++ p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm
Wed Dec 20 07:46:20 2006
@@ -71,6 +71,8 @@
delete $self->{unique_index};
delete $self->{column_values};
delete $self->{max_age_time};
+ delete $self->{ext_summary};
+ delete $self->{summary};
&App::sub_exit() if ($App::trace);
}
@@ -224,12 +226,15 @@
###########################################################################
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) = @_;
my $columns = $self->{columns};
if (!$columns) {
@@ -255,9 +260,37 @@
if ($column_added) {
$self->_clear_cache();
}
+ &App::sub_exit() if ($App::trace);
+}
+
+sub get_repository {
+ &App::sub_entry if ($App::trace);
+ my ($self) = @_;
+ my $context = $self->{context};
+ my $repname = $self->{repository};
+ my $rep = $context->repository($repname);
+ &App::sub_exit($rep) if ($App::trace);
+ return($rep);
+}
+
+sub get_table {
+ &App::sub_entry if ($App::trace);
+ my ($self) = @_;
+ my $table = $self->{table};
+ &App::sub_exit($table) if ($App::trace);
+ return($table);
+}
+
+sub get_columns {
+ &App::sub_entry if ($App::trace);
+ my ($self) = @_;
+ my $columns = $self->{columns};
+ &App::sub_exit($columns) if ($App::trace);
+ return($columns);
}
sub get_key_columns {
+ &App::sub_entry if ($App::trace);
my ($self) = @_;
my $repname = $self->{repository};
my $context = $self->{context};
@@ -276,16 +309,19 @@
push(@key_columns, $column);
}
}
+ &App::sub_exit([EMAIL PROTECTED]) if ($App::trace);
return([EMAIL PROTECTED]);
}
sub get_column_defs {
+ &App::sub_entry if ($App::trace);
my ($self) = @_;
my $context = $self->{context};
my $repname = $self->{repository};
my $rep = $context->repository($repname);
my $table = $self->{table} || die "table not defined";
my $column_defs = $rep->{table}{$table}{column};
+ &App::sub_exit($column_defs) if ($App::trace);
return($column_defs);
}
@@ -361,6 +397,55 @@
return($unique_index);
}
+sub get_summary {
+ &App::sub_entry if ($App::trace);
+ my ($self, $key_columns, $options) = @_;
+ $key_columns = [] if (!$key_columns);
+ my $key_name = join(",", @$key_columns);
+
+ $self->_clear_cache_if_auto_params_changed($options) if (defined
$self->{auto_params});
+ $self->_clear_cache_if_objects_expired($options) if ((defined
$options->{max_age} || defined $self->{max_age}) && $self->{objects});
+
+ my $summary = $self->{summary}{$key_name};
+ if (!$summary) {
+ $summary = {};
+ my $rep = $self->get_repository();
+ my $table = $self->get_table();
+ my $index = $self->get_index($key_columns);
+ my $columns = $self->get_columns();
+ my ($objects, $ext_summaries, %options, $summarized_rows);
+ foreach my $key (keys %$index) {
+ $objects = $index->{$key};
+ $ext_summaries = {};
+ %options = ( ext_summaries => $ext_summaries );
+ $summarized_rows = $rep->summarize_rows($table, $objects,
$columns, $key_columns, \%options);
+ $self->{ext_summary}{$key_name}{$key} = $ext_summaries;
+ $summary->{$key} = $summarized_rows->[0];
+ }
+ $self->{summary}{$key_name} = $summary;
+ }
+ &App::sub_exit($summary) if ($App::trace);
+ return($summary);
+}
+
+sub get_ext_summary {
+ &App::sub_entry if ($App::trace);
+ my ($self, $key_columns, $options) = @_;
+ $key_columns = [] if (!$key_columns);
+ my $key_name = join(",", @$key_columns);
+
+ $self->_clear_cache_if_auto_params_changed($options) if (defined
$self->{auto_params});
+ $self->_clear_cache_if_objects_expired($options) if ((defined
$options->{max_age} || defined $self->{max_age}) && $self->{objects});
+
+ my $ext_summary = $self->{ext_summary}{$key_name};
+ if (!$ext_summary) {
+ $self->get_summary($key_columns);
+ $ext_summary = $self->{ext_summary}{$key_name};
+ }
+ &App::sub_exit($ext_summary) if ($App::trace);
+ return($ext_summary);
+}
+
sub get_column_values {
&App::sub_entry if ($App::trace);
my ($self, $column, $options) = @_;