Persistence-Entity
view release on metacpan or search on metacpan
t/meta/xml.t view on Meta::CPAN
],
indexes => [
sql_index(name => 'emp_idx_empno', columns => ['empno'], hint => "INDEX_ASC(e emp_idx_empno)"),
sql_index(name => 'emp_idx_ename', columns => ['ename']),
],), 'should have subquery on emp entity');
}
{
$meta->injection->_initialise_to_one_relationships();
$meta->injection->_initialise_to_many_relationships();
my $emp = $meta->injection->entity('emp');
my $dept = $meta->injection->entity('dept');
my $cond = sql_cond($dept->column('deptno'), '=', $emp->column('deptno'));
$cond->conditions;
is_deeply($emp, Persistence::Entity->new(
name => 'emp',
alias => 'e',
primary_key => ['empno'],
subquery_columns => [$dept->column('dname')],
columns => [
sql_column(name => 'ename', unique => 1),
sql_column(name => 'empno'),
sql_column(name => 'job'),
sql_column(name => 'deptno')
],
to_one_relationships => [
sql_relationship(target_entity => $dept, join_columns => ['deptno'], condition => $cond)
],
indexes => [
sql_index(name => 'emp_idx_empno', columns => ['empno'], hint => "INDEX_ASC(e emp_idx_empno)"),
sql_index(name => 'emp_idx_ename', columns => ['ename']),
],), 'should have subquery on emp entity');
}
package Employee;
use Abstract::Meta::Class ':all';
has '$.id';
has '$.name';
has '$.job';
has '$.dept' => (associated_class => 'Department');
package Department;
use Abstract::Meta::Class ':all';
has '$.id';
has '$.name';
has '$.location';
has '@.employees' => (associated_class => 'Employee');
$xml = $meta->orm_xml_handler;
$meta->injection-> set_entity_manager(Persistence::Entity::Manager->new(name => 'test', connection_name => 'test'));
my $xml_content = '<?xml version="1.0" encoding="UTF-8"?>
<orm entity="emp" class="Employee" >
<column name="empno" attribute="id" />
<column name="ename" attribute="name" />
<column name="job" attribute="job" />
<to_one_relationship name="dept" attribute="dept" fetch_method="LAZY" cascade="ALL"/>
</orm>
';
$xml->parse_string($xml_content);
$meta->injection->load_persistence_context($meta);
my $orm = $meta->injection->entity_manager->find_entity_mappings('Employee');
::isa_ok($orm, 'Persistence::ORM');
::isa_ok($orm->_column('ename'), 'Persistence::Attribute', 'should have ename column mapping');
::isa_ok($orm->_column('empno'), 'Persistence::Attribute', 'should have empno column mapping');
::isa_ok($orm->_column('job'), 'Persistence::Attribute', 'should have job column mapping');
}
{
my $meta = $class->new(persistence_dir => 't/meta/xml/');
$meta->set_injection(Persistence::Meta::Injection->new);
my $xml = $meta->persistence_xml_handler;
{
my $xml_content = '<?xml version="1.0" encoding="UTF-8"?>
<persistence name="test" connection_name="test" >
<entities>
<entity_file file="emp.xml" />
<entity_file file="dept.xml" />
</entities>
<mapping_rules>
<orm_file file="Employee.xml" />
</mapping_rules>
</persistence>
';
$xml->parse_string($xml_content);
my $manager = $meta->injection->load_persistence_context($meta);
isa_ok($manager, 'Persistence::Entity::Manager');
my $emp = $manager->entity('emp');
isa_ok($emp, 'Persistence::Entity');
my $dept = $manager->entity('dept');
isa_ok($dept, 'Persistence::Entity');
}
my $entity_manager = $meta->inject('persistence.xml');
isa_ok($entity_manager, 'Persistence::Entity::Manager');
}
( run in 0.515 second using v1.01-cache-2.11-cpan-39bf76dae61 )