Mercurial > pub > Impl
comparison Lib/IMPL/ORM/Schema.pm @ 38:d660fb38b7cc
small fixes
ORM shema to SQL schema transformation
author | Sergey |
---|---|
date | Mon, 23 Nov 2009 17:57:07 +0300 |
parents | d59526f6310e |
children | 009aa9ca2e48 |
comparison
equal
deleted
inserted
replaced
37:c2e7f7c96bcd | 38:d660fb38b7cc |
---|---|
3 use warnings; | 3 use warnings; |
4 | 4 |
5 use base qw(IMPL::DOM::Document); | 5 use base qw(IMPL::DOM::Document); |
6 use IMPL::Class::Property; | 6 use IMPL::Class::Property; |
7 require IMPL::ORM::Schema::Entity; | 7 require IMPL::ORM::Schema::Entity; |
8 require IMPL::ORM::Schema::ValueType; | |
8 | 9 |
9 our %CTOR = ( | 10 our %CTOR = ( |
10 'IMPL::DOM::Document' => sub { nodeName => 'Schema' } | 11 'IMPL::DOM::Document' => sub { nodeName => 'ORMSchema' } |
11 ); | 12 ); |
12 | 13 |
13 BEGIN { | 14 BEGIN { |
14 public property mapValueTypes => prop_get | owner_set; | 15 private property mapValueTypes => prop_all; |
15 public property mapReferenceTypes => prop_get | owner_set; | 16 private property mapReferenceTypes => prop_all; |
16 public property mapPending => prop_get | owner_set; | 17 private property mapPending => prop_all; |
17 public property prefix => prop_get | owner_set; | 18 public property prefix => prop_get | owner_set; |
18 } | 19 } |
19 | 20 |
20 sub CTOR { | 21 sub CTOR { |
21 my ($this ) = @_; | 22 my ($this ) = @_; |
43 sub declareReferenceType { | 44 sub declareReferenceType { |
44 my ($this,$typeName) = @_; | 45 my ($this,$typeName) = @_; |
45 | 46 |
46 my $entity = new IMPL::ORM::Schema::Entity($typeName); | 47 my $entity = new IMPL::ORM::Schema::Entity($typeName); |
47 | 48 |
49 $this->appendChild($entity); | |
50 | |
48 $this->mapPending->{$typeName} = $entity; | 51 $this->mapPending->{$typeName} = $entity; |
49 | 52 |
50 return $this->mapReferenceTypes->{$typeName} = $entity; | 53 return $this->mapReferenceTypes->{$typeName} = $entity; |
51 } | 54 } |
52 | 55 |
53 sub _addReferenceType { | 56 sub _addReferenceType { |
54 my ($this,$className) = @_; | 57 my ($this,$className) = @_; |
55 | 58 |
56 $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this,delete $this->mapPending->{$className}); | 59 $this->mapReferenceTypes->{$className} = $className->ormGetSchema($this,delete $this->mapPending->{$className} || $this->appendChild(new IMPL::ORM::Schema::Entity($className))); |
57 } | 60 } |
58 | 61 |
59 # returns valuetype name | 62 # returns valuetype name |
60 sub isValueType { | 63 sub isValueType { |
61 my ($this,$typeName) = @_; | 64 my ($this,$typeName) = @_; |
62 | 65 |
63 $this = ref $this ? $this : $this->instance; | 66 $this = ref $this ? $this : $this->instance; |
64 | 67 |
65 return $this->mapValueTypes->{$typeName}; | 68 return $this->mapValueTypes->{$typeName}; |
69 } | |
70 | |
71 sub ReferenceTypes { | |
72 my ($this) = @_; | |
73 | |
74 values %{$this->mapReferenceTypes}; | |
66 } | 75 } |
67 | 76 |
68 my %instances; | 77 my %instances; |
69 sub instance { | 78 sub instance { |
70 my ($class) = @_; | 79 my ($class) = @_; |
75 sub ValueTypes { | 84 sub ValueTypes { |
76 my ($this,%classes) = @_; | 85 my ($this,%classes) = @_; |
77 | 86 |
78 $this = ref $this ? $this : $this->instance; | 87 $this = ref $this ? $this : $this->instance; |
79 | 88 |
80 $this->mapValueTypes->{$_} = $classes{$_} foreach keys %classes; | 89 $this->mapValueTypes->{$_} = $this->appendChild( |
90 IMPL::ORM::Schema::ValueType->new( | |
91 name => $_, | |
92 mapper => $classes{$_} | |
93 ) | |
94 ) foreach keys %classes; | |
81 } | 95 } |
82 | 96 |
83 sub Classes { | 97 sub Classes { |
84 my ($this,@classNames) = @_; | 98 my ($this,@classNames) = @_; |
85 | 99 |