Persistence-Entity

 view release on metacpan or  search on metacpan

lib/Persistence/Meta/Injection.pm  view on Meta::CPAN

    my $lob_map = $orm->covert_to_lob_attributes($lobs);
    $orm->set_lobs($lob_map);
    
    for my $relation (@$to_one_relationships) {
        $self->_add_to_one_relationship($relation, $orm);
    }
    for my $relation (@$one_to_many_relationships) {
        $self->_add_one_to_many_relationship($relation, $orm);
    }
    for my $relation (@$many_to_many_relationships) {
        $self->_add_many_to_many_relationship($relation, $orm);
    }
    $orm;
}



=item _add_one_to_many_relationship

=cut

sub _add_one_to_many_relationship {
    my ($self, $relationship, $orm) = @_;
    Persistence::Relationship::OneToMany->add_relationship($self->_add_relationship_parameters($relationship, $orm));
}



=item _add_to_many_to_many_relationship

=cut

sub _add_many_to_many_relationship {
    my ($self, $relationship, $orm) = @_;
    Persistence::Relationship::ManyToMany->add_relationship($self->_add_relationship_parameters($relationship, $orm));
}


=item _add_to_one_relationship

=cut

sub _add_to_one_relationship {
    my ($self, $relationship, $orm) = @_;
    Persistence::Relationship::ToOne->add_relationship($self->_add_relationship_parameters($relationship, $orm));
}


=item _add_relationship_parameters

=cut

sub _add_relationship_parameters {
    my ($self, $relationship, $orm) = @_;
    my $attribute = $orm->attribute($relationship->{attribute});
    
    my @result = ($orm->class, $relationship->{name}, attribute => $attribute);
    if (my $fetch_method = $relationship->{fetch_method}) {
        push @result, 'fetch_method' => Persistence::Relationship->$fetch_method();
    }
    if (my $cascade = $relationship->{cascade}) {
        push @result, 'cascade' => Persistence::Relationship->$cascade();
    }
    
    if (my $join_entity = $relationship->{join_entity}) {
        push @result, 'join_entity_name' => $join_entity;
    }
    @result;
}



=item _relationship

Returns the relationship object.
Takes hash_ref, that will be transformed to the new object parameters.

=cut

sub _relationship {
    my ($self, $relationship) = @_;
    my $target_entity = ref($relationship->{target_entity}) ? $relationship->{target_entity}->id : $relationship->{target_entity};
    
    my $entity = $self->entity($target_entity)
        or confess "unknow entity " . $target_entity;
    $relationship->{target_entity} = $entity;
    my $condition = $relationship->{condition};
    $self->_parse_condition($condition) if $condition;
    sql_relationship(%$relationship);
}


=item _parse_condition

Parses condition object to replacase ant occurence of  <entity>.<column> to column object.

=cut

sub _parse_condition {
    my ($self, $condition) = @_;
    {
        my $operand1 = $condition->operand1;
        my ($entity, $column) = $self->has_column($operand1);
        $condition->set_operand1($self->entity_column($entity, $column)) if($column)
    }
    {
        my $operand2 = $condition->operand2;
        my ($entity, $column) = $self->has_column($operand2);
        $condition->set_operand2($self->entity_column($entity, $column)) if($column)
    }
    my $conditions = $condition->conditions;
    for my $k (@$conditions) {
        $self->_parse_condition($k);
    }

}


=item has_column

=cut



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