Mercurial > pub > Impl
comparison Lib/IMPL/ORM/Schema.pm @ 28:6d33f75c6e1f
ORM in works
| author | Sergey |
|---|---|
| date | Mon, 19 Oct 2009 04:13:54 +0400 |
| parents | |
| children | dd4d72600c69 |
comparison
equal
deleted
inserted
replaced
| 27:b544a772b654 | 28:6d33f75c6e1f |
|---|---|
| 1 package IMPL::ORM::Schema; | |
| 2 use strict; | |
| 3 use warnings; | |
| 4 | |
| 5 use base qw(IMPL::DOM::Document); | |
| 6 use IMPL::Class::Property; | |
| 7 | |
| 8 BEGIN { | |
| 9 public property mapValueTypes => prop_get | owner_set; | |
| 10 public property mapReferenceTypes => prop_get | owner_set; | |
| 11 } | |
| 12 | |
| 13 sub CTOR { | |
| 14 my ($this ) = @_; | |
| 15 $this->mapValueTypes({}); | |
| 16 $this->mapReferenceTypes({}); | |
| 17 } | |
| 18 | |
| 19 # return an entity for the specified typename | |
| 20 # makes forward declaration if nesessary | |
| 21 sub resolveType { | |
| 22 my ($this,$typeName) = @_; | |
| 23 | |
| 24 $this = ref $this ? $this : $this->instance; | |
| 25 | |
| 26 if (my $entity = $this->mapReferenceTypes->{$typeName}) { | |
| 27 return $entity; | |
| 28 } elsif (UNIVERSAL::isa($typeName,'IMPL::ORM::Object')) { | |
| 29 return $this->declareReferenceType($typeName); | |
| 30 } else { | |
| 31 return undef; | |
| 32 } | |
| 33 } | |
| 34 | |
| 35 # returns valuetype name | |
| 36 sub isValueType { | |
| 37 my ($this,$typeName) = @_; | |
| 38 | |
| 39 $this = ref $this ? $this : $this->instance; | |
| 40 | |
| 41 return $this->mapValueTypes->{$typeName}; | |
| 42 } | |
| 43 | |
| 44 my %instances; | |
| 45 sub instance { | |
| 46 my ($class) = @_; | |
| 47 | |
| 48 return ($instances{$class} || ($instances{$class} = $class->new)); | |
| 49 } | |
| 50 | |
| 51 1; | |
| 52 | |
| 53 __END__ | |
| 54 | |
| 55 =pod | |
| 56 | |
| 57 =head1 DESCRIPTION | |
| 58 | |
| 59 Схема данных, представляет собой DOM документ, элементами которой | |
| 60 являются сущности. | |
| 61 | |
| 62 Каждый узел - это описание сущности. | |
| 63 | |
| 64 =cut |
