DBIx-DataModel
view release on metacpan or search on metacpan
t/v2_Dbix-DataModel.t view on Meta::CPAN
activities => {d_end => {"<" => '01.01.2001'}},
dpt => {dpt_head => 999},
},
);
$expected_sql_bind[0] = <<__EOSQL__;
SELECT * FROM T_Employee
LEFT OUTER JOIN T_Activity
ON T_Employee.emp_id = T_Activity.emp_id AND d_end < ?
LEFT OUTER JOIN T_Department AS dpt
ON T_Activity.dpt_id = dpt.dpt_id AND dpt_head = ?
WHERE dpt_name = ? AND firstname = ?
__EOSQL__
sqlLike(@expected_sql_bind, 'where_on with table alias');
# proper error message if not used on a join
{ eval { HR->table('Employee')->select(-where_on => {Foo => 'bar'}); };
my $err = $@;
like $err, qr/where_on/, 'error message when the source for -where_on is not a join' ;
}
# proper error message if wrong table in -where_on
{ eval {HR->join(qw/Employee activities => department|dpt/)->select(
-where => {firstname => 'Hector', dpt_name => 'Music'},
-where_on => {BAD_TABLE => {d_end => {"<" => '01.01.2001'}}},
); };
my $err = $@;
like $err, qr/where_on.*?BAD_TABLE/, 'error message for bad table in -where_on' ;
}
#----------------------------------------------------------------------
# test insert() method
#----------------------------------------------------------------------
# plain insertion using arrayref syntax
my ($bach_id, $berlioz_id, $monteverdi_id) =
HR::Employee->insert([qw/ firstname lastname /],
[qw/ Johann Bach /],
[qw/ Hector Berlioz /],
[qw/ Claudio Monteverdi /]);
my $insert_sql = 'INSERT INTO T_Employee (firstname, lastname) VALUES (?, ?)';
sqlLike($insert_sql, [qw/ Johann Bach /],
$insert_sql, [qw/ Hector Berlioz /],
$insert_sql, [qw/ Claudio Monteverdi /],
'insert with arrayref syntax');
# insertion into related class
$emp->insert_into_activities({d_begin =>'2000-01-01', d_end => '2000-02-02'});
sqlLike('INSERT INTO T_Activity (d_begin, d_end, emp_id) ' .
'VALUES (?, ?, ?)', ['2000-01-01', '2000-02-02', 999],
'add_to_activities');
# cascaded inserts
my $tree = {firstname => "Johann Sebastian",
lastname => "Bach",
activities => [{d_begin => '01.01.1707',
d_end => '01.07.1720',
dpt_code => 'Maria-Barbara'},
{d_begin => '01.12.1721',
d_end => '18.07.1750',
dpt_code => 'Anna-Magdalena'}]};
my $emp_id = HR::Employee->insert(clone($tree));
my $sql_insert_activity = 'INSERT INTO T_Activity (d_begin, d_end, '
. 'dpt_code, emp_id) VALUES (?, ?, ?, ?)';
sqlLike('INSERT INTO T_Employee (firstname, lastname) VALUES (?, ?)',
["Johann Sebastian", "Bach"],
$sql_insert_activity,
['1707-01-01', '1720-07-01', 'Maria-Barbara', $emp_id],
$sql_insert_activity,
['1721-12-01', '1750-07-18', 'Anna-Magdalena', $emp_id],
"cascaded insert");
# option -returning => {}
$dbh->{mock_start_insert_id} = 10;
$result = HR::Employee->insert(clone($tree), -returning => {});
my $expected = { emp_id => 10,
activities => [{act_id => 11}, {act_id => 12}]};
is_deeply($result, $expected, "results from -returning => {}");
# insert with literal SQL
$emp_id = HR::Employee->insert({
birthdate => \["TO_DATE(?, 'DD.MM.YYYY')", "10.09.1659"],
firstname => "Henry",
lastname => "Purcell",
});
sqlLike( q[INSERT INTO T_Employee (birthdate, firstname, lastname) ]
.q[VALUES (TO_DATE(?, 'DD.MM.YYYY'), ?, ?)],
["10.09.1659", "Henry", "Purcell"],
"insert with SQL function");
#----------------------------------------------------------------------
# test update() method
#----------------------------------------------------------------------
# syntax $class->update($pk, {...})
HR::Employee->update(999, {firstname => 'toto',
d_modif => '02.09.2005',
d_birth => '01.01.1950',
last_login => '01.09.2005'});
sqlLike('UPDATE T_Employee SET d_birth = ?, firstname = ? '.
'WHERE (emp_id = ?)', ['1950-01-01', 'toto', 999], 'update');
# -set / -where / -ident
HR->table('Employee')->update(
-set => {foo => 123},
-where => {baz => {">" => {-ident => 'buz'}}},
);
sqlLike("UPDATE T_Employee SET foo = ? WHERE baz > buz",
[123],
"update(-set => .., -where => { ... -ident})");
# syntax $class->update($obj)
HR::Employee->update( {firstname => 'toto',
d_modif => '02.09.2005',
d_birth => '01.01.1950',
last_login => '01.09.2005',
emp_id => 999});
sqlLike('UPDATE T_Employee SET d_birth = ?, firstname = ? '.
'WHERE (emp_id = ?)', ['1950-01-01', 'toto', 999], 'update2');
# syntax $instance->update()
$emp = HR::Employee->bless_from_DB({emp_id => 999,
firstname => 'Joseph',
lastname => 'BODIN DE BOISMORTIER',
d_birth => '1775-12-16'});
( run in 0.709 second using v1.01-cache-2.11-cpan-39bf76dae61 )