--- nfo/perl/libs/Data/Storage/Schema/Abstract.pm 2002/11/09 01:27:23 1.3 +++ nfo/perl/libs/Data/Storage/Schema/Abstract.pm 2002/11/17 07:12:06 1.5 @@ -1,8 +1,14 @@ ############################################### # -# $Id: Abstract.pm,v 1.3 2002/11/09 01:27:23 joko Exp $ +# $Id: Abstract.pm,v 1.5 2002/11/17 07:12:06 joko Exp $ # # $Log: Abstract.pm,v $ +# Revision 1.5 2002/11/17 07:12:06 joko +# + extended ::getProperties with argument "want_transactions" +# +# Revision 1.4 2002/11/15 13:21:39 joko +# + added capability to propagate global schema options from schema module to tangram schema +# # Revision 1.3 2002/11/09 01:27:23 joko # + dependency of Class::Tangram now is 1.13 at minimum # @@ -44,6 +50,8 @@ my @args = (); @_ && (@args = @_); + $logger->debug( __PACKAGE__ . "->new" ); + #my $self = { @_ }; # merge all entries from all hashes in args-array to single array (key, val, key, val) @@ -52,11 +60,13 @@ # make hash from array my %args = @args_all; - $logger->debug( __PACKAGE__ . "->new( @args_all )" ); + #$logger->debug( __PACKAGE__ . "->new( @args_all )" ); my $self = { %args }; bless $self, $class; + #use Data::Dumper; print Dumper($self); + # remember as which Class we are instantiated $self->{invocant} = $invocant; @@ -136,6 +146,13 @@ $classlist = $packages; } + my $schema_properties = {}; + if ($self->{invocant}->can('getProperties')) { + # TODO: rework this! call by ref and/or do oo + #$schema_properties = eval('return ' . $self->{invocant} . '::getProperties();'); + $schema_properties = eval('return ' . $self->{invocant} . '::getProperties($self->{want_transactions});'); + } + # build argument to be passed to "Tangram::Schema->new(...)" my @classes; map { @@ -149,23 +166,44 @@ push @classes, $schema; } @{$classlist}; + # build up the schema as a hash + my $schema = { + classes => \@classes, + }; + + # merge schema properties + foreach (keys %$schema_properties) { + $schema->{$_} = $schema_properties->{$_}; + } + # create a new Tangram schema object - # these classes must occour in the same order used at a previous setup - $self->{schema} = Tangram::Schema->new({ classes => \@classes }); + # a) these classes must occour in the same order used at a previous setup or + # b) better use class ids! + $self->{schema} = Tangram::Schema->new($schema); return 1; +=pod # ====================================== - # template + # schema template $self->{schema} = Tangram::Schema->new({ + classes => [ - # misc - 'SystemEvent' => $SystemEvent::schema, - + 'Person' => $Person::schema, ], + + make_object => sub { ... }, + set_id => sub { ... } + get_id => sub { ... } + normalize => sub { ... }, + + control => '...' + + sql => { ... }, + }); # ====================================== - +=cut }