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