Mercurial > pub > Impl
diff Lib/IMPL/ORM/Object.pm @ 29:37160f7c8edb
minor changes
author | Sergey |
---|---|
date | Wed, 21 Oct 2009 17:30:20 +0400 |
parents | 6d33f75c6e1f |
children | dd4d72600c69 |
line wrap: on
line diff
--- a/Lib/IMPL/ORM/Object.pm Mon Oct 19 04:13:54 2009 +0400 +++ b/Lib/IMPL/ORM/Object.pm Wed Oct 21 17:30:20 2009 +0400 @@ -56,6 +56,7 @@ my $schema = IMPL::ORM::Schema::Entity->new($self->entityName); + # для текущего класса, проходим по всем свойствам foreach my $ormProp ( $self->get_meta( 'IMPL::Class::PropertyInfo', @@ -66,17 +67,35 @@ ) ){ if ($ormProp->Mutators & prop_list) { + # отношение 1 ко многим my $type = $dataSchema->resolveType($ormProp->Type) or die new IMPL::InvalidOperationException("Failed to resolve a reference type due building schema for a class", $ormProp->Class, $ormProp->Name); $schema->appendChild( new IMPL::ORM::Schema::Relation::HasMany($ormProp->Name, $type->entityName) ); } elsif (my $type = $dataSchema->isValueType($ormProp->Type,'IMPL::ORM::Object')) { + # поле $schema->appendChild( new IMPL::ORM::Schema::Field($ormProp->Name,$type) ); } elsif (my $entity = $dataSchema->resolveType($ormProp->Type)) { + # отношение ссылка $schema->appendChild( new IMPL::ORM::Schema::Relation::HasOne($ormProp->Name,$entity->entityName)); } else { + # хз что. Скорее всего не удалось квалифицировать тип свойства не как ссылочный и как поле. die new IMPL::Exception('Uexpected error due building schema for a class', $ormProp->Class, $ormProp->Name); } } + # Формируем отношения наследования + { + # локализуем прагму + no strict 'refs'; + + my $class = ref $self || $self; + + # по всем классам + foreach my $super (grep $_->isa(__PACKAGE__), @{"${class}::ISA"}) { + my $type = $dataSchema->resolveType($super) or die new IMPL::InvalidOperationException("Failed to resolve a super class due building schema for a class", $class, $super); + $schema->appentChild(new IMPL::ORM::Schema::Relation::Subclass($type)); + } + } + return $schema; }