/[cvs]/nfo/perl/libs/Data/Storage/Handler/Tangram.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Storage/Handler/Tangram.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.28 by joko, Thu Feb 20 20:20:26 2003 UTC revision 1.32 by joko, Tue Apr 8 22:52:22 2003 UTC
# Line 3  Line 3 
3  #  $Id$  #  $Id$
4  #  #
5  #  $Log$  #  $Log$
6    #  Revision 1.32  2003/04/08 22:52:22  joko
7    #  modified 'querySchema': better behaviour regarding filtering result
8    #
9    #  Revision 1.31  2003/04/05 21:24:09  joko
10    #  modified 'sub getChildNodes': now contains code from 'querySchema'
11    #
12    #  Revision 1.30  2003/03/27 15:31:14  joko
13    #  fixes to modules regarding new namespace(s) below Data::Mungle::*
14    #
15    #  Revision 1.29  2003/02/21 01:47:18  joko
16    #  purged old code
17    #  minor cosmetics
18    #
19  #  Revision 1.28  2003/02/20 20:20:26  joko  #  Revision 1.28  2003/02/20 20:20:26  joko
20  #  tried to get auto-disconnect working again - failed with that  #  tried to get auto-disconnect working again - failed with that
21  #  #
# Line 123  use Tangram; Line 136  use Tangram;
136    
137  use DesignPattern::Object;  use DesignPattern::Object;
138  use Data::Storage::Result::Tangram;  use Data::Storage::Result::Tangram;
139  use Data::Compare::Struct qw( isEmpty );  use Data::Mungle::Compare::Struct qw( isEmpty );
140  use Data::Transform::Deep qw( expand );  use Data::Mungle::Transform::Deep qw( expand );
 #use Data::Transform::Encode qw( var2utf8 );  
141    
142  # get logger instance  # get logger instance
143  my $logger = Log::Dispatch::Config->instance;  my $logger = Log::Dispatch::Config->instance;
# Line 225  sub connect { Line 237  sub connect {
237  sub getChildNodes {  sub getChildNodes {
238    
239    my $self = shift;    my $self = shift;
240    my @nodes;    my $mode = shift;
241      my $filter = shift;
242      
243      $mode ||= 'core';
244      $filter ||= 'all';
245      
246      $logger->debug( __PACKAGE__ . "->getChildNodes($mode)" );
247    
248    $logger->debug( __PACKAGE__ . "->getChildNodes()" );    if ($mode eq 'core') {
249    
250    # create new DBI - Data::Storage - object from already connected DBI::db - handle inside the current COREHANDLE      my @nodes;
251    #my $loc = new Data::Storage::Locator( type => "DBI", dbi => { db => $self->{COREHANDLE}->{db} });      
252    #my $loc = new Data::Storage::Locator( type => "DBI", COREHANDLE => $self->{COREHANDLE}->{db} );      # create new DBI - Data::Storage - object from already connected DBI::db - handle inside the current COREHANDLE
253          #my $loc = new Data::Storage::Locator( type => "DBI", dbi => { db => $self->{COREHANDLE}->{db} });
254    # todo: should we retrieve information from the schema here      #my $loc = new Data::Storage::Locator( type => "DBI", COREHANDLE => $self->{COREHANDLE}->{db} );
255    # rather than poorly getting table names from underlying dbi?      
256    my $storage = $self->_getSubLayerHandle();      # todo: should we retrieve information from the schema here
257    @nodes = @{$storage->getChildNodes()};      # rather than poorly getting table names from underlying dbi?
258    #$storage->_configureCOREHANDLE();      my $storage = $self->_getSubLayerHandle();
259  #print "getchildnodes\n";      @nodes = @{$storage->getChildNodes()};
260  #print Dumper($self);      #$storage->_configureCOREHANDLE();
261    #if (my $result = $self->sendCommand( 'SHOW TABLES;' ) ) {    #print "getchildnodes\n";
262      #print Dumper($self);
263        #if (my $result = $self->sendCommand( 'SHOW TABLES;' ) ) {
264        
265        # TODO: REVIEW
266        #$storage->disconnect();
267        
268        $self->{meta}->{childnodes} = \@nodes;
269    
270        return \@nodes;
271        
272    # TODO: REVIEW    } elsif ($mode eq 'root') {
273    #$storage->disconnect();      
274        # FIXME: this will return *all* known classes to 'Class::Tangram',
275        # which might not be what you expect since more than one instance
276        # of Tangram may be in memory and Class::Tangram seems to
277        # offer no methods to determine this or filter its result(s) according
278        # to a specific database.
279        my @object_names = Class::Tangram::known_classes();
280        my @concret_names;
281        my $o_cnt;
282        foreach (sort @object_names) {
283          push @concret_names, $_  if (!Class::Tangram::class_is_abstract($_));
284          $o_cnt++;
285        }
286    
287        if ($filter eq 'all') {
288          return \@object_names;
289        } elsif ($filter eq 'concrete') {
290          return \@concret_names;
291        }
292        
293    $self->{meta}->{childnodes} = \@nodes;    }
294        
   return \@nodes;  
295    
296  }  }
297    
   
