/[cvs]/nfo/perl/libs/Data/Transfer/Sync/StorageInterface.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Transfer/Sync/StorageInterface.pm

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

revision 1.2 by joko, Sun Feb 9 05:05:58 2003 UTC revision 1.8 by joko, Wed Apr 9 07:27:02 2003 UTC
# Line 6  Line 6 
6  ##  ##
7  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
8  ##    $Log$  ##    $Log$
9    ##    Revision 1.8  2003/04/09 07:27:02  joko
10    ##    minor update (just cosmetics)
11    ##
12    ##    Revision 1.7  2003/03/27 15:31:16  joko
13    ##    fixes to modules regarding new namespace(s) below Data::Mungle::*
14    ##
15    ##    Revision 1.6  2003/02/21 01:47:53  joko
16    ##    renamed core function
17    ##
18    ##    Revision 1.5  2003/02/20 20:24:33  joko
19    ##    + additional pre-flight checks
20    ##
21    ##    Revision 1.4  2003/02/14 14:14:38  joko
22    ##    + new code refactored here
23    ##
24    ##    Revision 1.3  2003/02/11 07:54:55  joko
25    ##    + modified module usage
26    ##    + debugging trials
27    ##
28  ##    Revision 1.2  2003/02/09 05:05:58  joko  ##    Revision 1.2  2003/02/09 05:05:58  joko
29  ##    + major structure changes  ##    + major structure changes
30  ##    - refactored code to sister modules  ##    - refactored code to sister modules
# Line 32  use mixin::with qw( Data::Transfer::Sync Line 51  use mixin::with qw( Data::Transfer::Sync
51    
52  use Data::Dumper;  use Data::Dumper;
53  use Hash::Merge qw( merge );  use Hash::Merge qw( merge );
54  use libdb qw( quotesql hash2Sql );  use shortcuts::db qw( hash2sql );
55  use Data::Transform::Deep qw( hash2object refexpr2perlref );  use Data::Mungle::Transform::Deep qw( merge_to );
56    
57    
58  # get logger instance  # get logger instance
# Line 57  sub _resolveNodeIdent { Line 76  sub _resolveNodeIdent {
76    my $self = shift;    my $self = shift;
77    my $descent = shift;    my $descent = shift;
78        
79    #print Dumper($self->{node}->{$descent});    # trace
80    #print Dumper($self);      #print Dumper($self->{node}->{$descent});
81        #print Dumper($self);
82        #exit;
83        
84    $logger->debug( __PACKAGE__ . "->_resolveNodeIdent( descent=$descent, accessorName=$self->{meta}->{$descent}->{accessorName} )" );    $logger->debug( __PACKAGE__ . "->_resolveNodeIdent( descent=$descent, accessorName=$self->{meta}->{$descent}->{accessorName} )" );
85        
86    # get to the payload    # get to the payload
# Line 70  sub _resolveNodeIdent { Line 92  sub _resolveNodeIdent {
92      #my $ident = $self->{$descent}->id($item);      #my $ident = $self->{$descent}->id($item);
93      #my $ident = $self->{meta}->{$descent}->{storage}->id($item);      #my $ident = $self->{meta}->{$descent}->{storage}->id($item);
94    
95      # trace
96        #print Dumper($self->{meta}->{$descent});
97        #exit;
98    
99      my $ident;      my $ident;
100      my $provider_method = $self->{meta}->{$descent}->{IdentProvider}->{method};      my $provider_method = $self->{meta}->{$descent}->{IdentProvider}->{method};
101      my $provider_arg = $self->{meta}->{$descent}->{IdentProvider}->{arg};      my $provider_arg = $self->{meta}->{$descent}->{IdentProvider}->{arg};
# Line 116  sub _statloadNode { Line 142  sub _statloadNode {
142    my $ident = shift;    my $ident = shift;
143    my $force = shift;    my $force = shift;
144    
145    $logger->debug( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident )" );  =pod
146      #print "isa: ", UNIVERSAL::isa($self->{meta}->{$descent}->{storage}), "\n";
147    
148      # this seems to be the first time we access this side,
149      # so just check (again) for a valid storage handle
150      if (! ref $self->{meta}->{$descent}->{storage}) {
151        $logger->critical( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident ): Storage handle undefined!" );
152        return;
153      }
154    =cut
155    
156      #$logger->debug( __PACKAGE__ . "->_statloadNode( descent=$descent ident=$ident )" );
157    
158    # fetch entry to retrieve checksum from    # fetch entry to retrieve checksum from
159    # was:    # was:
# Line 146  sub _statloadNode { Line 183  sub _statloadNode {
183        ]        ]
184      };      };
185    
     # trace  
       #print "query:", "\n";  
       #print Dumper($query);  
   
