Diff for /loncom/debugging_tools/rebuild_db_from_hist.pl between versions 1.6 and 1.7

version 1.6, 2006/08/03 17:53:47 version 1.7, 2016/01/31 21:26:01
Line 125  sub process_file { Line 125  sub process_file {
         #  D:delete          #  D:delete
         #  N:new put (only adds tha values if they are all new values)          #  N:new put (only adds tha values if they are all new values)
  #  M:modify the values for a previous S   #  M:modify the values for a previous S
           #  U:update the values (action could be add or del).
         my ($action,$time,$concatenated_data) = split(':',$command,3);          my ($action,$time,$concatenated_data) = split(':',$command,3);
         if ($fname eq 'roles.hist' && $concatenated_data =~ /^.*:.*:/) {          if ($fname eq 'roles.hist' && $concatenated_data =~ /^.*:.*:/) {
             (undef,undef,$concatenated_data) = split(':',$concatenated_data,3);              (undef,undef,$concatenated_data) = split(':',$concatenated_data,3);
         }          }
         next if (! defined($action));          next if (! defined($action));
         if ($action eq 'P' && $p_is_s) { $action = 'S'; }          if ($action eq 'P' && $p_is_s) { $action = 'S'; }
         my ($rid,@allkeys,$version);          my ($rid,@allkeys,$version,$updatetype);
         if ($action eq 'S') {          if ($action eq 'S') {
             ($rid,$concatenated_data) = split(':',$concatenated_data,2);              ($rid,$concatenated_data) = split(':',$concatenated_data,2);
             $version = ++$db_to_store{"version:$rid"};              $version = ++$db_to_store{"version:$rid"};
Line 141  sub process_file { Line 142  sub process_file {
             ($rid,$version,$concatenated_data) =               ($rid,$version,$concatenated_data) = 
  split(':',$concatenated_data,3);   split(':',$concatenated_data,3);
  }   }
           if ($action eq 'U') {
               ($updatetype,$concatenated_data) =
                   split(':',$concatenated_data,2); 
           }
         next if (! defined($concatenated_data));          next if (! defined($concatenated_data));
  my $add_new_data = 1;   my $add_new_data = 1;
         my @data = split('&',$concatenated_data);          my @data = split('&',$concatenated_data);
Line 163  sub process_file { Line 168  sub process_file {
  }   }
             } elsif ($action eq 'D') {              } elsif ($action eq 'D') {
                 delete($db_to_store{$key});                  delete($db_to_store{$key});
               } elsif ($action eq 'U') {
                   if ($updatetype eq 'del') {
                       if (exists($db_to_store{$key})) {
                           my %current;
                           map { $current{$_} = 1; } split(/,/,&unescape($db_to_store{$key}));
                           map { delete($current{$_}); } split(/,/,&unescape($value));
                           if (keys(%current)) {
                               $db_to_store{$key}=&escape(join(',',sort(keys(%current))));
                           } else {
                               delete($db_to_store{$key});
                           }
                       }
                   } elsif ($updatetype eq 'add') {
                       if (exists($db_to_store{$key})) {
                           my @newvals = split(/,/,&unescape($value));
                           my @currvals = split(/,/,&unescape($db_to_store{$key}));
                           my @merged = sort(keys(%{{map { $_ => 1 } (@newvals,@currvals)}}));
                           $db_to_store{$key}=&escape(join(',',@merged));
                       } else {
                           $db_to_store{$key}=$value;
                       }
                   }
             } else {              } else {
                 $error = "Unable to understand action '".$action."'";                  $error = "Unable to understand action '".$action."'";
             }              }

Removed from v.1.6  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>