# This tests the main searches specified The Bath Profile, Release 2.0,
# http://www.collectionscanada.gc.ca/bath/tp-bath2-e.htm
# Specifically section 5.A.0 ("Functional Area A: Level 0 Basic
-# Bibliographic Search and Retrieval") the its subsections.
+# Bibliographic Search and Retrieval") and its subsections:
+# http://www.collectionscanada.gc.ca/bath/tp-bath2.7-e.htm#a
+#
+# The Bath Level 0 searches have different access-points, but share:
+# Relation (2) 3 equal
+# Position (3) 3 any position in field
+# Structure (4) 2 word
+# Truncation (5) 100 do not truncate
+# Completeness (6) 1 incomplete subfield
+# But Seb's bug report at:
+# http://bugzilla.indexdata.dk/show_bug.cgi?id=3352#c0
+# wants use to use s=al t=r,l, where "s" is structure (4) and "al" is
+# AND-list, which apparently sends NO structure attribute; and "t" is
+# truncation (5) and "r,l" is right-and-left truncation (3).
+#
+# AND-listing (and selection of word or phrase-structure) is now
+# invoked in the Toroid, when the list of attributes is emitted; but
+# we can't test for 5=100 here, as the Bath Profile says to do, and
+# then use that as justification for emitting 5=3 in the Toroid.
package ZOOM::IRSpy::Test::Search::Bath;
my @bath_queries = (
- [ author => 1003 ], # 5.A.0.1
- [ title => 4 ], # 5.A.0.2
- [ subject => 21 ], # 5.A.0.3
- [ any => 1016 ], # 5.A.0.4
+ # Name => use, rel, pos, str, tru, com
+ [ author => 1003, 3, 3, 2, 100, 1 ], # 5.A.0.1
+ [ title => 4, 3, 3, 2, 100, 1 ], # 5.A.0.2
+ [ subject => 21, 3, 3, 2, 100, 1 ], # 5.A.0.3
+ [ any => 1016, 3, 3, 2, 100, 1 ], # 5.A.0.4
);
if $qindex >= @bath_queries;
my $ref = $bath_queries[$qindex];
- my($name, $use_attr) = @$ref;
+ my($name, @attrs) = @$ref;
- my $query = "\@attr 1=$use_attr \@attr 2=3 \@attr 3=3 \@attr 4=2 \@attr 5=100 \@attr 6=1 the";
+ my $query = join(" ", map { "\@attr $_=" . $attrs[$_-1] } (1..6)) . " the";
$conn->irspy_search_pqf($query, { qindex => $qindex }, {},
- ZOOM::Event::ZEND, \&found,
- "exception", \&error);
+ ZOOM::Event::ZEND, \&search_complete,
+ "exception", \&search_complete);
return ZOOM::IRSpy::Status::TASK_DONE;
}
-sub found {
+sub search_complete {
my($conn, $task, $udata, $event) = @_;
+ my $ok = ref $event && $event->isa("ZOOM::Exception") ? 0 : 1;
my $qindex = $udata->{qindex};
my $ref = $bath_queries[$qindex];
- my($name, $use_attr) = @$ref;
+ my($name) = @$ref;
my $n = $task->{rs}->size();
- $conn->log("irspy_test",
- "bath search #$qindex ('$name') found $n record",
- $n==1 ? "" : "s");
+ $conn->log("irspy_test", "bath search #$qindex ('$name') ",
+ $ok ? ("found $n record", $n==1 ? "" : "s") :
+ "had error: $event");
+
my $rec = $conn->record();
$rec->append_entry("irspy:status",
- "<irspy:search_bath name='$name' ok='1'>" .
+ "<irspy:search_bath name='$name' ok='$ok'>" .
isodate(time()) . "</irspy:search_bath>");
return start_search($conn, $qindex+1);
}
-sub error {
- my($conn, $task, $udata, $exception) = @_;
-
- $conn->log("irspy_test", "bath search had error: $exception");
- my $rec = $conn->record();
- $rec->append_entry("irspy:status", "<irspy:search_bath ok='0'>" .
- isodate(time()) . "</irspy:search_bath>");
- zoom_error_timeout_update($conn, $exception);
- return ZOOM::IRSpy::Status::TASK_DONE;
-}
-
-
1;