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;
   
  
  
  

Reply via email to