/[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.27 by joko, Fri Jan 31 06:30:59 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
20    #  tried to get auto-disconnect working again - failed with that
21    #
22  #  Revision 1.27  2003/01/31 06:30:59  joko  #  Revision 1.27  2003/01/31 06:30:59  joko
23  #  + enabled 'sendQuery'  #  + enabled 'sendQuery'
24  #  #
# Line 41  Line 57 
57  #  + fix: encapsulated object-loading inside an 'eval'  #  + fix: encapsulated object-loading inside an 'eval'
58  #  #
59  #  Revision 1.15  2002/12/05 13:55:21  joko  #  Revision 1.15  2002/12/05 13:55:21  joko
60  #  + now utilizing 'object2hash' instead of 'var_deref'  #  + now utilizing 'expand' instead of 'var_deref'
61  #  + played around with having fresh-objects - no progress....  #  + played around with having fresh-objects - no progress....
62  #  #
63  #  Revision 1.14  2002/12/05 09:40:30  jonen  #  Revision 1.14  2002/12/05 09:40:30  jonen
# Line 114  use warnings; Line 130  use warnings;
130  use base ("Data::Storage::Handler");  use base ("Data::Storage::Handler");
131  use base ("Data::Storage::Handler::Abstract");  use base ("Data::Storage::Handler::Abstract");
132    
133  use Tangram;  
134  use Data::Dumper;  use Data::Dumper;
135    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( object2hash );  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 220  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 512  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 636  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 = object2hash($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 object2hash      #$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;
# Line 686  sub testAvailability { Line 736  sub testAvailability {
736    return $storage->testAvailability();    return $storage->testAvailability();
737  }  }
738    
739    sub disconnect2 {
740      my $self = shift;
741      my $storage = $self->_getSubLayerHandle();
742      print "DISC!", "\n";
743    
744      my $storage_ll = $storage->{_COREHANDLE};
745      $storage_ll->disconnect();
746      
747      print Dumper($storage);
748      exit;
749      
750      #$self->{_COREHANDLE}
751      #$storage->disconnect();
752      $self->{dataStorageLayer}->disconnect();
753    }
754    
755  1;  1;
756  __END__  __END__

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

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