186      # send query and fetch first entry from result      # send query and fetch first entry from result
187        my $result = $self->{meta}->{$descent}->{storage}->sendQuery($query);        my $result = $self->{meta}->{$descent}->{storage}->sendQuery($query);
188        my $entry = $result->getNextEntry();        my $entry = $result->getNextEntry();
# Line 223  sub _touchNodeSet { Line 256  sub _touchNodeSet {
256          next;          next;
257        }        }
258            
259        # 2.b check storage handle type
260          my $dbType = $self->{meta}->{$descent}->{storage}->{locator}->{type};
261          if (!$dbType) {
262            $logger->critical( __PACKAGE__ . "->touchNodeSet: Storage ( descent='$descent', dbKey='$dbkey' ) has no 'dbType' - configuration-error?" );
263            next;
264          }
265    
266      # 3. check if descents (and nodes?) are actually available....      # 3. check if descents (and nodes?) are actually available....
267        # TODO:        # TODO:
268        # eventually pre-check mode of access-attempt (read/write) here to provide an "early-croak" if possible        # eventually pre-check mode of access-attempt (read/write) here to provide an "early-croak" if possible
# Line 231  sub _touchNodeSet { Line 271  sub _touchNodeSet {
271        # print Dumper($self->{meta}->{$descent}->{storage}->{locator});        # print Dumper($self->{meta}->{$descent}->{storage}->{locator});
272    
273    
       my $dbType = $self->{meta}->{$descent}->{storage}->{locator}->{type};  
274        my $nodeName = $self->{meta}->{$descent}->{nodeName};        my $nodeName = $self->{meta}->{$descent}->{nodeName};
275        my $accessorType = $self->{meta}->{$descent}->{accessorType};        my $accessorType = $self->{meta}->{$descent}->{accessorType};
276        my $accessorName = $self->{meta}->{$descent}->{accessorName};        my $accessorName = $self->{meta}->{$descent}->{accessorName};
# Line 316  sub _modifyNode { Line 355  sub _modifyNode {
355        # TODO: wrap this around '$storageHandle->sendQuery(...)'!?        # TODO: wrap this around '$storageHandle->sendQuery(...)'!?
356        my $sql_main;        my $sql_main;
357        if (lc($action) eq 'insert') {        if (lc($action) eq 'insert') {
358          $sql_main = hash2Sql($self->{meta}->{$descent}->{accessorName}, $map, 'SQL_INSERT');          $sql_main = hash2sql($self->{meta}->{$descent}->{accessorName}, $map, 'SQL_INSERT');
359        } elsif (lc $action eq 'update') {        } elsif (lc $action eq 'update') {
360          $crit ||= "$self->{meta}->{$descent}->{IdentProvider}->{arg}='$self->{node}->{$descent}->{ident}'";          $crit ||= "$self->{meta}->{$descent}->{IdentProvider}->{arg}='$self->{node}->{$descent}->{ident}'";
361          $sql_main = hash2Sql($self->{meta}->{$descent}->{accessorName}, $map, 'SQL_UPDATE', $crit);          $sql_main = hash2sql($self->{meta}->{$descent}->{accessorName}, $map, 'SQL_UPDATE', $crit);
362        }        }
363        my $sqlHandle = $self->{meta}->{$descent}->{storage}->sendCommand($sql_main);        my $sqlHandle = $self->{meta}->{$descent}->{storage}->sendCommand($sql_main);
364    
# Line 437  sub _modifyNode { Line 476  sub _modifyNode {
476          # mix in (merge) values ...          # mix in (merge) values ...
477            # TODO: use Hash::Merge here? benchmark!            # TODO: use Hash::Merge here? benchmark!
478            # no! we'd need a Object::Merge here! it's *...2object*            # no! we'd need a Object::Merge here! it's *...2object*
479            hash2object($object, $map);            merge_to($object, $map);
480        
481          # trace          # trace
482            #print Dumper($object);            #print Dumper($object);
# Line 461  sub _modifyNode { Line 500  sub _modifyNode {
500    
501      } elsif (lc $action eq 'update') {      } elsif (lc $action eq 'update') {
502                
503        # get fresh object from orm first        # Get fresh object from orm first.
504          # TODO: Review, is a 'sendQuery' required in this place?
505          # By now: NO! It's more expensive and we can just expect existing objects for update operations.
506          # If it doesn't exist either, we assume the engine will fail on issuing the 'update' operation later...
507        $object = $self->{meta}->{$descent}->{storage}->load($self->{node}->{$descent}->{ident});        $object = $self->{meta}->{$descent}->{storage}->load($self->{node}->{$descent}->{ident});
508    
 #print Dumper($self->{node});  
         
509        # mix in values        # mix in values
510          #print Dumper($object);        merge_to($object, $map);
         # TODO: use Hash::Merge here???  
         hash2object($object, $map);  
         #print Dumper($object);  
         #exit;  
511    
512        # update orm        # update orm
513          $self->{meta}->{$descent}->{storage}->update($object);        $self->{meta}->{$descent}->{storage}->update($object);
514                    
515      }      }
516    
 #exit;  
       
