DBIx-DataModel

 view release on metacpan or  search on metacpan

t/v2_db_schema.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use FindBin;
use lib "$FindBin::Bin/lib";
use DBIDM_Test qw/die_ok sqlLike HR_connect $dbh/;

HR_connect;
my $schema = 'HR';

# override the update method in one of the generated classes
package HR::Department;
use DBIx::DataModel::Meta::Utils qw/does/;
sub update {
  my $self      = shift;
  my $to_update = $_[-1];

  if (does($to_update, 'HASH')) {
    $to_update->{__UPDATE_METHOD} = 'was_overridden';
  }
  return $self->next::method(@_);
}

package main;



my $emp = $schema->table('Employee')->bless_from_DB({
  firstname => 'Joseph',
  lastname  => 'BODIN DE BOISMORTIER',
  d_birth   => '1775-12-16',
  emp_id    => 999,
});


my $connected_source = $schema->table('Employee');

my $statement = $connected_source->join(qw/activities department/);
$statement->refine(-where => {gender => 'F'});
$statement->refine(-where => {gender => {'!=' => 'M'}});
$statement->prepare;
my $row = $statement->execute($emp)->next;
sqlLike('SELECT * ' .
        'FROM T_Activity ' .
        'INNER JOIN T_Department ' .
        'ON T_Activity.dpt_id=T_Department.dpt_id ' .
        'WHERE (emp_id = ? AND gender = ? AND gender != ?)', [999, 'F', 'M'],
        'statement prepare/execute');


$emp->update;
sqlLike('UPDATE T_Employee SET d_birth = ?, firstname = ?, lastname = ? '
       .'WHERE emp_id = ?',
       ['1775-12-16', 'Joseph', 'BODIN DE BOISMORTIER', 999],
       'update object');

$connected_source->update(987, {firstname => 'Boudin'});
sqlLike('UPDATE T_Employee SET firstname = ? WHERE emp_id = ?',
       ['Boudin', 987],
       'update from class');

$connected_source->update(-set => {firstname => 'Boudin'},
                          -where => {emp_id => {'>' => 10}});
sqlLike('UPDATE T_Employee SET firstname = ? WHERE emp_id > ?',
       ['Boudin', 10],
       'bulk update');

is ($connected_source->metadm, $schema->db_table('T_Employee')->metadm,
    "db_table() - correct name");
ok (!$schema->db_table('foobar'),
    "db_table() - incorrect name");


# check that the overridden update() method is invoked



( run in 0.709 second using v1.01-cache-2.11-cpan-39bf76dae61 )