Removed old stuff, and done some cleanup in the documentation, and
[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     return ($self);
38 }
39
40 sub count {
41     my ($self) = @_;
42     return ($self->{recordCount});
43 }
44
45 sub errCode {
46     my ($self) = @_;
47     return ($self->{errCode});
48 }
49
50 sub errString {
51     my ($self) = @_;
52     return ($self->{errCode});
53 }
54
55 sub DESTROY {
56     my ($self) = @_;
57
58 #    print STDERR "Destroy RS\n";
59
60     # Deleteresultset?
61
62     if ($self->{odr_stream}) {
63         IDZebra::odr_reset($self->{odr_stream});
64         IDZebra::odr_destroy($self->{odr_stream});
65         $self->{odr_stream} = undef;  
66     }
67
68     delete($self->{ro});
69     delete($self->{session});
70 }
71 # -----------------------------------------------------------------------------
72 sub records {
73     my ($self, %args) = @_;
74
75     my $from = $args{from} ? $args{from} : 1;
76     my $to   = $args{to}   ? $args{to}   : $self->{recordCount};
77
78     my $elementSet   = $args{elementSet}   ? $args{elementSet}    : 'R';
79     my $schema       = $args{schema}       ? $args{schema}        : '';
80     my $recordSyntax = $args{recordSyntax} ? $args{recordSyntax}  : '';
81     
82
83     my $ro = IDZebra::RetrievalObj->new();
84     IDZebra::records_retrieve($self->{session}{zh},
85                               $self->{odr_stream},
86                               $self->{name},
87                               $elementSet,
88                               $schema,
89                               $recordSyntax,
90                               $from,
91                               $to,
92                               $ro);
93
94
95     my @res = ();
96
97     for (my $i=$from; $i<=$to; $i++) {
98         my $rec = IDZebra::RetrievalRecord->new();
99         IDZebra::record_retrieve($ro, $self->{odr_stream}, $rec, $i-$from+1);
100         push (@res, $rec);
101     }
102
103     IDZebra::odr_reset($self->{odr_stream});
104
105     return (@res);
106 }
107
108 sub sort {
109     my ($self, $sortspec, $setname) = @_;
110     unless ($setname) {
111         $_[0] = $self->{session}->sortResultsets($sortspec, 
112                                                  $self->{name}, ($self));
113         return ($_[0]);
114     } else {
115         return ($self->{session}->sortResultsets($sortspec, 
116                                                  $setname, ($self)));
117     }
118 }
119
120 # ============================================================================
121 __END__
122
123 =head1 NAME
124
125 IDZebra::Resultset - Representation of Zebra search results
126
127 =head1 SYNOPSIS
128
129 =head1 DESCRIPTION
130
131 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.
132
133 =head1 PROPERTIES
134
135   $count = $rs->count;
136
137   printf ("RS Status is %d (%s)\n", $rs->errCode, $rs->errString);
138
139 I<$rs-E<gt>errCode> is 0, if there were no errors during search.
140
141 =head1 RETRIEVING RECORDS
142
143
144 =head1 COPYRIGHT
145
146 Fill in
147
148 =head1 AUTHOR
149
150 Peter Popovics, pop@technomat.hu
151
152 =head1 SEE ALSO
153
154 IDZebra, IDZebra::Data1, Zebra documentation
155
156 =cut