From f3fb71c65b7ba053e1e28f3cff45bc2ca9856da1 Mon Sep 17 00:00:00 2001 From: khoff Date: Tue, 5 Apr 2005 21:33:42 +0000 Subject: [PATCH] This doesn't fix the problem. To be continued... --- bin/add-history-records.pl | 76 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/bin/add-history-records.pl b/bin/add-history-records.pl index 14d72316f..fbf9d09d9 100755 --- a/bin/add-history-records.pl +++ b/bin/add-history-records.pl @@ -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"; } -- 2.11.0