X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fdbshow.pl;h=1c3b0139e2529017bc4909b104633914e4aebbdb;hb=88c2b296ba903fdd356e351b83fcb844e2d6eacd;hp=446531522f4172d17f9eca40b477dc496fd062f8;hpb=3e6971e33c8757e1e952922c44903707379dd100;p=spider.git diff --git a/cmd/dbshow.pl b/cmd/dbshow.pl index 44653152..1c3b0139 100644 --- a/cmd/dbshow.pl +++ b/cmd/dbshow.pl @@ -12,19 +12,49 @@ my $name = shift @f if @f; my $db = DXDb::getdesc($name); return (1, $self->msg('db3', $name)) unless $db; -if ($db->remote) { - push @out, $self->msg('db11', $db->remote); - for (@f) { - my $n = DXDb::newstream($self->call); - DXProt::route(undef, $db->remote, DXProt::pc44($main::mycall, $db->remote, $n, uc $db->name,uc $_, $self->call)); - } -} else { - for (@f) { - my $value = $db->getkey($_); - if ($value) { - push @out, split /\n/, $value; - } else { - push @out, $self->msg('db2', $_, $db->{name}); +my @db; +push @db, $name; +push @db, @{$db->chain} if $db->chain; + +my $n; +foreach $n (@db) { + $db = DXDb::getdesc($n); + return (1, $self->msg('db3', $n)) unless $db; + + if ($db->remote) { + + # remote databases + unless (DXCluster->get_exact($db->remote) || DXChannel->get($db->remote)) { + push @out, $self->msg('db4', uc $name, $db->remote); + last; + } + + push @out, $self->msg('db11', $db->remote); + for (@f) { + my $n = DXDb::newstream($self->call); + DXProt::route(undef, $db->remote, DXProt::pc44($main::mycall, $db->remote, $n, uc $db->name,uc $_, $self->call)); + } + last; + } else { + + # local databases can chain to remote ones + my $count; + push @out, $db->print('pre'); + push @out, "@f"; + for (@f) { + push @out, $db->name . " $_"; + my $value = $db->getkey($_); + push @out, $db->name . ": $_ : $value"; + if ($value) { + push @out, split /\n/, $value; + $count++; + } else { + push @out, $self->msg('db2', uc $_, uc $db->{name}); + } + } + if ($count) { + push @out, $db->print('post'); + last; } } }