Changeset 722 for trunk/DNSDB.pm


Ignore:
Timestamp:
06/13/16 16:06:41 (8 years ago)
Author:
Kris Deugau
Message:

/trunk

Checkpoint adding global record search. See #57.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DNSDB.pm

    r720 r722  
    48824882  return $loglist;
    48834883} # end getLogEntries()
     4884
     4885
     4886## DNSDB::recSearchCount()
     4887# Get a total count for a global record search
     4888## DNSDB::recSearch()
     4889# Find records matching the search string
     4890sub recSearch {
     4891  my $self = shift;
     4892  my $dbh = $self->{dbh};
     4893
     4894  my %args = @_;
     4895
     4896my $sql = q(
     4897SELECT r.domain_id,d.domain,g1.group_name AS domgroup,r.rdns_id,z.revnet AS revzone,g2.group_name AS
     4898revgroup,r.host,t.name AS rectype,r.val,l.description AS location
     4899FROM records r
     4900LEFT JOIN domains d ON r.domain_id = d.domain_id
     4901  LEFT JOIN groups g1 ON d.group_id = g1.group_id
     4902LEFT JOIN revzones z ON r.rdns_id = z.rdns_id
     4903  LEFT JOIN groups g2 on z.group_id = g2.group_id
     4904JOIN rectypes t ON r.type = t.val
     4905LEFT JOIN locations l ON r.location = l.location
     4906WHERE r.type <> 6 AND (r.host ~* ? OR r.val ~* ?)
     4907);
     4908
     4909# Limit scope based on group
     4910if ($args{group} != 1) {
     4911  my @grouplist;
     4912  $self->getChildren($args{group}, \@grouplist);
     4913  my $groupset = join(',', $args{group}, @grouplist);
     4914  # oh my aching HEAD.  there has to be a better way to do conditions on joined tables...
     4915  $sql .= "AND (
     4916  (g1.group_id IN ($groupset) AND g2.group_id IN ($groupset)) OR
     4917  (g1.group_id IN ($groupset) AND g2.group_id IS NULL) OR
     4918  (g1.group_id IS NULL AND g2.group_id IN ($groupset))
     4919  )
     4920";
     4921}
     4922
     4923my $foo = q(
     4924SELECT r.domain_id,d.domain,g1.group_name AS domgroup,r.rdns_id,z.revnet AS revzone,g2.group_name AS
     4925revgroup,r.host,t.name AS rectype,r.val,l.description AS location
     4926FROM records r
     4927LEFT JOIN domains d on r.domain_id = d.domain_id
     4928  LEFT JOIN groups g1 on d.group_id = g1.group_id
     4929LEFT JOIN revzones z on r.rdns_id = z.rdns_id
     4930  LEFT JOIN groups g2 on z.group_id = g2.group_id
     4931JOIN rectypes t ON r.type = t.val
     4932LEFT JOIN locations l ON r.location = l.location
     4933WHERE r.type <> 6 AND (r.host ~* 'kings' OR r.val ~* 'kings');
     4934);
     4935#ORDER BY record_id
     4936
     4937#warn "$sql\n";
     4938# safety valve.  probably need a way to flag this back to the caller.
     4939if (!$args{searchfor} || $args{searchfor} =~ /^.{0,2}$/) { $sql .= "LIMIT 10"; }
     4940
     4941#$sql .= "LIMIT 20" if $sql !~ /LIMIT/;
     4942
     4943  return $dbh->selectall_arrayref($sql, { Slice => {} }, $args{searchfor}, $args{searchfor}) or warn $dbh->errstr;
     4944} # end recSearch()
    48844945
    48854946
Note: See TracChangeset for help on using the changeset viewer.