From 5981b70de0f2d78207ec598384a4b7915c012da9 Mon Sep 17 00:00:00 2001 From: pop Date: Mon, 3 Mar 2003 00:45:37 +0000 Subject: [PATCH] Working on record retrieval. --- perl/lib/IDZebra/Resultset.pm | 38 +++++++++++++------------ perl/lib/IDZebra/RetrievalRecord.pm | 45 ++++++++++++++++++++++++++++++ perl/lib/IDZebra/Session.pm | 52 ++++++++++++++++++++++++++++------- 3 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 perl/lib/IDZebra/RetrievalRecord.pm diff --git a/perl/lib/IDZebra/Resultset.pm b/perl/lib/IDZebra/Resultset.pm index bf90d4b..d964e2d 100644 --- a/perl/lib/IDZebra/Resultset.pm +++ b/perl/lib/IDZebra/Resultset.pm @@ -1,17 +1,20 @@ -#!/usr/bin/perl -# ============================================================================ +# $Id: Resultset.pm,v 1.5 2003-03-03 00:45:37 pop Exp $ +# # Zebra perl API header # ============================================================================= -use strict; -use Carp; -# ============================================================================ package IDZebra::Resultset; -use IDZebra; -use IDZebra::Logger qw(:flags :calls); -use IDZebra::Repository; -use Scalar::Util qw(weaken); -our @ISA = qw(IDZebra::Logger); +use strict; +use warnings; + +BEGIN { + use IDZebra; + use IDZebra::Logger qw(:flags :calls); + use Scalar::Util qw(weaken); + use Carp; + our $VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; + our @ISA = qw(IDZebra::Logger); +} 1; # ----------------------------------------------------------------------------- @@ -21,11 +24,11 @@ sub new { my ($proto,$session, %args) = @_; my $class = ref($proto) || $proto; my $self = {}; + bless ($self, $class); + $self->{session} = $session; weaken ($self->{session}); - # Retrieval object - $self->{ro} = IDZebra::RetrievalObj->new(); $self->{odr_stream} = IDZebra::odr_createmem($IDZebra::ODR_DECODE); $self->{name} = $args{name}; @@ -33,14 +36,13 @@ sub new { $self->{errCode} = $args{errCode}; $self->{errString} = $args{errString}; - bless ($self, $class); - -# $self->{session}{resultsets}{$args{name}} = $self; -# weaken ($self->{session}{resultsets}{$args{name}}; - return ($self); } +sub recordCount { + my ($self) = @_; + return ($self->{recordCount}); +} sub count { my ($self) = @_; return ($self->{recordCount}); @@ -68,7 +70,7 @@ sub DESTROY { $self->{odr_stream} = undef; } - delete($self->{ro}); +# delete($self->{ro}); # delete($self->{session}{resultsets}{$self->{name}}); delete($self->{session}); } diff --git a/perl/lib/IDZebra/RetrievalRecord.pm b/perl/lib/IDZebra/RetrievalRecord.pm new file mode 100644 index 0000000..e142932 --- /dev/null +++ b/perl/lib/IDZebra/RetrievalRecord.pm @@ -0,0 +1,45 @@ +# $Id: RetrievalRecord.pm,v 1.1 2003-03-03 00:45:37 pop Exp $ +# +# Zebra perl API header +# ============================================================================= +package IDZebra::RetrievalRecord; + +use strict; +use warnings; + +BEGIN { + use IDZebra; + our $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +} + +# ============================================================================= +# THIS IS Just the documentation, the real code is autogenerated by SWIG in +# IDZebra.pm +# ============================================================================= +__END__ + +=head1 NAME + +IDZebra::RetrievalRecord - Structure representing a retrieval record + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 PROPERTIES + +=head1 COPYRIGHT + +Fill in + +=head1 AUTHOR + +Peter Popovics, pop@technomat.hu + +=head1 SEE ALSO + +IDZebra, IDZebra::Session, IDZebra::Resultset, Zebra documentation + +=cut + +1; diff --git a/perl/lib/IDZebra/Session.pm b/perl/lib/IDZebra/Session.pm index 98e0bc5..7a4ff19 100644 --- a/perl/lib/IDZebra/Session.pm +++ b/perl/lib/IDZebra/Session.pm @@ -1,4 +1,4 @@ -# $Id: Session.pm,v 1.7 2003-02-28 20:11:20 pop Exp $ +# $Id: Session.pm,v 1.8 2003-03-03 00:45:37 pop Exp $ # # Zebra perl API header # ============================================================================= @@ -7,14 +7,14 @@ package IDZebra::Session; use strict; use warnings; + BEGIN { use IDZebra; + use Scalar::Util; use IDZebra::Logger qw(:flags :calls); use IDZebra::Resultset; - use Scalar::Util; - use Carp; - our $VERSION = do { my @r = (q$Revision: 1.7 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; - our @ISA = qw(IDZebra::Logger); + our $VERSION = do { my @r = (q$Revision: 1.8 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +# our @ISA = qw(IDZebra::Logger); } 1; @@ -94,6 +94,13 @@ sub open { return ($self); } +sub checkzh { + my ($self) = @_; + unless (defined($self->{zh})) { + croak ("Zebra session is not opened"); + } +} + sub close { my ($self) = @_; @@ -136,6 +143,7 @@ sub DESTROY { # ----------------------------------------------------------------------------- sub group { my ($self,%args) = @_; + $self->checkzh; if ($#_ > 0) { $self->{rg} = $self->_makeRecordGroup(%args); $self->_selectRecordGroup($self->{rg}); @@ -145,6 +153,7 @@ sub group { sub selectRecordGroup { my ($self, $groupName) = @_; + $self->checkzh; $self->{rg} = $self->_getRecordGroup($groupName); $self->_selectRecordGroup($self->{rg}); } @@ -252,6 +261,8 @@ sub _selectRecordGroup { sub databases { my ($self, @databases) = @_; + $self->checkzh; + unless ($#_ >0) { return (keys(%{$self->{databases}})); } @@ -314,11 +325,13 @@ sub errAdd { # ----------------------------------------------------------------------------- sub begin_trans { my ($self) = @_; + $self->checkzh; IDZebra::begin_trans($self->{zh}); } sub end_trans { my ($self) = @_; + $self->checkzh; my $stat = IDZebra::ZebraTransactionStatus->new(); IDZebra::end_trans($self->{zh}, $stat); return ($stat); @@ -326,22 +339,26 @@ sub end_trans { sub begin_read { my ($self) =@_; + $self->checkzh; return(IDZebra::begin_read($self->{zh})); } sub end_read { my ($self) =@_; + $self->checkzh; IDZebra::end_read($self->{zh}); } sub shadow_enable { my ($self, $value) = @_; + $self->checkzh; if ($#_ > 0) { IDZebra::set_shadow_enable($self->{zh},$value); } return (IDZebra::get_shadow_enable($self->{zh})); } sub commit { my ($self) = @_; + $self->checkzh; if ($self->shadow_enable) { return(IDZebra::commit($self->{zh})); } @@ -363,16 +380,19 @@ sub odr_reset { # ----------------------------------------------------------------------------- sub init { my ($self) = @_; + $self->checkzh; return(IDZebra::init($self->{zh})); } sub compact { my ($self) = @_; + $self->checkzh; return(IDZebra::compact($self->{zh})); } sub update { my ($self, %args) = @_; + $self->checkzh; my $rg = $self->_update_args(%args); $self->_selectRecordGroup($rg); $self->begin_trans; @@ -383,6 +403,7 @@ sub update { sub delete { my ($self, %args) = @_; + $self->checkzh; my $rg = $self->_update_args(%args); $self->_selectRecordGroup($rg); $self->begin_trans; @@ -393,6 +414,7 @@ sub delete { sub show { my ($self, %args) = @_; + $self->checkzh; my $rg = $self->_update_args(%args); $self->_selectRecordGroup($rg); $self->begin_trans; @@ -414,12 +436,14 @@ sub _update_args { sub update_record { my ($self, %args) = @_; + $self->checkzh; return(IDZebra::update_record($self->{zh}, $self->_record_update_args(%args))); } sub delete_record { my ($self, %args) = @_; + $self->checkzh; return(IDZebra::delete_record($self->{zh}, $self->_record_update_args(%args))); } @@ -462,7 +486,6 @@ sub _record_update_args { $rg->{databaseName} = "Default" unless ($rg->{databaseName}); -# print STDERR "$rectype,$sysno,$match,$fname,$len\n"; unless ($rectype) { $rectype=""; } @@ -495,9 +518,11 @@ sub cql2pqf { } my $res = "\0" x 2048; my $r = IDZebra::cql2pqf($self->{cql_ct}, $cqlquery, $res, 2048); - unless ($r) {return (undef)}; + if ($r) { + carp ("Error transforming CQL query: '$cqlquery', status:$r"); + } $res=~s/\0.+$//g; - return ($res); + return ($res,$r); } @@ -507,6 +532,8 @@ sub cql2pqf { sub search { my ($self, %args) = @_; + $self->checkzh; + if ($args{cqlmap}) { $self->cqlmap($args{cqlmap}); } my $query; @@ -514,8 +541,11 @@ sub search { $query = $args{pqf}; } elsif ($args{cql}) { - unless ($query = $self->cql2pqf($args{cql})) { - croak ("Invalid CQL query: '$args{cql}'"); + my $cqlstat; + ($query, $cqlstat) = $self->cql2pqf($args{cql}); + unless ($query) { + croak ("Failed to transform query: '$args{cql}', ". + "status: ($cqlstat)"); } } unless ($query) { @@ -571,6 +601,8 @@ sub _search_pqf { sub sortResultsets { my ($self, $sortspec, $setname, @sets) = @_; + $self->checkzh; + my @setnames; my $count = 0; foreach my $rs (@sets) { -- 1.7.10.4