1 # $Id: Resultset.pm,v 1.8 2003-03-05 13:55:22 pop Exp $
3 # Zebra perl API header
4 # =============================================================================
5 package IDZebra::Resultset;
12 use IDZebra::Logger qw(:flags :calls);
13 use Scalar::Util qw(weaken);
15 our $VERSION = do { my @r = (q$Revision: 1.8 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
16 our @ISA = qw(IDZebra::Logger);
20 # -----------------------------------------------------------------------------
21 # Class constructors, destructor
22 # -----------------------------------------------------------------------------
24 my ($proto,$session, %args) = @_;
25 my $class = ref($proto) || $proto;
27 bless ($self, $class);
29 $self->{session} = $session;
30 weaken ($self->{session});
32 $self->{odr_stream} = IDZebra::odr_createmem($IDZebra::ODR_DECODE);
34 $self->{name} = $args{name};
35 $self->{recordCount} = $args{recordCount};
36 $self->{errCode} = $args{errCode};
37 $self->{errString} = $args{errString};
44 return ($self->{recordCount});
48 return ($self->{recordCount});
53 return ($self->{errCode});
58 return ($self->{errCode});
61 # =============================================================================
65 # print STDERR "Destroy RS\n";
69 if ($self->{session}{zh}) {
70 my $r = IDZebra::deleteResultSet($self->{session}{zh},
71 0, #Z_DeleteRequest_list,
76 if ($self->{odr_stream}) {
77 IDZebra::odr_reset($self->{odr_stream});
78 IDZebra::odr_destroy($self->{odr_stream});
79 $self->{odr_stream} = undef;
82 delete($self->{session});
84 # -----------------------------------------------------------------------------
86 my ($self, %args) = @_;
88 unless ($self->{session}{zh}) {
89 croak ("Session is closed or out of scope");
91 my $from = $args{from} ? $args{from} : 1;
92 my $to = $args{to} ? $args{to} : $self->{recordCount};
94 my $elementSet = $args{elementSet} ? $args{elementSet} : 'R';
95 my $schema = $args{schema} ? $args{schema} : '';
96 my $recordSyntax = $args{recordSyntax} ? $args{recordSyntax} : '';
98 my $class = $args{class} ? $args{class} : '';
101 my $ro = IDZebra::RetrievalObj->new();
102 IDZebra::records_retrieve($self->{session}{zh},
115 for (my $i=$from; $i<=$to; $i++) {
116 my $rec = IDZebra::RetrievalRecord->new();
117 IDZebra::record_retrieve($ro, $self->{odr_stream}, $rec, $i-$from+1);
125 IDZebra::odr_reset($self->{odr_stream});
130 # ============================================================================
132 my ($self, $sortspec, $setname) = @_;
134 unless ($self->{session}{zh}) {
135 croak ("Session is closed or out of scope");
139 return ($_[0] = $self->{session}->sortResultsets($sortspec,
140 $self->{session}->_new_setname, ($self)));
143 return ($self->{session}->sortResultsets($sortspec,
148 # ============================================================================
153 IDZebra::Resultset - Representation of Zebra search results
159 printf ("RS Status is %d (%s)\n", $rs->errCode, $rs->errString);
161 my @recs = $rs->records(from => 1,
166 The I<Resultset> object represents results of a Zebra search. Contains number of hits, search status, and can be used to sort and retrieve the records.
170 The folowing properties are available, trough object methods and the object hash reference:
176 The error code returned from search, resulting the Resultset object.
180 The optional error string
184 The number of hits (records available) in the resultset
188 Just the synonym for I<recordCount>
192 =head1 RETRIEVING RECORDS
194 In order to retrieve records, use the I<records> method:
196 my @recs = $rs->records();
198 By default this is going to return an array of IDZebra::RetrievalRecord objects. The possible arguments are:
204 Retrieve records from the given position. The first record corresponds to position 1. If not specified, retrieval starts from the first record.
208 The last record position to be fetched. If not specified, all records are going to be fetched, starting from position I<from>.
212 The element set used for retrieval. If not specified 'I<R>' is used, which will return the "record" in the original format (ie.: without extraction, just as the original file, or data buffer in the update call).
216 The schema used for retrieval. The default is "".
218 =item B<recordSyntax>
220 The record syntax for retrieval. The default is SUTRS.
226 You can sort resultsets by calling:
228 $rs1->sort($sort_expr);
230 or create a new sorted resultset:
232 $rs2 = $rs1->sort($sort_expr);
234 The sort expression has the same format as described in the I<yaz_client> documentation. For example:
236 $rs1->sort('1=4 id');
238 will sort thr results by title, in a case insensitive way, in descending order, while
242 will sort ascending by titles.
250 Peter Popovics, pop@technomat.hu
254 Zebra documentation, IDZebra::ResultSet, IDZebra::RetrievalRecord manpages.