Mercurial > pub > Impl
diff Lib/IMPL/ORM/Schema.pm @ 42:4ff27cd051e3
updated ORM schema model
author | Sergey |
---|---|
date | Thu, 07 Jan 2010 15:34:42 +0300 |
parents | d59526f6310e |
children | 009aa9ca2e48 |
line wrap: on
line diff
--- a/Lib/IMPL/ORM/Schema.pm Mon Nov 23 00:59:06 2009 +0300 +++ b/Lib/IMPL/ORM/Schema.pm Thu Jan 07 15:34:42 2010 +0300 @@ -5,6 +5,7 @@ use base qw(IMPL::DOM::Document); use IMPL::Class::Property; require IMPL::ORM::Schema::Entity; +require IMPL::ORM::Schema::ValueType; our %CTOR = ( 'IMPL::DOM::Document' => sub { nodeName => 'Schema' } @@ -47,13 +48,20 @@ $this->mapPending->{$typeName} = $entity; + $this->appendChild($entity); + return $this->mapReferenceTypes->{$typeName} = $entity; } sub _addReferenceType { my ($this,$className) = @_; - $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this,delete $this->mapPending->{$className}); + if ( my $entity = delete $this->mapPending->{$className} ) { + $className->ormGetSchema($this,$entity); + } else { + return $this->appendChild( $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this) ); + } + } # returns valuetype name @@ -77,7 +85,10 @@ $this = ref $this ? $this : $this->instance; - $this->mapValueTypes->{$_} = $classes{$_} foreach keys %classes; + while ( my ($typeName,$typeReflected) = each %classes ) { + $this->mapValueTypes->{$typeName} = $typeReflected; + $this->appendChild(IMPL::ORM::Schema::ValueType->new($typeName,$typeReflected)); + } } sub Classes { @@ -101,8 +112,7 @@ $this = ref $this ? $this : $this->instance; - $this->mapReferenceTypes->{$_} = $_->ormGetSchema($this,delete $this->mapPending->{$_}) - foreach (keys %{$this->mapPending}); + $_->ormGetSchema($this,delete $this->mapPending->{$_}) foreach (keys %{$this->mapPending}); } 1; @@ -118,4 +128,18 @@ Каждый узел - это описание сущности. +<Schema> + <Entity entityName="My_Data_Foo"> + <Field fieldName="Doo" fieldType="String"/> + <HasMany name="Boxes" target="My_Data_Box"/> + </Entity> + <Entity entityName="My_Data_Bar"> + <Subclass base="My_Data_Foo"/> + <Field fieldName="Timestamp" fieldType="Integer"/> + </Entity> + <Entity entityName="My_Data_Box"> + <Field fieldName="Capacity" fieldType="Integer"/> + </Entity> +</Schema> + =cut \ No newline at end of file