]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/Factoids.pl
- fix for null factoids in factinfo.
[infobot.git] / src / Modules / Factoids.pl
index bde4b9832708bd176394f5aaeff5bd65422509cc..2c8e9c7418aab1d762c1deefcc219bba6ccb2971 100644 (file)
@@ -33,6 +33,17 @@ sub CmdFactInfo {
        return $noreply;
     }
 
+    # fix for problem observed by asuffield.
+    # why did it happen though?
+    if (!$factinfo{'factoid_value'}) {
+       &performReply("there's no such factoid as \002$faqtoid\002; deleted because we don't have factoid_value!");
+       foreach (keys %factinfo) {
+           &DEBUG("factinfo{$_} => '$factinfo{$_}'.");
+       }
+###    &delFactoid($faqtoid);
+       return $noreply;
+    }
+
     # created:
     if ($factinfo{'created_by'}) {
 
@@ -165,13 +176,13 @@ sub CmdFactStats {
 
     } elsif ($type =~ /^broken$/i) {
         &status("factstats(broken): starting...");
-       my $start_time = &gettimeofday();
-       my %data = &dbGetCol("factoids", "factoid_key","factoid_value");
+       my $start_time  = &timeget();
+       my %data        = &dbGetCol("factoids", "factoid_key","factoid_value");
        my @list;
 
-       my $delta_time = &gettimeofday() - $start_time;
+       my $delta_time  = &timedelta($start_time);
         &status(sprintf("factstats(broken): %.02f sec to retreive all factoids.", $delta_time)) if ($delta_time > 0);
-       $start_time = &gettimeofday();
+       $start_time     = &timeget();
 
        # parse the factoids.
        foreach (keys %data) {
@@ -181,7 +192,7 @@ sub CmdFactStats {
            }
        }
 
-       $delta_time = &gettimeofday() - $start_time;
+       $delta_time     = &timedelta($start_time);
         &status(sprintf("factstats(broken): %.02f sec to complete.", $delta_time)) if ($delta_time > 0);
 
        # bail out on no results.
@@ -227,11 +238,11 @@ sub CmdFactStats {
        return &formListReply(1, $prefix, @newlist);
 
     } elsif ($type =~ /^dup(licate|e)$/i) {
-       my $start_time = &gettimeofday();
         &status("factstats(dupe): starting...");
-       my %hash = &dbGetCol("factoids", "factoid_key", "factoid_value", 1);
+       my $start_time  = &timeget();
+       my %hash        = &dbGetCol("factoids", "factoid_key", "factoid_value", 1);
+       my $refs        = 0;
        my @list;
-       my $refs = 0;
        my $v;
 
        foreach $v (keys %hash) {
@@ -259,7 +270,7 @@ sub CmdFactStats {
        }
 
        &status("factstats(dupe): (good) dupe refs: $refs.");
-       my $delta_time = &gettimeofday() - $start_time;
+       my $delta_time  = &timedelta($start_time);
         &status(sprintf("factstats(dupe): %.02f sec to complete", $delta_time)) if ($delta_time > 0);
 
        # bail out on no results.
@@ -271,6 +282,27 @@ sub CmdFactStats {
        my $prefix = "dupe factoid ";
        return &formListReply(1, $prefix, @list);
 
+    } elsif ($type =~ /^nullfactoids$/i) {
+       my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE factoid_value=''";
+       my $sth = $dbh->prepare($query);
+       &ERROR("factstats(null): => '$query'.") unless $sth->execute;
+
+       my @list;
+       while (my @row = $sth->fetchrow_array) {
+           if ($row[1] ne "") {
+               &DEBUG("row[1] != NULL for $row[0].");
+               next;
+           }
+
+           &DEBUG("row[0] => '$row[0]'.");
+           push(@list, $row[0]);
+       }
+       $sth->finish;
+
+       # parse the results.
+       my $prefix = "NULL factoids (not deleted yet) ";
+       return &formListReply(1, $prefix, @list);
+
     } elsif ($type =~ /^(2|too)short$/i) {
        # Custom select statement.
        my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE length(factoid_value) <= 40";
@@ -355,7 +387,7 @@ sub CmdFactStats {
 
     } elsif ($type =~ /^part(ial)?dupe$/i) {
        ### requires "custom" select statement... oh well...
-       my $start_time = &gettimeofday();
+       my $start_time  = &timeget();
 
        # form length|key and key=length hash list.
        &status("factstats(partdupe): forming length hash list.");
@@ -395,7 +427,7 @@ sub CmdFactStats {
            push(@list, join(" ,",@sublist)) if (scalar @sublist);
        }
 
-       my $delta_time = sprintf("%.02fs", &gettimeofday() - $start_time);
+       my $delta_time = sprintf("%.02fs", &timedelta($start_time) );
         &status("factstats(partdupe): $delta_time sec to complete.") if ($delta_time > 0);
 
        # bail out on no results.