-# $Id: ZOOM.pm,v 1.12 2005-11-04 17:08:00 mike Exp $
+# $Id: ZOOM.pm,v 1.13 2005-11-07 15:48:08 mike Exp $
use strict;
use warnings;
sub QUERY_CQL { 20002 }
sub QUERY_PQF { 20003 }
sub SORTBY { 20004 }
+sub CLONE { 20005 }
# The "Event" package contains constants returned by last_event()
package ZOOM::Event;
return "can't set prefix query";
} elsif ($code == ZOOM::Error::SORTBY) {
return "can't set sort-specification";
+ } elsif ($code == ZOOM::Error::CLONE) {
+ return "can't clone record";
}
return Net::Z3950::ZOOM::diag_str($code);
};
}
-# PRIVATE within this class
+# PRIVATE to this class
sub _conn {
my $this = shift();
die "You can't create $class objects: it's a virtual base class";
}
+# PRIVATE to this class and ZOOM::Connection::search()
sub _query {
my $this = shift();
die "You can't create $class objects directly";
}
-# PRIVATE to ZOOM::Connection::search()
+# PRIVATE to ZOOM::Connection::search() and ZOOM::Connection::search_pqf()
sub _new {
my $class = shift();
my($conn, $query, $_rs) = @_;
}, $class;
}
-# PRIVATE within this class
+# PRIVATE to this class
sub _rs {
my $this = shift();
die "You can't create $class objects directly";
}
-# PRIVATE to ZOOM::ResultSet::record()
+# PRIVATE to ZOOM::ResultSet::record(),
+# ZOOM::ResultSet::record_immediate(), ZOOM::ResultSet::records() and
+# ZOOM::Record::clone()
+#
sub _new {
my $class = shift();
my($rs, $which, $_rec) = @_;
}, $class;
}
-# PRIVATE within this class
+# PRIVATE to this class
sub _rec {
my $this = shift();
- return $this->{_rec};
+ my $_rec = $this->{_rec};
+ die "{_rec} undefined: has this Record been destroy()ed?"
+ if !defined $_rec;
+
+ return $_rec;
}
sub render {
return $string;
}
+sub clone {
+ my $this = shift();
+
+ my $raw = Net::Z3950::ZOOM::record_clone($this->_rec())
+ or ZOOM::_oops(ZOOM::Error::CLONE);
+
+ # Arg 1 (rs) is undefined as the new record doesn't belong to an RS
+ return _new ZOOM::Record(undef, undef, $raw);
+}
+
+sub destroy {
+ my $this = shift();
+
+ Net::Z3950::ZOOM::record_destroy($this->_rec());
+ $this->{_rec} = undef;
+}
+
1;