Mercurial > pub > Impl
changeset 79:2d1c3f713280
ORM concept in development
author | wizard |
---|---|
date | Mon, 05 Apr 2010 00:20:34 +0400 (2010-04-04) |
parents | a5cb84374d40 |
children | f017c0d7527c |
files | Lib/IMPL/DOM/Transform/PostToDOM.pm Lib/IMPL/ORM.pm Lib/IMPL/ORM/Adapter/Generic.pm Lib/IMPL/ORM/Schema.pm Lib/IMPL/ORM/Schema/GenericClass.pm Lib/IMPL/ORM/Schema/TransformToSQL.pm Lib/IMPL/ORM/Store/DBIC.pm Lib/IMPL/ORM/Unit.pm Lib/IMPL/Web/Security.pm |
diffstat | 9 files changed, 211 insertions(+), 80 deletions(-) [+] |
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Transform/PostToDOM.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/DOM/Transform/PostToDOM.pm Mon Apr 05 00:20:34 2010 +0400 @@ -25,6 +25,7 @@ my $navi = $this->Navigator; while (my ($key,$value) = each %$data) { + # TODO: review my $node = $navi->Navigate($key); $node->nodeValue($value); }
--- a/Lib/IMPL/ORM.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/ORM.pm Mon Apr 05 00:20:34 2010 +0400 @@ -35,89 +35,48 @@ 1; __END__ + =pod + +=head1 NAME + +C<IMPL::ORM> - Object Relational Mapping + =head1 SYNOPSIS -use IMPL::ORM::Sql; +=begin code -my $DB = new IMPL::ORM::Sql("connection string"); +my $ds = IMPL::ORM::Storage::DBIC->new('My::Data',$dsn,$user,$pass,{Autocommit => 1}); + -local $IMPL::ORM::Depth = 1; # load childs only, no more - -my $artist = $DB->Lookup( Artist => { name => 'Beatles' } ); +my $foo = $ds->Insert( + My::Data::Foo->new( + 'foo class' + ) +); -my $order = new Order(); -$order->AddItem($_) foreach $artist->Albums->List; +my $bar = $ds->Insert( + My::Data::Bar->new( + 'bar class' + ) +) + +$bar->fooObject($foo); + +$ds->Save($bar); -$DB->Save($order); +my $fooOther = $ds->Retrieve( + 'My::Data::Bar', + { + name => 'bar class', + fooObject => { + name => 'some foo' + } + } +) -my $label = $artist->Albums->Index(0)->Label; - -$DB->Populate($label); #load $label +=end code =head1 DESCRIPTION -=head2 MEMBERS -=level 4 -=back -=head2 Variables -=head2 INTERNALS -=head3 Object Representation -������ ����� ������������ � �������� ������ �������������� � ���� ������ -���������, ������ �� ������� ������������ ��������� �������� ������. - -Foo entityFoo - Bar entityBar - Baz entityBaz - -��� ���������� ����������� ������� ������� � ��������������� ��������� ��������� -��� ���� - ���� ��� ���������� ������������ �������� ��������, ������ - ��� -������� ������������ ��������. - -Foo - public virtual property Name => prop_all, {Type => String}; - -entityFoo - string m_Name - ����������� �������� - string v_Name - ���������� �������� - -������ ����������� ������ � ���� ����� ����������� �������������. -����� ������� �������������� �� �����, �� ��� ��� ���� ��� �� ����� ���������. - -=head3 Object Cache - -��� ����� ��������, ������� ������������ � ��������� ������ ������������ ��� -��������. ���� �������� ���������� �� ���� �������, � ����� ����� ����������� -�������. - -ObjectInfo => { - instance => weak ref - _id => data source dependent id - state => {persistent|null|new|deleted} - work_unit => ref to the work unit where object is acting -} - -������ ��������� �������� ����� ��� ������� ObjectInfoById � ObjectInfo - -=head3 Type mapping - -�������� ������ ����� � ���� ����� ������, ������� ���������� ����� �����, -�������� � ������ ���������. ���� ��������� ����� ����������� �����: - -=level 4 - -=item 1 - -����������� �������, ����� ����� �������������� � ��� ������ ������� - -=item - -����������� ������� � ���� �������� (������� ������, ������ � �.�.) - -=item - -������, ������� �� ������ �������� � ���������� ������, ����� ��� ���������. - -=back - -=cut +=cut \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/ORM/Adapter/Generic.pm Mon Apr 05 00:20:34 2010 +0400 @@ -0,0 +1,103 @@ +package IMPL::ORM::Adapter::Generic; + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::ORM::Adapter::Generic> ������� ��� ������ � ������� ������� ������������� ������. + +=head1 DESCRIPTION + +��������� �������� ������, ��������� ������ �� �������, � ����� �������� ������ � +������ � ������� ����� ������. + +=head1 MEMBERS + +=over + +=item C<CTOR($object,$hashOptions)> + +������� ����� ������� � ������� C<$object> + +=item C<[get]object> + +������ ��� �������� ������ ������ �������, C<undef> ���� ������ ������. + +=item C<[get]isChanged> + +���� �� ���������� � �������. + +=item C<[get]isDeleted> + +�������� �� ������ ���������. + +=item C<[get]isNew> + +�������� �� ������ ����� ��� ��. + +=item C<[get]initialState> + +��������� ��������� �������, C<undef> ���� ������ ��� ������. + +=item C<[get]currentState> + +������� ���������. C<undef> ���� ������ ������. + +=item C<[get,list]history> + +������� ���������. C<IMPL::Object::List> + +=item C<SaveChanges> + +��������� ��������� �� ������� � ������� ���������, ��� ���� ��������� ������������ � �������. + +B<returns> ���������� �� ���������� � �������. + +=item C<Revert($version)> + +���������� ������ � ������������ ������. + +=item C<Delete> + +������� ������, ������ �������� ��� ��� �������� �� ������ C<Commit>. + +=item C<Commit> + +���������� ������� ���������, � ������������� �������������� ��������. + +=back + +=head1 ���������� �� ���������� ������� + +=begin code + +{ + version => 1, # object version + op => STORAGE_UPDATE, + data => { + entity1 => { + field1 => 'value 1' + }, + entity2 => { + field2 => 'value 2' + } + } +} + +=end code + +=head1 ���������� �� ����������� ������� + +=begin code + +{ + prop_name => [ entity => 'field' ] +} + +=end code + +=cut \ No newline at end of file
--- a/Lib/IMPL/ORM/Schema.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/ORM/Schema.pm Mon Apr 05 00:20:34 2010 +0400 @@ -121,6 +121,10 @@ =pod +=head1 NAME + +C<IMPL::ORM::Schema> ����� ����������� ������� � ����������� ���������. + =head1 DESCRIPTION ����� ������, ������������ ����� DOM ��������, ���������� ������� @@ -128,6 +132,8 @@ ������ ���� - ��� �������� ��������. +=begin code xml + <Schema> <Entity entityName="My_Data_Foo"> <Field fieldName="Doo" fieldType="String"/> @@ -142,4 +148,6 @@ </Entity> </Schema> +=end code xml + =cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/ORM/Schema/GenericClass.pm Mon Apr 05 00:20:34 2010 +0400 @@ -0,0 +1,17 @@ +package IMPL::ORM::Schema::GenericClass; + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::ORM::Schema::GenericClass> ���������� ����� �� ������������� ������. + +=head1 DESCRIPTION + +������ ���������� ������ � ������ �� �� ��������� �������� ����� ������. + +=cut \ No newline at end of file
--- a/Lib/IMPL/ORM/Schema/TransformToSQL.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/ORM/Schema/TransformToSQL.pm Mon Apr 05 00:20:34 2010 +0400 @@ -171,7 +171,11 @@ =head1 SYNOPSIS +=begin code + my $sqlSchema = IMPL::ORM::Schema::TransformToSQL->Default->Transform(Data::Schema->instance); +=end code + =cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/ORM/Store/DBIC.pm Mon Apr 05 00:20:34 2010 +0400 @@ -0,0 +1,13 @@ +package IMPL::ORM::DBIC; + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::ORM::DBIC> - ��������� ������ �� ������ C<DBIx::Class>. + +=cut \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/ORM/Unit.pm Mon Apr 05 00:20:34 2010 +0400 @@ -0,0 +1,20 @@ +package IMPL::ORM::Unit; + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::ORM::Unit> ������� ��������. + +=head1 DESCRIPTION + +C<[Infrastructure]> + +��������� ���������� ������������������ ���������. ������������ C<IMPL::ORM> ��� ���������� ���������� +����������. + +=cut \ No newline at end of file
--- a/Lib/IMPL/Web/Security.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/Web/Security.pm Mon Apr 05 00:20:34 2010 +0400 @@ -7,8 +7,7 @@ __PACKAGE__->PassThroughArgs; BEGIN { - public property sessionFactory => prop_get | owner_set; - public property userFactory => prop_get | owner_set; + public property source => prop_all; } sub CTOR { @@ -17,12 +16,19 @@ $this->dataSource or die new IMPL::InvalidArgumentException("The argument is required",'dataSource'); } -sub Session { - my ($this,%args) = @_; +sub RetrSession { + my ($this,$sid) = @_; + + return $this->source->RetrSession(id => $sid); } -sub User { +sub RetrSecData { + my ($this,$user,$secPackage) = @_; + $user = ref $user ? $user->name : $user; + + return + $this->source->RetrSecData(user => $user, package => $secPackage); } 1;