This doesn't fix the problem. To be continued...
authorkhoff <khoff>
Tue, 5 Apr 2005 21:33:42 +0000 (21:33 +0000)
committerkhoff <khoff>
Tue, 5 Apr 2005 21:33:42 +0000 (21:33 +0000)
bin/add-history-records.pl

index 14d7231..fbf9d09 100755 (executable)
@@ -1,5 +1,6 @@
 #!/usr/bin/perl
 
+die "This is broken.  Don't use it!\n";
 
 use strict;
 use FS::UID qw(adminsuidsetup);
@@ -8,6 +9,7 @@ use FS::Record qw(qsearchs qsearch);
 use Data::Dumper;
 
 my @tables = qw(svc_acct svc_broadband svc_domain svc_external svc_forward svc_www cust_svc domain_record);
+#my @tables = qw(svc_www);
 
 my $user = shift or die &usage;
 my $dbh = adminsuidsetup($user);
@@ -32,10 +34,19 @@ foreach my $table (@tables) {
 
   foreach my $rec (qsearch($table, {})) {
 
+    #my $h_rec = qsearchs(
+    #  $h_table,
+    #  { $pkey => $rec->getfield($pkey) },
+    #  eval "FS::${h_table}->sql_h_searchs(time)",
+    #);
+
     my $h_rec = qsearchs(
       $h_table,
       { $pkey => $rec->getfield($pkey) },
-      eval "FS::${h_table}->sql_h_searchs(time)",
+      "DISTINCT ON ( $pkey ) *",
+      "AND history_action = 'insert' ORDER BY $pkey ASC, history_date DESC",
+      '',
+      'AS maintable',
     );
 
     unless ($h_rec) {
@@ -59,6 +70,69 @@ foreach my $table (@tables) {
 
 }
 
+foreach my $table (@tables) {
+
+  my $h_table = 'h_' . $table;
+  my $cnt = 0;
+
+  eval "use FS::${table}";
+  die $@ if $@;
+  eval "use FS::${h_table}";
+  die $@ if $@;
+
+  print "Adding insert records for unmatched delete records on ${table}...\n";
+
+  my $dbdef_table = $dbdef->table($table);
+  my $pkey = $dbdef_table->primary_key;
+
+  #SELECT * FROM h_svc_www
+  #DISTINCT ON ( $pkey ) ?
+  my $where = "
+  WHERE ${pkey} in (
+    SELECT ${h_table}1.${pkey}
+      FROM ${h_table} as ${h_table}1
+      WHERE (
+        SELECT count(${h_table}2.${pkey})
+         FROM ${h_table} as ${h_table}2
+         WHERE ${h_table}2.${pkey} = ${h_table}1.${pkey}
+           AND ${h_table}2.history_action = 'delete'
+      ) > 0
+      AND (
+        SELECT count(${h_table}3.${pkey})
+         FROM ${h_table} as ${h_table}3
+         WHERE ${h_table}3.${pkey} = ${h_table}1.${pkey}
+           AND ( ${h_table}3.history_action = 'insert'
+           OR ${h_table}3.history_action = 'replace_new' )
+      ) = 0
+      GROUP BY ${h_table}1.${pkey})";
+
+
+  my @h_recs = qsearch(
+    $h_table, { },
+    "DISTINCT ON ( $pkey ) *",
+    $where,
+    '',
+    ''
+  );
+
+  foreach my $h_rec (@h_recs) {
+    #print "Adding insert record for deleted record with pkey='" . $h_rec->getfield($pkey) . "'...\n";
+    my $class = 'FS::' . $table;
+    my $rec = $class->new({ $h_rec->hash });
+    my $h_insert_rec = $rec->_h_statement('insert', 1);
+    #print $h_insert_rec . "\n";
+    $dbh->do($h_insert_rec);
+    die $dbh->errstr if $dbh->err;
+    $dbh->commit or die $dbh->errstr;
+    $cnt++;
+  }
+
+  print "History records inserted into $h_table: $cnt\n";
+
+}
+
+
+
 sub usage {
   die "Usage:\n  add-history-records.pl user\n";
 }