cvsuser 02/01/30 11:47:21
Modified: P5EEx/Blue/P5EEx/Blue/Repository DBI.pm
Log:
variable renaming. {no_auto_in_param}. !expr! parameter values.
Revision Changes Path
1.6 +32 -15 p5ee/P5EEx/Blue/P5EEx/Blue/Repository/DBI.pm
Index: DBI.pm
===================================================================
RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/Repository/DBI.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -w -r1.5 -r1.6
--- DBI.pm 25 Jan 2002 19:24:28 -0000 1.5
+++ DBI.pm 30 Jan 2002 19:47:21 -0000 1.6
@@ -1,13 +1,13 @@
######################################################################
-## File: $Id: DBI.pm,v 1.5 2002/01/25 19:24:28 spadkins Exp $
+## File: $Id: DBI.pm,v 1.6 2002/01/30 19:47:21 spadkins Exp $
######################################################################
use P5EEx::Blue::P5EE;
use P5EEx::Blue::Repository;
package P5EEx::Blue::Repository::DBI;
-$VERSION = do { my @r=(q$Revision: 1.5 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
+$VERSION = do { my @r=(q$Revision: 1.6 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
use P5EEx::Blue::Repository;
@ISA = ( "P5EEx::Blue::Repository" );
@@ -380,7 +380,12 @@
}
else {
$value = $paramvalues->{$colstr};
+ if ($value =~ s/^!expr!//) {
+ $quoted = 0;
+ }
+ else {
$quoted = (defined $column_def->{quoted}) ? ($column_def->{quoted})
: ($value !~ /^-?[0-9.]+$/);
+ }
if ($quoted) {
$value =~ s/'/\\'/g;
$value = ($sqlop eq "like") ? "'%$value%'" : "'$value'";
@@ -421,14 +426,14 @@
# $startrow, $endrow,
# \@sortdircols, \@keycolidx, \@writeable, \@columntype,
\@summarykeys);
sub mk_select_joined_rows_sql {
- my ($self, $table, $cols, $params, $paramvaluehref, $ordercols, $startrow,
$endrow,
+ my ($self, $table, $cols, $params, $paramvalues, $ordercols, $startrow, $endrow,
$sortdircols, $keycolidx, $writeref, $reptyperef, $summarykeys) = @_;
if ($P5EEx::Blue::Repository::DEBUG &&
P5EEx::Blue::Repository->dbg(ref($self),"mk_select_joined_rows_sql")) {
- P5EEx::Blue::Repository->dbgprint("mk_select_joined_rows_sql($table,
col=$cols, p=$params, pv=$paramvaluehref, oc=$ordercols start=$startrow end=$endrow
dir=$sortdircols, key=$keycolidx, w=$writeref, typ=$reptyperef, sum=$summarykeys)");
+ P5EEx::Blue::Repository->dbgprint("mk_select_joined_rows_sql($table,
col=$cols, p=$params, pv=$paramvalues, oc=$ordercols start=$startrow end=$endrow
dir=$sortdircols, key=$keycolidx, w=$writeref, typ=$reptyperef, sum=$summarykeys)");
P5EEx::Blue::Repository->dbgprint(" cols=[", join(",",@$cols),
"]") if ($cols);
P5EEx::Blue::Repository->dbgprint(" params=[", join(",",@$params),
"]") if ($params);
- P5EEx::Blue::Repository->dbgprint("
paramvaluehref=[",join(",",%$paramvaluehref),"]") if ($paramvaluehref);
+ P5EEx::Blue::Repository->dbgprint("
paramvalues=[",join(",",%$paramvalues),"]") if ($paramvalues);
P5EEx::Blue::Repository->dbgprint(" ordercols=[",
join(",",@$ordercols), "]") if ($ordercols);
P5EEx::Blue::Repository->dbgprint(" sortdircols=[",
join(",",@$sortdircols), "]") if ($sortdircols);
P5EEx::Blue::Repository->dbgprint(" keycolidx=[", join(",",@$keycolidx),
"]") if ($keycolidx);
@@ -649,6 +654,8 @@
# create initial where conditions for the selected rows
############################################################
+ #print $self->{context}->dump(), "\n";
+
my %op = (
'contains' => 'like',
'eq' => '=',
@@ -661,14 +668,14 @@
);
my ($where_condition, @join_conditions, @criteria_conditions, $param, $sqlop,
$paramvalue);
- if (!defined $params && ref($paramvaluehref) eq "HASH") {
- $params = [ keys %$paramvaluehref ];
+ if (!defined $params && ref($paramvalues) eq "HASH") {
+ $params = [ keys %$paramvalues ];
}
for ($idx = 0; $idx <= $#$params; $idx++) {
$param = $params->[$idx];
next if (!defined $param || $param eq "");
- next if (!defined $paramvaluehref || $paramvaluehref->{$param} eq "");
+ next if (!defined $paramvalues || $paramvalues->{$param} eq "");
$column = $param;
@@ -712,12 +719,22 @@
next if (!defined $column_def); # skip if the column is unknown
- if (! defined $paramvaluehref->{$param}) {
+ if (! defined $paramvalues->{$param}) {
$paramvalue = "?"; # TODO: make this work with the "contains" operator
}
else {
- $paramvalue = $paramvaluehref->{$param};
+ $paramvalue = $paramvalues->{$param};
+
+ next if (defined $table_def->{param}{$param}{all_value} &&
+ $paramvalue eq $table_def->{param}{$param}{all_value});
+
+ if ($paramvalue =~ s/^!expr!//) {
+ $quoted = 0;
+ }
+ else {
$quoted = (defined $column_def->{quoted}) ? ($column_def->{quoted}) :
($paramvalue !~ /^-?[0-9.]+$/);
+ }
+
if ($sqlop eq "like") {
$paramvalue =~ s/'/\\'/g;
$paramvalue = "'%$paramvalue%'";
@@ -725,7 +742,7 @@
elsif ($sqlop eq "in" || $sqlop eq "=") {
if ($quoted) {
$paramvalue =~ s/'/\\'/g;
- if ($paramvalue =~ /,/) {
+ if ($paramvalue =~ /,/ && !
$table_def->{param}{$param}{no_auto_in_param}) {
$paramvalue =~ s/,/','/g;
$paramvalue = "('$paramvalue')";
$sqlop = "in";
@@ -736,7 +753,7 @@
}
}
else {
- if ($paramvalue =~ /,/) {
+ if ($paramvalue =~ /,/ && !
$table_def->{param}{$param}{no_auto_in_param}) {
$paramvalue = "($paramvalue)";
$sqlop = "in";
}
@@ -863,7 +880,7 @@
$sql .= "where " . join("\n and ",@join_conditions) . "\n";
}
$critsense = "AND";
- $critsense = $paramvaluehref->{"_query.critsense"} if (defined $paramvaluehref);
+ $critsense = $paramvalues->{"_query.critsense"} if (defined $paramvalues);
$critsense = "AND" if (!defined $critsense);
if ($#criteria_conditions >= 0) {
$sql .= ($#join_conditions == -1 ? "where " : " and ");