1 # $Id: Resultset.pm,v 1.9 2003-03-06 23:32:10 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.9 $ =~ /\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 if (($to-$from) >= 1000) {
96 croak ("Cannot fetch more than 1000 records at a time");
102 my $elementSet = $args{elementSet} ? $args{elementSet} : 'R';
103 my $schema = $args{schema} ? $args{schema} : '';
104 my $recordSyntax = $args{recordSyntax} ? $args{recordSyntax} : '';
106 my $class = $args{class} ? $args{class} : '';
109 my $ro = IDZebra::RetrievalObj->new();
110 IDZebra::records_retrieve($self->{session}{zh},
122 for (my $i=$from; $i<=$to; $i++) {
123 my $rec = IDZebra::RetrievalRecord->new();
124 IDZebra::record_retrieve($ro, $self->{odr_stream}, $rec, $i-$from+1);
132 IDZebra::odr_reset($self->{odr_stream});
137 # ============================================================================
139 my ($self, $sortspec, $setname) = @_;
141 unless ($self->{session}{zh}) {
142 croak ("Session is closed or out of scope");
146 return ($_[0] = $self->{session}->sortResultsets($sortspec,
147 $self->{session}->_new_setname, ($self)));
150 return ($self->{session}->sortResultsets($sortspec,
155 # ============================================================================
160 IDZebra::Resultset - Representation of Zebra search results
166 printf ("RS Status is %d (%s)\n", $rs->errCode, $rs->errString);
168 my @recs = $rs->records(from => 1,
173 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.
177 The folowing properties are available, trough object methods and the object hash reference:
183 The error code returned from search, resulting the Resultset object.
187 The optional error string
191 The number of hits (records available) in the resultset
195 Just the synonym for I<recordCount>
199 =head1 RETRIEVING RECORDS
201 In order to retrieve records, use the I<records> method:
203 my @recs = $rs->records();
205 By default this is going to return an array of IDZebra::RetrievalRecord objects. The possible arguments are:
211 Retrieve records from the given position. The first record corresponds to position 1. If not specified, retrieval starts from the first record.
215 The last record position to be fetched. If not specified, all records are going to be fetched, starting from position I<from>.
219 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).
223 The schema used for retrieval. The default is "".
225 =item B<recordSyntax>
227 The record syntax for retrieval. The default is SUTRS.
233 You can sort resultsets by calling:
235 $rs1->sort($sort_expr);
237 or create a new sorted resultset:
239 $rs2 = $rs1->sort($sort_expr);
241 The sort expression has the same format as described in the I<yaz_client> documentation. For example:
243 $rs1->sort('1=4 id');
245 will sort thr results by title, in a case insensitive way, in descending order, while
249 will sort ascending by titles.
257 Peter Popovics, pop@technomat.hu
261 Zebra documentation, IDZebra::ResultSet, IDZebra::RetrievalRecord manpages.