Index: trunk/mergerecs
===================================================================
--- trunk/mergerecs	(revision 662)
+++ trunk/mergerecs	(revision 744)
@@ -36,6 +36,8 @@
 sub usage {
   die qq(usage:  mergerecs zone [domain] [--detail]
-    zone  The zone to walk for PTR records to try to merge.
-  domain  Optionally restrict record merges to a specified domain as well.
+    zone  The primary zone to walk for records to try to merge.  May be either
+          a reverse zone or a domain.
+  domain  Optionally restrict record merges in a reverse zone to a specific
+          domain.
  --detail Optional argument to add one log entry for each A+PTR pair merged
           instead of a single generic entry.
@@ -82,13 +84,13 @@
   }
   die "$pzone is not a valid reverse zone specification\n" if !$npzone;
-  $zid = $dnsdb->revID($npzone);
+  $zid = $dnsdb->revID($npzone, '');
 } else {
   $rev = 'n';
-  $zid = $dnsdb->domainID($pzone);
-}
-die "$pzone is not a zone in the database\n" if !$zid;
+  $zid = $dnsdb->domainID($pzone, '');
+}
+die "$pzone is not a zone in the database (".$dnsdb->errstr.")\n" if !$zid;
 
 # check the second arg.
-my $fzid = $dnsdb->domainID($matchdom);
+my $fzid = $dnsdb->domainID($matchdom, '');
 die "$matchdom is not a domain in the database\n" if $matchdom && !$fzid;
 
@@ -116,4 +118,5 @@
     $reclist->execute($zid);
     my $nrecs = 0;
+    my @cloglist;
     while (my ($host,$val,$type,$id,$ttl,$loc) = $reclist->fetchrow_array) {
       my $etype = 12;
@@ -134,5 +137,6 @@
         $delsth->execute($erid);
         if ($logdetail) {
-          $dnsdb->_log(group_id => $group, domain_id => $zid, rdns_id => $erdns, entry => $logentry);
+          my $lid = $dnsdb->_log(group_id => $group, domain_id => $zid, rdns_id => $erdns, entry => $logentry);
+          push @cloglist, $lid;
           print "$logentry\n";
         }
@@ -140,7 +144,11 @@
       }
     } # while
-    if (!$logdetail) {
-      $dnsdb->_log(group_id => $group, domain_id => $zid,
+    my $lpid = $dnsdb->_log(group_id => $group, domain_id => $zid,
 	entry => "Merged $nrecs A and AAAA records in $pzone with matching PTRs");
+    # since unlike in most other operations, we only "know" the parent log entry *after*
+    # we're done entering all the child entries, we have to update the children with the parent ID
+    my $assoc = $dbh->prepare("UPDATE log SET logparent = ? WHERE log_id = ?");
+    for my $lcid (@cloglist) {
+      $assoc->execute($lpid, $lcid);
     }
     print "Merged $nrecs A and AAAA records in $pzone with matching PTRs\n";
@@ -157,4 +165,5 @@
     $reclist->execute($zid);
     my $nrecs = 0;
+    my @cloglist;
     while (my ($host,$val,$type,$id,$ttl,$loc) = $reclist->fetchrow_array) {
       if ($matchdom) {
@@ -178,6 +187,7 @@
         $delsth->execute($erid);
         if ($logdetail) {
-          $dnsdb->_log(group_id => $group, domain_id => $edid, rdns_id => $zid, entry => $logentry);
-          print "$logentry\n";
+          my $lid = $dnsdb->_log(group_id => $group, domain_id => $edid, rdns_id => $zid, entry => $logentry);
+          push @cloglist, $lid;
+          print "$lid: $logentry\n";
         }
         $nrecs++;
@@ -185,13 +195,19 @@
     } # while
     my $entry = "Merged $nrecs PTR records in $pzone with matching A or AAAA records".($fzid ? " in $matchdom" : '');
-    if (!$logdetail) {
-      if ($fzid) {
-        $dnsdb->_log(group_id => $group, domain_id => $fzid, rdns_id => $zid, entry => $entry);
-      } else {
-        $dnsdb->_log(group_id => $group, rdns_id => $zid, entry => $entry);
-      }
+    my $lpid;
+    if ($fzid) {
+      $lpid = $dnsdb->_log(group_id => $group, domain_id => $fzid, rdns_id => $zid, entry => $entry);
+    } else {
+      $lpid = $dnsdb->_log(group_id => $group, rdns_id => $zid, entry => $entry);
+    }
+    # since unlike in most other operations, we only "know" the parent log entry *after*
+    # we're done entering all the child entries, we have to update the children with the parent ID
+    my $assoc = $dbh->prepare("UPDATE log SET logparent = ? WHERE log_id = ?");
+    for my $lcid (@cloglist) {
+      $assoc->execute($lpid, $lcid);
     }
     print "$entry\n";
-  } # else
+  }
+
   $dbh->commit;
 };
