Mercurial > pub > Impl
view Lib/IMPL/ORM/Schema.pm @ 28:6d33f75c6e1f
ORM in works
author | Sergey |
---|---|
date | Mon, 19 Oct 2009 04:13:54 +0400 |
parents | |
children | dd4d72600c69 |
line wrap: on
line source
package IMPL::ORM::Schema; use strict; use warnings; use base qw(IMPL::DOM::Document); use IMPL::Class::Property; BEGIN { public property mapValueTypes => prop_get | owner_set; public property mapReferenceTypes => prop_get | owner_set; } sub CTOR { my ($this ) = @_; $this->mapValueTypes({}); $this->mapReferenceTypes({}); } # return an entity for the specified typename # makes forward declaration if nesessary sub resolveType { my ($this,$typeName) = @_; $this = ref $this ? $this : $this->instance; if (my $entity = $this->mapReferenceTypes->{$typeName}) { return $entity; } elsif (UNIVERSAL::isa($typeName,'IMPL::ORM::Object')) { return $this->declareReferenceType($typeName); } else { return undef; } } # returns valuetype name sub isValueType { my ($this,$typeName) = @_; $this = ref $this ? $this : $this->instance; return $this->mapValueTypes->{$typeName}; } my %instances; sub instance { my ($class) = @_; return ($instances{$class} || ($instances{$class} = $class->new)); } 1; __END__ =pod =head1 DESCRIPTION Схема данных, представляет собой DOM документ, элементами которой являются сущности. Каждый узел - это описание сущности. =cut