298  sub testIntegrity {  sub testIntegrity {
299    
300    my $self = shift;    my $self = shift;
# Line 517  sub sendQuery { Line 560  sub sendQuery {
560    
561    # HACK: special case: querying by id does not translate into a common tangram query    # HACK: special case: querying by id does not translate into a common tangram query
562    # just load the object by given id(ent)    # just load the object by given id(ent)
563    if ($query->{criterias}->[0]->{key} eq 'id' && $query->{criterias}->[0]->{op} eq 'eq') {    if ($query->{criterias} && ($query->{criterias}->[0]->{key} eq 'id' && $query->{criterias}->[0]->{op} eq 'eq')) {
564      #print "LOAD!!!", "\n";      #print "LOAD!!!", "\n";
565      #exit;      #exit;
566      #return Set::Object->new( $self->{COREHANDLE}->load($query->{criterias}->[0]->{val}) );      #return Set::Object->new( $self->{COREHANDLE}->load($query->{criterias}->[0]->{val}) );
# Line 641  sub getObjectAsHash { Line 684  sub getObjectAsHash {
684    # build options (a callback to unload autovivified objects) for 'expand'    # build options (a callback to unload autovivified objects) for 'expand'
685    # TODO: use $logger to write to debug here!    # TODO: use $logger to write to debug here!
686    my $cb; # = sub {};    my $cb; # = sub {};
687    
688      # deactivated way to get rid of used instances, if requested
689  =pod  =pod
690    if ($options->{destroy}) {      if ($options->{destroy}) {
691      $options->{cb}->{destroy} = sub {        $options->{cb}->{destroy} = sub {
692        print "================ DESTROY", "\n";          print "================ DESTROY", "\n";
693        my $object = shift;          my $object = shift;
694        #print Dumper($object);          #print Dumper($object);
695        $self->{_COREHANDLE}->unload($object);          $self->{_COREHANDLE}->unload($object);
696        #undef($object);          #undef($object);
697      };        };
698    }      }
699  =cut  =cut
700    
701    my $hash = expand($obj, $options);    my $hash = expand($obj, $options);
702    #$options->{cb}->{destroy}->($obj);  
703    #$self->{_COREHANDLE}->unload($obj);    # old (unsuccessful) attempts to get rid of used instances, if requested
704      
705    # convert values in hash to utf8 to be ready for (e.g.) encapsulation in XML      # V1:
706    # now done in expand      #$options->{cb}->{destroy}->($obj);
707    #var2utf8($hash) if ($options->{utf8});      #$self->{_COREHANDLE}->unload($obj);
708        
709    # old (wrong) attempts to get rid of used instances, if requested      # V2:
710      #$obj->clear_refs;      #$obj->clear_refs;
711      #$self->{COREHANDLE}->unload($obj) if($options->{destroy});      #$self->{COREHANDLE}->unload($obj) if($options->{destroy});
712      #$obj->DESTROY;      #$obj->DESTROY;

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.32

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed