Author: spadkins
Date: Wed Apr 25 12:40:06 2007
New Revision: 9452
Modified:
p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm
Log:
add support for values_string_template, the : syntax on values_string, and
Service.substitute() instead of homegrown
Modified: p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm (original)
+++ p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm Wed Apr 25
12:40:06 2007
@@ -67,7 +67,14 @@
my ($values, $labels, $needs_loading, $refresh_interval, $time);
my ($method, $args, $rows, $row);
- $values_string ||= "";
+ if (!defined $values_string) {
+ if (defined $self->{values_string_template}) {
+ $values_string =
$self->substitute($self->{values_string_template});
+ }
+ else {
+ $values_string = "";
+ }
+ }
$values = $self->{values};
$labels = $self->{labels};
@@ -79,9 +86,9 @@
# then the values/labels indeed need loading
my $repository = $self->{repository};
- if (!defined $values || !defined $labels || # never
loaded them yet
- (!$values_string && $self->{values_string}) || # asking for the
whole domain, only subset loaded
- (defined $values_string && defined $self->{values_string} && # asking
for a different subset than is loaded
+ if (!defined $values || !defined $labels || # never
loaded them yet
+ ($values_string eq "" && $self->{values_string}) || # asking
for the whole domain, only subset loaded
+ ($values_string ne "" && defined $self->{values_string} && # asking
for a different subset than is loaded
$values_string ne $self->{values_string})) {
$needs_loading = 1;
}
@@ -108,39 +115,24 @@
my $labelcolumn = $self->{labelcolumn};
$labelcolumn = "" if ($labelcolumn eq $valuecolumn);
my $params = $self->{params} || {};
- my %params = %$params;
my $sql = $self->{sql};
- # TODO. I might want to use [$params = $self->substitute($params);]
here
- my ($key, $keyvalue, $wname, $wvalue);
- foreach my $key (keys %params) {
- $keyvalue = $params{$key};
- while ($keyvalue =~ /\{([A-Za-z0-9\._-]+)\}/) {
- $wname = $1;
- $wvalue = $context->so_get($wname);
- if (defined $wvalue) {
- $keyvalue =~ s/\{$wname\}/$wvalue/g;
- }
- else {
- $keyvalue =~ s/\{$wname\}/NULL/g;
- }
- }
- $params{$key} = $keyvalue;
- }
+ my ($key);
+ my $subst_params = $self->substitute($params, undef, {undef_value =>
"NULL"});
- if (defined $values_string && $values_string ne "") {
+ if (defined $values_string && $values_string ne "" && $values_string
!~ /^:/) {
my $values_string_columns = $self->{values_string_columns};
if ($values_string_columns) {
$values_string_columns = [split(/,/, $values_string_columns)]
if (!ref($values_string_columns));
my @values_string_values = split(/,/, $values_string);
if ($#values_string_values > -1 && $#$values_string_columns ==
$#values_string_values) {
for (my $i = 0; $i <= $#$values_string_columns; $i++) {
- $params{$values_string_columns->[$i]} =
$values_string_values[$i];
+ $subst_params->{$values_string_columns->[$i]} =
$values_string_values[$i];
}
}
}
else {
- $params{$valuecolumn} = $values_string;
+ $subst_params->{$valuecolumn} = $values_string;
}
}
@@ -151,7 +143,7 @@
if ($self->{order_by}) {
$options = { order_by => $self->{order_by} };
}
- $rows = $rep->get_rows($table, \%params, [EMAIL PROTECTED],
$options);
+ $rows = $rep->get_rows($table, $subst_params, [EMAIL PROTECTED],
$options);
$values = [];
$labels = {};
foreach $row (@$rows) {
@@ -183,17 +175,9 @@
}
if ($sql) {
- # TODO. I might want to use [$params =
$self->substitute($params);] here
- while ($sql =~ /\{([A-Za-z0-9\._-]+)\}/g) {
- $wname = $1;
- $wvalue = $context->so_get($wname);
- if (defined $wvalue && $wvalue ne "") {
- $sql =~ s/\{$wname\}/$wvalue/g;
- }
- else {
- $sql =~ s/\{$wname\}/NULL/g;
- }
- }
+ $sql = $self->substitute($sql, undef, {undef_value => "NULL"});
+
+ # TODO. I might want to use $db->_do($sql) here.
my $dbh = $rep->{dbh};
my $sth = $dbh->prepare($sql);
return("Prepare error: $DBI::errstr\n") if ($DBI::err);
@@ -225,12 +209,6 @@
$values = [] if (! defined $values);
$labels = {} if (! defined $labels);
- if (defined $values_string && $values_string ne "") {
- return($labels);
- }
- else {
- return($values,$labels);
- }
&App::sub_exit() if ($App::trace);
}