Working on record retrieval.
[idzebra-moved-to-github.git] / perl / lib / IDZebra / Resultset.pm
1 # $Id: Resultset.pm,v 1.5 2003-03-03 00:45:37 pop Exp $
2
3 # Zebra perl API header
4 # =============================================================================
5 package IDZebra::Resultset;
6
7 use strict;
8 use warnings;
9
10 BEGIN {
11     use IDZebra;
12     use IDZebra::Logger qw(:flags :calls);
13     use Scalar::Util qw(weaken);
14     use Carp;
15     our $VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; 
16     our @ISA = qw(IDZebra::Logger);
17 }
18
19 1;
20 # -----------------------------------------------------------------------------
21 # Class constructors, destructor
22 # -----------------------------------------------------------------------------
23 sub new {
24     my ($proto,$session, %args) = @_;
25     my $class = ref($proto) || $proto;
26     my $self = {};
27     bless ($self, $class);
28
29     $self->{session} = $session;
30     weaken ($self->{session});
31
32     $self->{odr_stream} = IDZebra::odr_createmem($IDZebra::ODR_DECODE);
33
34     $self->{name}        = $args{name};
35     $self->{recordCount} = $args{recordCount};
36     $self->{errCode}     = $args{errCode};
37     $self->{errString}   = $args{errString};
38
39     return ($self);
40 }
41
42 sub recordCount {
43     my ($self) = @_;
44     return ($self->{recordCount});
45 }
46 sub count {
47     my ($self) = @_;
48     return ($self->{recordCount});
49 }
50
51 sub errCode {
52     my ($self) = @_;
53     return ($self->{errCode});
54 }
55
56 sub errString {
57     my ($self) = @_;
58     return ($self->{errCode});
59 }
60
61 # =============================================================================
62 sub DESTROY {
63     my ($self) = @_;
64
65     # Deleteresultset?
66
67     if ($self->{odr_stream}) {
68         IDZebra::odr_reset($self->{odr_stream});
69         IDZebra::odr_destroy($self->{odr_stream});
70         $self->{odr_stream} = undef;  
71     }
72
73 #    delete($self->{ro});
74 #    delete($self->{session}{resultsets}{$self->{name}});
75     delete($self->{session});
76 }
77 # -----------------------------------------------------------------------------
78 sub records {
79     my ($self, %args) = @_;
80
81     my $from = $args{from} ? $args{from} : 1;
82     my $to   = $args{to}   ? $args{to}   : $self->{recordCount};
83
84     my $elementSet   = $args{elementSet}   ? $args{elementSet}    : 'R';
85     my $schema       = $args{schema}       ? $args{schema}        : '';
86     my $recordSyntax = $args{recordSyntax} ? $args{recordSyntax}  : '';
87     
88     my $class        = $args{class}        ? $args{class}         : '';
89     
90
91     my $ro = IDZebra::RetrievalObj->new();
92     IDZebra::records_retrieve($self->{session}{zh},
93                               $self->{odr_stream},
94                               $self->{name},
95                               $elementSet,
96                               $schema,
97                               $recordSyntax,
98                               $from,
99                               $to,
100                               $ro);
101
102
103     my @res = ();
104
105     for (my $i=$from; $i<=$to; $i++) {
106         my $rec = IDZebra::RetrievalRecord->new();
107         IDZebra::record_retrieve($ro, $self->{odr_stream}, $rec, $i-$from+1);
108         if ($class) {
109             
110         } else {
111             push (@res, $rec);
112         }
113     }
114
115     IDZebra::odr_reset($self->{odr_stream});
116
117     return (@res);
118 }
119
120 # ============================================================================
121 sub sort {
122     my ($self, $sortspec, $setname) = @_;
123     unless ($setname) {
124         $_[0] = $self->{session}->sortResultsets($sortspec, 
125                                                  $self->{name}, ($self));
126         return ($_[0]);
127     } else {
128         return ($self->{session}->sortResultsets($sortspec, 
129                                                  $setname, ($self)));
130     }
131 }
132
133 # ============================================================================
134 __END__
135
136 =head1 NAME
137
138 IDZebra::Resultset - Representation of Zebra search results
139
140 =head1 SYNOPSIS
141
142 =head1 DESCRIPTION
143
144 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.
145
146 =head1 PROPERTIES
147
148   $count = $rs->count;
149
150   printf ("RS Status is %d (%s)\n", $rs->errCode, $rs->errString);
151
152 I<$rs-E<gt>errCode> is 0, if there were no errors during search.
153
154 =head1 RETRIEVING RECORDS
155
156
157 =head1 COPYRIGHT
158
159 Fill in
160
161 =head1 AUTHOR
162
163 Peter Popovics, pop@technomat.hu
164
165 =head1 SEE ALSO
166
167 IDZebra, IDZebra::Data1, Zebra documentation
168
169 =cut