Ensure that changed options are reset when throwing an exception.
[irspy-moved-to-github.git] / lib / ZOOM / IRSpy / Task / Search.pm
index 25373d7..73c8497 100644 (file)
@@ -1,4 +1,3 @@
-# $Id: Search.pm,v 1.14 2007-05-01 15:32:06 mike Exp $
 
 package ZOOM::IRSpy::Task::Search;
 
@@ -49,14 +48,18 @@ sub run {
     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};
+    if (defined $this->{rs}) {
+       $this->set_options();
+       die "task $this has resultset?!";
+    }
 
     my $query;
     if ($qtype eq "pqf") {
-       $query = new ZOOM::Query::Prefix($qstr);
+       $query = new ZOOM::Query::PQF($qstr);
     } elsif ($qtype eq "cql") {
        $query = new ZOOM::Query::CQL($qstr);
     } else {
+       $this->set_options();
        die "Huh?!";
     }
 
@@ -66,16 +69,28 @@ sub run {
     #  APPLICATION'S RESPONSIBILITY to ensure that the callback
     #  invoked on success OR FAILURE makes arrangements for the set
     #  to be destroyed.
-    $this->{rs} = $conn->search($query);
+    eval {
+       $this->{rs} = $conn->search($query);
+    }; if ($@) {
+       $this->set_options();
+       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->{qtype} . ":" . $this->{qstr} . ")";
+    return ref($this) . "(" . $this->render_query() . ")";
 }
 
 use overload '""' => \&render;