comparison Lib/IMPL/ORM/Object.pm @ 180:d1676be8afcc

Перекодировка в utf-8
author sourcer
date Fri, 30 Dec 2011 23:40:00 +0300
parents 4267a2ac3d46
children 4ddb27ff4a0b
comparison
equal deleted inserted replaced
179:b3d91ff7aea9 180:d1676be8afcc
54 sub ormGetSchema { 54 sub ormGetSchema {
55 my ($self,$dataSchema,$surrogate) = @_; 55 my ($self,$dataSchema,$surrogate) = @_;
56 56
57 my $schema = $surrogate || IMPL::ORM::Schema::Entity->new($self->entityName); 57 my $schema = $surrogate || IMPL::ORM::Schema::Entity->new($self->entityName);
58 58
59 # , 59 # для текущего класса, проходим по всем свойствам
60 foreach my $ormProp ( 60 foreach my $ormProp (
61 $self->get_meta( 61 $self->get_meta(
62 'IMPL::Class::PropertyInfo', 62 'IMPL::Class::PropertyInfo',
63 sub { 63 sub {
64 UNIVERSAL::isa($_->Implementor, 'IMPL::ORM::PropertyImplementor' ) 64 UNIVERSAL::isa($_->Implementor, 'IMPL::ORM::PropertyImplementor' )
65 }, 65 },
66 0 66 0
67 ) 67 )
68 ){ 68 ){
69 if ($ormProp->Mutators & prop_list) { 69 if ($ormProp->Mutators & prop_list) {
70 # 1 70 # отношение 1 ко многим
71 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); 71 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);
72 $schema->appendChild( new IMPL::ORM::Schema::Relation::HasMany($ormProp->Name, $type->entityName) ); 72 $schema->appendChild( new IMPL::ORM::Schema::Relation::HasMany($ormProp->Name, $type->entityName) );
73 } elsif (my $type = $dataSchema->isValueType($ormProp->Type)) { 73 } elsif (my $type = $dataSchema->isValueType($ormProp->Type)) {
74 # 74 # поле
75 $schema->appendChild( new IMPL::ORM::Schema::Field($ormProp->Name,$ormProp->Type) ); 75 $schema->appendChild( new IMPL::ORM::Schema::Field($ormProp->Name,$ormProp->Type) );
76 } elsif (my $entity = $dataSchema->resolveType($ormProp->Type)) { 76 } elsif (my $entity = $dataSchema->resolveType($ormProp->Type)) {
77 # 77 # отношение ссылка
78 $schema->appendChild( new IMPL::ORM::Schema::Relation::HasOne($ormProp->Name,$entity->entityName)); 78 $schema->appendChild( new IMPL::ORM::Schema::Relation::HasOne($ormProp->Name,$entity->entityName));
79 } else { 79 } else {
80 # . . 80 # хз что. Скорее всего не удалось квалифицировать тип свойства не как ссылочный и как поле.
81 die new IMPL::Exception('Uexpected error due building schema for a class', $ormProp->Class, $ormProp->Name,$ormProp->Type); 81 die new IMPL::Exception('Uexpected error due building schema for a class', $ormProp->Class, $ormProp->Name,$ormProp->Type);
82 } 82 }
83 } 83 }
84 84
85 # 85 # Формируем отношения наследования
86 { 86 {
87 # 87 # локализуем прагму
88 no strict 'refs'; 88 no strict 'refs';
89 89
90 my $class = ref $self || $self; 90 my $class = ref $self || $self;
91 91
92 # 92 # по всем классам
93 foreach my $super (grep $_->isa(__PACKAGE__), @{"${class}::ISA"}) { 93 foreach my $super (grep $_->isa(__PACKAGE__), @{"${class}::ISA"}) {
94 my $type = $dataSchema->resolveType($super) or die new IMPL::InvalidOperationException("Failed to resolve a super class due building schema for a class", $class, $super); 94 my $type = $dataSchema->resolveType($super) or die new IMPL::InvalidOperationException("Failed to resolve a super class due building schema for a class", $class, $super);
95 $schema->appendChild(new IMPL::ORM::Schema::Relation::Subclass($type)); 95 $schema->appendChild(new IMPL::ORM::Schema::Relation::Subclass($type));
96 } 96 }
97 } 97 }
105 105
106 =pod 106 =pod
107 107
108 =head1 DESCRIPTION 108 =head1 DESCRIPTION
109 109
110 , 110 Базовый объект для реляционного отображения,
111 . 111 содержит в себе реляционные записи представляющие данный объект.
112 112
113 . 113 Каждый класс отображается в определенную сущность. Сущности хранят
114 . 114 состояние объектов в том виде в котором удобно записывать в реляционную базу.
115 115
116 =cut 116 =cut