Mercurial > pub > Impl
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 |