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 )