--- trunk/lib/BackupPC/SearchLib.pm 2005/08/28 10:45:51 85 +++ trunk/lib/BackupPC/SearchLib.pm 2005/08/28 12:35:59 86 @@ -15,6 +15,12 @@ my $dsn = $Conf{SearchDSN}; my $db_user = $Conf{SearchUser} || ''; +my $index_path = $Conf{HyperEstraierIndex}; +if ($index_path) { + $index_path = $TopDir . '/' . $index_path; + $index_path =~ s#//#/#g; +} + my $dbh; sub get_dbh { @@ -26,7 +32,14 @@ my @ret; my $dbh = get_dbh(); - my $sth = $dbh->prepare(qq{ SELECT id, share FROM shares ORDER BY share} ); + my $sth = $dbh->prepare(qq{ + SELECT + shares.id as id, + hosts.name || ':' || shares.name as share + FROM shares + JOIN hosts on hostid = hosts.id + ORDER BY share + } ); $sth->execute(); push @ret, { 'id' => '', 'share' => '-'}; # dummy any @@ -38,7 +51,7 @@ sub epoch_to_iso { my $t = shift || return; - my $iso = BackupPC::Lib::timeStamp($t); + my $iso = BackupPC::Lib::timeStamp(undef, $t); $iso =~ s/\s/ /g; return $iso; } @@ -100,12 +113,12 @@ files.id AS fid, hosts.name AS hname, shares.name AS sname, - shares.share AS sharename, - files.backupNum AS backupNum, - files.name AS filename, + -- shares.share AS sharename, + files.backupnum AS backupnum, + -- files.name AS filename, files.path AS filepath, files.date AS date, - files.type AS filetype, + files.type AS type, files.size AS size, -- dvds.name AS dvd null AS dvd @@ -115,7 +128,7 @@ FROM files INNER JOIN shares ON files.shareID=shares.ID INNER JOIN hosts ON hosts.ID = shares.hostID - INNER JOIN backups ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID + INNER JOIN backups ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID }; my $sql_dvd_from = qq{ @@ -154,26 +167,76 @@ my @ret; while (my $row = $sth->fetchrow_hashref()) { - push(@ret, { - 'hname' => $row->{'hname'}, - 'sname' => $row->{'sname'}, - 'sharename' => $row->{'sharename'}, - 'backupno' => $row->{'backupnum'}, - 'fname' => $row->{'filename'}, - 'fpath' => $row->{'filepath'}, - 'networkpath' => $row->{'networkpath'}, - 'date' => $row->{'date'}, - 'type' => $row->{'filetype'}, - 'size' => $row->{'size'}, - 'id' => $row->{'fid'}, - 'dvd' => $row->{'dvd'} - }); + push @ret, $row; } $sth->finish(); return ($results, \@ret); } +sub getFilesHyperEstraier($$) { + my ($param, $offset) = @_; + + die "no index_path?" unless ($index_path); + + use HyperEstraier; + + # open the database + my $db = HyperEstraier::Database->new(); + $db->open($index_path, $HyperEstraier::ESTDBREADER); + + # create a search condition object + my $cond = HyperEstraier::Condition->new(); + + my $q = $param->{'search_filename'}; + my $shareid = $param->{'search_share'}; + + if ($q) { + $q =~ s/(.)/$1 /g; + + # set the search phrase to the search condition object + $cond->set_phrase($q); + + my ($backup_from, $backup_to, $files_from, $files_to) = dates_from_form($param); + + $cond->add_attr("backup_date NUMGE $backup_from") if ($backup_from); + $cond->add_attr("backup_date NUMLE $backup_to") if ($backup_to); + + $cond->add_attr("date NUMGE $files_from") if ($files_from); + $cond->add_attr("date NUMLE $files_to") if ($files_to); + + $cond->add_attr("shareid NUMEQ $shareid") if ($shareid); + } + + $offset ||= 0; + $offset = ($offset * $on_page); + +# $cond->set_max( $offset + $on_page ); + $cond->set_options( $HyperEstraier::Condition::SURE ); + $cond->set_order( 'date NUMA' ); + + # get the result of search + my $result = $db->search($cond, 0); + $result->get(0); + + my @res; + my $hits = $result->size; + + # for each document in result + for my $i ($offset .. $result->size-1) { + my $id = $result->get($i); + my $doc = $db->get_doc($id, 0); + + my $row; + foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) { + $row->{$c} = $doc->attr($c); + } + push @res, $row; + } + + return ($hits, \@res); +} + sub getBackupsNotBurned() { my $dbh = get_dbh(); @@ -181,14 +244,14 @@ SELECT backups.hostID AS hostid, min(hosts.name) AS host, - backups.num AS backupno, + backups.num AS backupnum, min(backups.type) AS type, min(backups.date) AS date, min(backups.size) AS size FROM files INNER JOIN shares ON files.shareID=shares.ID INNER JOIN hosts ON hosts.ID = shares.hostID - INNER JOIN backups ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID + INNER JOIN backups ON backups.num = files.backupnum and backups.hostID = hosts.ID AND backups.shareID = shares.ID WHERE files.dvdid IS NULL GROUP BY @@ -276,13 +339,13 @@ $retHTML .= ""; if ($addForm) { $retHTML .= ''; } $retHTML .= '' . $backup->{'host'} . '' . - '' . $backup->{'backupno'} . '' . + '' . $backup->{'backupnum'} . '' . '' . $backup->{'type'} . '' . '' . epoch_to_iso( $backup->{'date'} ) . '' . '' . $backup->{'age'} . '' . @@ -299,8 +362,8 @@ return $retHTML; } -sub displayGrid($$) { - my ($param, $addForm) = @_; +sub displayGrid($) { + my ($param) = @_; my $offset = $param->{'offset'}; my $hilite = $param->{'search_filename'}; @@ -309,7 +372,12 @@ my $start_t = time(); - my ($results, $files) = getFiles($param, $offset); + my ($results, $files); + if ($param->{'use_hest'}) { + ($results, $files) = getFilesHyperEstraier($param, $offset); + } else { + ($results, $files) = getFiles($param, $offset); + } my $dur_t = time() - $start_t; my $dur = sprintf("%0.4fs", $dur_t); @@ -328,13 +396,6 @@ } - if ($addForm) { - $retHTML .= qq{
}; - $retHTML.= qq{}; - $retHTML .= qq{}; - } - - $retHTML .= qq{
Found $results files showing $from - $to (took $dur) @@ -370,9 +431,9 @@ $retHTML .= qq{}; $retHTML .= - qq{} . $file->{'sharename'} . qq{} . - qq{$typeStr } . hilite_html( $file->{'fpath'}, $hilite ) . qq{} . - qq{} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupno'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'fpath'} )}, $file->{'backupno'} ) . qq{} . + qq{} . $file->{'hname'} . ':' . $file->{'sname'} . qq{} . + qq{$typeStr } . hilite_html( $file->{'filepath'}, $hilite ) . qq{} . + qq{} . restore_link( $typeStr, ${EscURI( $file->{'hname'} )}, $file->{'backupnum'}, ${EscURI( $file->{'sname'})}, ${EscURI( $file->{'filepath'} )}, $file->{'backupnum'} ) . qq{} . qq{} . $file->{'size'} . qq{} . qq{} . epoch_to_iso( $file->{'date'} ) . qq{} . qq{} . $file->{'dvd'} . qq{}; @@ -439,8 +500,6 @@ $retHTML .= "
"; - $retHTML .= "
" if ($addForm); - return $retHTML; }