- my $database = $args->{DATABASES}->[0];
- my ( $connection, $results );
-
- eval {
- $connection = C4::Context->Zconn(
- # We're depending on the caller to have done some validation.
- $database eq 'biblios' ? 'biblioserver' : 'authorityserver',
- 0 # No, no async, doesn't really help much for single-server searching
- );
-
- $results = $connection->search_pqf( $args->{QUERY} );
-
- $self->_log_debug(' retry successful') if ($in_retry);
- };
- if ($@) {
- die $@ if ( ref($@) ne 'ZOOM::Exception' );
-
- if ( $@->diagset() eq 'ZOOM' && $@->code() == 10004 && !$in_retry ) {
- $self->_log_debug(' upstream server lost connection, retrying');
- return $self->_start_search( $args, 1 );
- }
-
- $self->_set_error_from_zoom( $args, $@ );
- $connection = undef;
- }
-
- return ( $connection, $results, $results ? $results->size() : -1 );
-}
-
-sub _check_fetch {
- my ( $self, $resultset, $args, $offset, $num_records ) = @_;
-
- if ( !defined( $resultset ) ) {
- $self->_set_error( $args, ERR_NO_SUCH_RESULTSET, 'No such resultset' );
- return 0;
- }
-
- if ( $offset + $num_records > $resultset->{hits} ) {
- $self->_set_error( $args, ERR_PRESENT_OUT_OF_RANGE, 'Fetch request out of range' );
- return 0;
- }
-
- return 1;
-}
-
-sub _fetch_record {
- my ( $self, $resultset, $args, $index, $num_to_prefetch ) = @_;
-
- my $record;
-
- eval {
- if ( !$resultset->{results}->record_immediate( $index ) ) {
- my $start = int( $index / $num_to_prefetch ) * $num_to_prefetch;
-
- if ( $start + $num_to_prefetch >= $resultset->{results}->size() ) {
- $num_to_prefetch = $resultset->{results}->size() - $start;
- }
-
- $self->_log_debug(" fetch uncached, fetching $num_to_prefetch records starting at $start");
-
- $resultset->{results}->records( $start, $num_to_prefetch, 0 );
- }
-
- $record = $resultset->{results}->record_immediate( $index )->raw();
- };
- if ($@) {
- die $@ if ( ref($@) ne 'ZOOM::Exception' );
- $self->_set_error_from_zoom( $args, $@ );
- return;
- } else {
- return $record;
- }
-}