cvsuser 03/06/18 13:43:27
Modified: App-Repository/lib/App/Repository DBI.pm
App-Repository/t DBI-delete.t
Log:
added begin/end params to update/delete
Revision Changes Path
1.10 +24 -11 p5ee/App-Repository/lib/App/Repository/DBI.pm
Index: DBI.pm
===================================================================
RCS file: /cvs/public/p5ee/App-Repository/lib/App/Repository/DBI.pm,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -w -r1.9 -r1.10
--- DBI.pm 18 Jun 2003 20:28:45 -0000 1.9
+++ DBI.pm 18 Jun 2003 20:43:26 -0000 1.10
@@ -1,13 +1,13 @@
######################################################################
-## File: $Id: DBI.pm,v 1.9 2003/06/18 20:28:45 spadkins Exp $
+## File: $Id: DBI.pm,v 1.10 2003/06/18 20:43:26 spadkins Exp $
######################################################################
use App;
use App::Repository;
package App::Repository::DBI;
-$VERSION = do { my @r=(q$Revision: 1.9 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
+$VERSION = do { my @r=(q$Revision: 1.10 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
@ISA = ( "App::Repository" );
@@ -912,7 +912,7 @@
sub _mk_where_clause {
&App::sub_entry if ($App::trace_subs);
my ($self, $table, $params, $options) = @_;
- my ($where, $column, $colstr, $value, $colnum, $repop, $sqlop, $column_def,
$quoted);
+ my ($where, $column, $param, $value, $colnum, $repop, $sqlop, $column_def,
$quoted);
my ($tabledef, $tabcols, %sqlop, $alias, $dbexpr);
$tabledef = $self->{table}{$table};
@@ -937,12 +937,12 @@
}
if (defined $param_order && $#$param_order > -1) {
for ($colnum = 0; $colnum <= $#$param_order; $colnum++) {
- $colstr = $param_order->[$colnum];
- $column = $colstr;
+ $param = $param_order->[$colnum];
+ $column = $param;
$sqlop = "=";
$repop = "";
# check if $column contains an embedded operation, i.e. "name.eq",
"name.contains"
- if ($colstr =~ /^(.*)\.([^.]+)$/) {
+ if ($param =~ /^(.*)\.([^.]+)$/) {
$repop = $2;
if ($sqlop{$repop}) {
$column = $1;
@@ -950,17 +950,30 @@
}
}
$column_def = $tabcols->{$column};
+
+ if (!defined $column_def) {
+ if ($param =~ /^begin_(.*)/) {
+ $column = $1;
+ $sqlop = ">=";
+ }
+ elsif ($param =~ /^end_(.*)/) {
+ $column = $1;
+ $sqlop = "<=";
+ }
+ $column_def = $tabcols->{$column};
+ }
+
next if (!defined $column_def); # skip if the column is unknown
- if (! defined $params->{$colstr}) {
+ if (! defined $params->{$param}) {
$value = "?"; # TODO: make this work with the "contains/matches"
operators
}
else {
- $value = $params->{$colstr};
+ $value = $params->{$param};
if ($value =~ s/^!expr!//) {
$quoted = 0;
}
- elsif ($value =~ /,/ && !
$tabledef->{param}{$colstr}{no_auto_in_param}) {
+ elsif ($value =~ /,/ && !
$tabledef->{param}{$param}{no_auto_in_param}) {
$quoted = (defined $column_def->{quoted}) ?
($column_def->{quoted}) : ($value !~ /^-?[0-9.,]+$/);
}
else {
@@ -979,7 +992,7 @@
elsif ($sqlop eq "in" || $sqlop eq "=") {
if ($quoted) {
$value =~ s/'/\\'/g;
- if ($value =~ /,/ && !
$tabledef->{param}{$colstr}{no_auto_in_param}) {
+ if ($value =~ /,/ && !
$tabledef->{param}{$param}{no_auto_in_param}) {
$value =~ s/,/','/g;
$value = "('$value')";
$sqlop = "in";
@@ -990,7 +1003,7 @@
}
}
else {
- if ($value =~ /,/ && !
$tabledef->{param}{$colstr}{no_auto_in_param}) {
+ if ($value =~ /,/ && !
$tabledef->{param}{$param}{no_auto_in_param}) {
$value = "($value)";
$sqlop = "in";
}
1.3 +33 -7 p5ee/App-Repository/t/DBI-delete.t
Index: DBI-delete.t
===================================================================
RCS file: /cvs/public/p5ee/App-Repository/t/DBI-delete.t,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- DBI-delete.t 18 Jun 2003 20:28:46 -0000 1.2
+++ DBI-delete.t 18 Jun 2003 20:43:26 -0000 1.3
@@ -163,13 +163,6 @@
$expect_sql = <<EOF;
delete from test_person
-where weekday(birth_dt) in (1,7)
-EOF
-$sql = $rep->_mk_delete_sql("test_person", { "birth_dow" => "1,7" });
-is($sql, $expect_sql, "_mk_delete_sql(): dbexpr");
-
-$expect_sql = <<EOF;
-delete from test_person
where first_name like 's%'
and gender like '%M%'
EOF
@@ -188,6 +181,39 @@
["person_id","age","first_name","gender","state"],
{ordercols=>["first_name"],});
is_deeply($rows,$rows4,"rows after deleting with matches/contains");
+
+$expect_sql = <<EOF;
+delete from test_person
+where weekday(birth_dt) in (1,7)
+EOF
+$sql = $rep->_mk_delete_sql("test_person", { "birth_dow" => "1,7" });
+is($sql, $expect_sql, "_mk_delete_sql(): dbexpr");
+
+$expect_sql = <<EOF;
+delete from test_person
+where birth_dt >= '1960-01-01'
+ and birth_dt <= '1965-12-31'
+EOF
+$sql = $rep->_mk_delete_sql("test_person",
+ {
+ _order => [ "begin_birth_dt", "end_birth_dt" ],
+ "begin_birth_dt" => "1960-01-01",
+ "end_birth_dt" => "1965-12-31",
+ });
+is($sql, $expect_sql, "_mk_delete_sql(): begin/end params (quoted)");
+
+$expect_sql = <<EOF;
+delete from test_person
+where birth_dt >= '19600101'
+ and birth_dt <= '19651231'
+EOF
+$sql = $rep->_mk_delete_sql("test_person",
+ {
+ _order => [ "begin_birth_dt", "end_birth_dt" ],
+ "begin_birth_dt" => "19600101",
+ "end_birth_dt" => "19651231",
+ });
+is($sql, $expect_sql, "_mk_delete_sql(): begin/end params (unquoted)");
exit 0;