-# $Id: Search.pm,v 1.1 2006-10-06 11:33:08 mike Exp $
+# $Id: Search.pm,v 1.16 2007-12-18 11:59:42 mike Exp $
package ZOOM::IRSpy::Task::Search;
sub new {
my $class = shift();
- my($query) = shift();
+ my $qtype = shift();
+ my $qstr = shift();
+ die "$class: unrecognised query type '$qtype'"
+ if !grep { $qtype eq $_ } qw(pqf cql);
my $this = $class->SUPER::new(@_);
- $this->{query} = $query;
+ $this->{qtype} = $qtype;
+ $this->{qstr} = $qstr;
$this->{rs} = undef;
return $this;
}
sub run {
my $this = shift();
+ $this->set_options();
+
my $conn = $this->conn();
- my $query = $this->{query};
- $this->irspy()->log("irspy_test", $conn->option("host"),
- " searching for '$query'");
- $this->{rs} = $conn->search_pqf($query);
- # Wow -- that's it.
+ $conn->connect($conn->option("host"));
+
+ my $qtype = $this->{qtype};
+ my $qstr = $this->{qstr};
+ $this->irspy()->log("irspy_task", $conn->option("host"),
+ " searching for '$qtype:$qstr'");
+ die "task $this has resultset?!" if defined $this->{rs};
+
+ my $query;
+ if ($qtype eq "pqf") {
+ $query = new ZOOM::Query::PQF($qstr);
+ } elsif ($qtype eq "cql") {
+ $query = new ZOOM::Query::CQL($qstr);
+ } else {
+ die "Huh?!";
+ }
+
+ ### Note well that when this task runs, it creates a result-set
+ # object which MUST BE DESTROYED in order to prevent large-scale
+ # memory leakage. So when creating a Task::Search, it is the
+ # APPLICATION'S RESPONSIBILITY to ensure that the callback
+ # invoked on success OR FAILURE makes arrangements for the set
+ # to be destroyed.
+ eval {
+ $this->{rs} = $conn->search($query);
+ }; if ($@) {
+ die "remote search '$query' had error: '$@'";
+ }
+
+ warn "no ZOOM-C level events queued by $this"
+ if $conn->is_idle();
+
+ $this->set_options();
+}
+
+# Unique to Task::Search, used only for logging
+sub render_query {
+ my $this = shift();
+ return $this->{qtype} . ":" . $this->{qstr}
}
sub render {
my $this = shift();
- return ref($this) . " " . $this->{query};
+ return ref($this) . "(" . $this->render_query() . ")";
}
use overload '""' => \&render;