cvsuser     03/06/18 07:55:04

  Added:       App-Repository/t DBI-delete.t
  Log:
  new
  
  Revision  Changes    Path
  1.1                  p5ee/App-Repository/t/DBI-delete.t
  
  Index: DBI-delete.t
  ===================================================================
  #!/usr/local/bin/perl -w
  
  use Test::More qw(no_plan);
  use lib "../App-Context/lib";
  use lib "../../App-Context/lib";
  use lib "lib";
  use lib "../lib";
  
  use App;
  use App::Repository;
  use strict;
  
  my $context = App->context(
      conf_file => "",
      conf => {
          Repository => {
              default => {
                  class => "App::Repository::MySQL",
                  dbidriver => "mysql",
                  dbname => "test",
                  dbuser => "dbuser",
                  dbpass => "dbuser7",
                  table => {
                      test_person => {
                          primary_key => ["person_id"],
                      },
                  },
              },
          },
      },
  );
  
  my $rep = $context->repository();
  
  #cheating... I know its a DBI, but I have to set up the test somehow
  my $dbh     = $rep->{dbh};
  eval { $dbh->do("drop table test_person"); };
  my $ddl     = <<EOF;
  create table test_person (
      person_id          integer      not null auto_increment primary key,
      first_name         varchar(99)  null,
      last_name          varchar(99)  null,
      address            varchar(99)  null,
      city               varchar(99)  null,
      state              varchar(99)  null,
      zip                varchar(10)  null,
      country            char(2)      null,
      home_phone         varchar(99)  null,
      work_phone         varchar(99)  null,
      email_address      varchar(99)  null,
      gender             char(1)      null,
      birth_dt           date         null,
      age                integer      null,
      index person_ie1 (last_name, first_name)
  )
  EOF
  $dbh->do($ddl);
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values 
(1,39,'stephen',  'M','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values 
(2,37,'susan',    'F','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (3, 
6,'maryalice','F','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (4, 
3,'paul',     'M','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (5, 
1,'christine','F','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values 
(6,45,'tim',      'M','GA')");
  $dbh->do("insert into test_person (person_id,age,first_name,gender,state) values 
(7,39,'keith',    'M','GA')");
  
  my $columns = [ "person_id", "age", "first_name", "gender", "state", "birth_dt" ];
  
  sub check_exec {
      my ($sql, $expected_rows) = @_;
  
      my ($nrows);
      eval {
          $nrows = $dbh->do($sql);
      };
      is($@,"","sql ok");
  
      if (defined $expected_rows) {
          is($nrows, $expected_rows, "num rows $expected_rows");
      }
  }
  
  my ($sql, $expect_sql, $rows, $nrows);
  
  ###############################################################################
  # UPDATE
  ###############################################################################
  
  my $rows1 = [
    [ 5, 1,'christine','F','GA'],
    [ 7,39,'keith',    'M','GA'],
    [ 3, 6,'maryalice','F','GA'],
    [ 4, 3,'paul',     'M','GA'],
    [ 1,39,'stephen',  'M','GA'],
    [ 2,37,'susan',    'F','GA'],
    [ 6,45,'tim',      'M','GA'],
  ];
  
  # delete age 6
  my $rows2 = [
    [ 5, 1,'christine','F','GA'],
    [ 7,39,'keith',    'M','GA'],
    [ 4, 3,'paul',     'M','GA'],
    [ 1,39,'stephen',  'M','GA'],
    [ 2,37,'susan',    'F','GA'],
    [ 6,45,'tim',      'M','GA'],
  ];
  
  # delete age >= 39, gender in ('M','F'), person_id > 5
  my $rows3 = [
    [ 5, 1,'christine','F','GA'],
    [ 4, 3,'paul',     'M','GA'],
    [ 1,39,'stephen',  'M','GA'],
    [ 2,37,'susan',    'F','GA'],
  ];
  
  # delete first_name matches 's*' and gender contains 'M'
  my $rows4 = [
    [ 5, 1,'christine','F','GA'],
    [ 4, 3,'paul',     'M','GA'],
    [ 2,37,'susan',    'F','GA'],
  ];
  
  $rows = $rep->get_rows("test_person", {},
      ["person_id","age","first_name","gender","state"],
      {ordercols=>["first_name"],});
  is_deeply($rows,$rows1,"rows after deleting age 6");
  
  $expect_sql = <<EOF;
  delete from test_person
  where age = 6
  EOF
  $sql = $rep->_mk_delete_sql("test_person",{age => 6});
  is($sql, $expect_sql, "_mk_delete_sql(): 1 param");
  
  $expect_sql = <<EOF;
  delete from test_person
  where age = 6
    and gender = 'F'
  EOF
  $sql = $rep->_mk_delete_sql("test_person",{_order => ["age","gender"], age => 6, 
gender => "F"});
  is($sql, $expect_sql, "_mk_delete_sql(): 2 params");
  
  &check_exec($sql,1);
  
  $rows = $rep->get_rows("test_person", {},
      ["person_id","age","first_name","gender","state"],
      {ordercols=>["first_name"],});
  is_deeply($rows,$rows2,"rows after deleting age 6");
  
  $nrows = $rep->delete("test_person", {"age.ge" => 39, gender => "M,F", 
"person_id.gt" => 5});
  is($nrows,2,"delete() 2 rows");
  
  $rows = $rep->get_rows("test_person", {},
      ["person_id","age","first_name","gender","state"],
      {ordercols=>["first_name"],});
  is_deeply($rows,$rows3,"rows after deleting 3 params");
  
  $expect_sql = <<EOF;
  delete from test_person
  where first_name like 's%'
    and gender like '%M%'
  EOF
  $sql = $rep->_mk_delete_sql("test_person",
     {
        _order => ["first_name.matches","gender.contains"],
        "first_name.matches" => "s*",
        "gender.contains" => "M"
     }
  );
  is($sql, $expect_sql, "_mk_delete_sql(): matches/contains params");
  
  &check_exec($sql,1);
  
  $rows = $rep->get_rows("test_person", {},
      ["person_id","age","first_name","gender","state"],
      {ordercols=>["first_name"],});
  is_deeply($rows,$rows4,"rows after deleting with matches/contains");
  
  exit 0;
  
  
  
  

Reply via email to