Author: spadkins
Date: Fri Apr 4 07:27:34 2008
New Revision: 11051
Modified:
p5ee/trunk/App-Repository/lib/App/Repository.pm
Log:
get_index()/get_unique_index() works for arrays as well as hashrefs. can load
table metadata from external .pl file
Modified: p5ee/trunk/App-Repository/lib/App/Repository.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/Repository.pm (original)
+++ p5ee/trunk/App-Repository/lib/App/Repository.pm Fri Apr 4 07:27:34 2008
@@ -1538,7 +1538,15 @@
my $index = {};
my $is_array_of_arrays = ($#$rows > -1 && ref($rows->[0]) eq "ARRAY") ? 1
: 0;
if ($is_array_of_arrays) {
- # TBD
+ foreach my $row (@$rows) {
+ $key = join(",", @[EMAIL PROTECTED]); # must be indexes
+ if ($index->{$key}) {
+ push(@{$index->{$key}}, $row);
+ }
+ else {
+ $index->{$key} = [ $row ];
+ }
+ }
}
else {
foreach my $row (@$rows) {
@@ -1564,7 +1572,10 @@
my $unique_index = {};
my $is_array_of_arrays = ($#$rows > -1 && ref($rows->[0]) eq "ARRAY") ? 1
: 0;
if ($is_array_of_arrays) {
- # TBD
+ foreach my $row (@$rows) {
+ $key = join(",", @[EMAIL PROTECTED]);
+ $unique_index->{$key} = $row;
+ }
}
else {
foreach my $row (@$rows) {
@@ -3830,15 +3841,15 @@
if ($value =~ m!^[-\+\*/0-9\.\s]+$!) { # all numeric expression
$value =~ s/\s+//g;
}
- while ($value =~ s~($NUM)\s*([\*/])\s*($NUM)~(!defined $1 || !defined
$3) ? "undef" : (($2 eq "*") ? ($1 * $3) : (($3 && $3 != 0.0) ? ($1 / $3) :
"undef"))~e) {
+ while ($value =~ s~($NUM)\s*([\*/])\s*($NUM)~(($2 eq "*") ? ($1 * $3)
: (($3 && $3 != 0.0) ? ($1 / $3) : "undef"))~e) {
#print "EXPR: $1 $2 $3 = $value\n";
# nothing else needed
}
- while ($value =~ s~($NUM)\s*([\+-])\s*($NUM)~(!defined $1 || !defined
$3) ? "undef" : (($2 eq "+") ? ($1 + $3) : ($1 - $3))~e) {
+ while ($value =~ s~($NUM)\s*([\+-])\s*($NUM)~(($2 eq "+") ? ($1 + $3)
: ($1 - $3))~e) {
#print "EXPR: $1 $2 $3 = $value\n";
# nothing else needed
}
- while ($value =~ s~($NUM)\s*(!=|=|<|<=|>|>=)\s*($NUM)~(!defined $1 ||
!defined $3) ? "undef" : $self->evaluate_boolean_expression($1,$2,$3)~e) {
+ while ($value =~
s~($NUM)\s*(!=|=|<|<=|>|>=)\s*($NUM)~$self->evaluate_boolean_expression($1,$2,$3)~e)
{
#print "EXPR: $1 $2 $3 = $value\n";
# nothing else needed
}
@@ -4107,23 +4118,29 @@
my ($self, $table) = @_;
# if it's already been loaded, don't do it again
- return if (defined $self->{table}{$table}{loaded});
+ if (defined $self->{table}{$table}{loaded}) {
+ &App::sub_exit() if ($App::trace);
+ return;
+ }
my ($table_def, $columns, $column, $column_def, $idx, $native_column);
- $table_def = $self->{table}{$table};
- if (!$table_def) {
- my $options = $self->{options};
+ $table_def = $self->{table}{$table} || {};
+ if (!%$table_def) {
+ my $context = $self->{context};
+ my $options = $context->{options};
my $prefix = $options->{prefix};
my $conf_type = $options->{conf_type} || "pl";
my $table_file =
"$prefix/etc/app/Repository/$self->{name}/$table.$conf_type";
if (-r $table_file) {
- $table_def = App::Conf::File->create({ conf_file => $table_file });
+ $table_def = do $table_file;
if ($table_def->{overlay}) {
delete $table_def->{overlay};
- App::Reference->overlay($self->{context}{conf}, $table_def); #
Caution. Use with care.
+ # Caution. Overlays the entire conf, not just the table_def.
Use with care.
+ App::Reference->overlay($self->{context}{conf}, $table_def);
}
else {
+ # Normal. Replaces the table_def.
$self->{table}{$table} = $table_def;
}
}
@@ -4131,7 +4148,10 @@
$self->{table}{$table}{loaded} = 1; # mark it as having been loaded
- return if (!defined $table_def);
+ if (!defined $table_def) {
+ &App::sub_exit() if ($App::trace);
+ return;
+ }
# load up all additional information from the native metadata
$self->_load_table_metadata_from_source($table);