517      my $error = 0;      my $error = 0;
518    
519      # handle new style callbacks - this is a HACK - do this without an eval!      # handle new style callbacks - this is a HACK - do this without an eval!
# Line 488  sub _modifyNode { Line 522  sub _modifyNode {
522      #print Dumper($map_callbacks);      #print Dumper($map_callbacks);
523      foreach my $node (keys %{$map_callbacks->{write}}) {      foreach my $node (keys %{$map_callbacks->{write}}) {
524        #print Dumper($node);        #print Dumper($node);
525        my $perl_callback = $self->{meta}->{$descent}->{node} . '::' . $node . '_write';  
526          # ------------  half-redundant: make $self->callCallback($object, $value, $opts)
527          my $perl_callback = $self->{meta}->{$descent}->{nodeType} . '::' . $node . '_write';
528        my $evalstring = $perl_callback . '( { object => $object, value => $map_callbacks->{write}->{$node}, storage => $self->{meta}->{$descent}->{storage} } );';        my $evalstring = $perl_callback . '( { object => $object, value => $map_callbacks->{write}->{$node}, storage => $self->{meta}->{$descent}->{storage} } );';
529        #print $evalstring, "\n"; exit;        #print $evalstring, "\n"; exit;
530        eval($evalstring);        eval($evalstring);
531        if ($@) {        if ($@) {
532          $error = 1;          $error = 1;
533          print $@, "\n";          $logger->error( __PACKAGE__ . "->_modifyNode: $@" );
534            next;
535        }        }
536          # ------------  half-redundant: make $self->callCallback($object, $value, $opts)
537                
538        #print "after eval", "\n";        #print "after eval", "\n";
539                
# Line 530  sub _modifyNode { Line 568  sub _modifyNode {
568    
569  }  }
570    
571    sub _erase_all {
572      my $self = shift;
573      my $descent = shift;
574      #my $node = shift;
575      #print Dumper($self->{meta}->{$descent});
576      #my $node = $self->{meta}->{$descent}->{nodeName};
577      my $node = $self->{meta}->{$descent}->{accessorName};
578      $logger->debug( __PACKAGE__ . "->_erase_all( node $node )" );
579      $self->{meta}->{$descent}->{storage}->eraseAll($node);
580    }
581    
582  1;  1;
583    __END__

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.8

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