summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
e967aa3)
- implement logically deleted records (really!)
- re-ordered values tests using cmp_ok so that reporting is correct,
- return record in fetch even if it's in memory (bugfix)
- removed some obsolete code
git-svn-id: file:///home/dpavlin/svn/Biblio-Isis/trunk@25
4670fa4d-42ec-0310-ab5b-
a66af6943492
BEGIN {
use Exporter ();
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
BEGIN {
use Exporter ();
use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw (Exporter);
#Give a hoot don't pollute, do not export more than needed by default
@EXPORT = qw ();
@ISA = qw (Exporter);
#Give a hoot don't pollute, do not export more than needed by default
@EXPORT = qw ();
# is mfn allready in memory?
my $old_mfn = $self->{'current_mfn'} || -1;
# is mfn allready in memory?
my $old_mfn = $self->{'current_mfn'} || -1;
- return if ($mfn == $old_mfn);
+ return $self->{record} if ($mfn == $old_mfn);
print STDERR "## fetch: $mfn\n" if ($self->{debug});
print STDERR "## fetch: $mfn\n" if ($self->{debug});
+ # delete old record
+ delete $self->{record};
+
# read XRFMFB abd XRFMFP
read($self->{'fileXRF'}, $buff, 4);
my $pointer=unpack("l",$buff) || carp "pointer is null";
# read XRFMFB abd XRFMFP
read($self->{'fileXRF'}, $buff, 4);
my $pointer=unpack("l",$buff) || carp "pointer is null";
+ # check for logically deleted record
+ if ($pointer < 0) {
+ print STDERR "## record $mfn is logically deleted\n" if ($self->{debug});
+ $self->{deleted} = $mfn;
+
+ return unless $self->{include_deleted};
+
+ $pointer = abs($pointer);
+ }
+
my $XRFMFB = int($pointer/2048);
my $XRFMFP = $pointer - ($XRFMFB*2048);
my $XRFMFB = int($pointer/2048);
my $XRFMFP = $pointer - ($XRFMFB*2048);
# (XRFMFB - 1) * 512 + XRFMFP
# why do i have to do XRFMFP % 1024 ?
# (XRFMFB - 1) * 512 + XRFMFP
# why do i have to do XRFMFP % 1024 ?
if ($value!=$mfn) {
carp "Error: MFN ".$mfn." not found in MST(".$value.")";
if ($value!=$mfn) {
carp "Error: MFN ".$mfn." not found in MST(".$value.")";
- #return; # XXX deleted record?
-# $MFRL=$self->Read16($fileMST);
-# $MFBWB=$self->Read32($fileMST);
-# $MFBWP=$self->Read16($fileMST);
-# $BASE=$self->Read16($fileMST);
-# $NVF=$self->Read16($fileMST);
-# $STATUS=$self->Read16($fileMST);
-
read($self->{'fileMST'}, $buff, 14);
my ($MFRL,$MFBWB,$MFBWP,$BASE,$NVF,$STATUS) = unpack("slssss", $buff);
print STDERR "## MFRL: $MFRL MFBWB: $MFBWB MFBWP: $MFBWP BASE: $BASE NVF: $NVF STATUS: $STATUS\n" if ($self->{debug});
read($self->{'fileMST'}, $buff, 14);
my ($MFRL,$MFBWB,$MFBWP,$BASE,$NVF,$STATUS) = unpack("slssss", $buff);
print STDERR "## MFRL: $MFRL MFBWB: $MFBWB MFBWP: $MFBWP BASE: $BASE NVF: $NVF STATUS: $STATUS\n" if ($self->{debug});
- # delete old record
- delete $self->{record};
-
- ## FIXME this is a bug
- if (! $self->{'include_deleted'} && $MFRL < 0) {
- print "## logically deleted record $mfn, skipping...\n" if ($self->{debug});
- return;
- }
+ warn "MFRL $MFRL is not even number" unless ($MFRL % 2 == 0);
warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);
warn "BASE is not 18+6*NVF" unless ($BASE == 18 + 6 * $NVF);
for (my $i = 0 ; $i < $NVF ; $i++) {
for (my $i = 0 ; $i < $NVF ; $i++) {
-# $TAG=$self->Read16($fileMST);
-# $POS=$self->Read16($fileMST);
-# $LEN=$self->Read16($fileMST);
-
my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));
print STDERR "## TAG: $TAG POS: $POS LEN: $LEN\n" if ($self->{debug});
my ($TAG,$POS,$LEN) = unpack("sss", substr($buff,$i * 6, 6));
print STDERR "## TAG: $TAG POS: $POS LEN: $LEN\n" if ($self->{debug});
$self->{'current_mfn'} = $mfn;
$self->{'current_mfn'} = $mfn;
- print Dumper($self),"\n" if ($self->{debug});
+ print STDERR Dumper($self),"\n" if ($self->{debug});
return $self->{'record'};
}
return $self->{'record'};
}
-use Test::More tests => 104;
+use Test::More tests => 108;
BEGIN { use_ok( 'IsisDB' ); }
BEGIN { use_ok( 'IsisDB' ); }
my $i = 0;
foreach my $v (@{$data->[$mfn-1]->{$f}}) {
$v =~ s/^[01# ][01# ]// if ($args->{no_ident});
my $i = 0;
foreach my $v (@{$data->[$mfn-1]->{$f}}) {
$v =~ s/^[01# ][01# ]// if ($args->{no_ident});
- cmp_ok($rec->{$f}->[$i], '==', $v, "MFN $mfn $f:$i $v");
+ cmp_ok($v, '==', $rec->{$f}->[$i], "MFN $mfn $f:$i $v");
foreach my $mfn (1 .. $isis->{'maxmfn'}) {
my $md5 = md5_hex($isis->to_ascii($mfn));
foreach my $mfn (1 .. $isis->{'maxmfn'}) {
my $md5 = md5_hex($isis->to_ascii($mfn));
- cmp_ok($args->{md5_ascii}[$mfn - 1], 'eq', $md5, "md5 $mfn");
+ cmp_ok($md5, 'eq', $args->{md5_ascii}[$mfn - 1], "md5 $mfn");
$isis = IsisDB->new (
isisdb => './data/winisis/BIBL',
$isis = IsisDB->new (
isisdb => './data/winisis/BIBL',
md5_ascii => [ qw(
a369eff702307ba12eb81656ee0587fe
4fb38537a94f3f5954e40d9536b942b0
md5_ascii => [ qw(
a369eff702307ba12eb81656ee0587fe
4fb38537a94f3f5954e40d9536b942b0
- 498cc16c9e7ab0fdc29182533cc35d11
+ 579a7c6901c654bdeac10547a98e5b71
7d2adf1675c83283aa9b82bf343e3d85
daf2cf86ca7e188e8360a185f3b43423
) ],
7d2adf1675c83283aa9b82bf343e3d85
daf2cf86ca7e188e8360a185f3b43423
) ],
$isis = IsisDB->new (
isisdb => './data/isismarc/BIBL',
$isis = IsisDB->new (
isisdb => './data/isismarc/BIBL',
843b9ebccf16a498fba623c78f21b6c0
) ],
);
843b9ebccf16a498fba623c78f21b6c0
) ],
);
+
+# check logically deleted
+
+$isis = IsisDB->new (
+ isisdb => './data/winisis/BIBL',
+ include_deleted => 1,
+);
+
+ok($isis->fetch(3), "deleted found");
+cmp_ok($isis->{deleted}, '==', 3, "MFN 3 is deleted");
+
+$isis = IsisDB->new (
+ isisdb => './data/winisis/BIBL',
+);
+
+ok(! $isis->fetch(3), "deleted not found");
+cmp_ok($isis->{deleted}, '==', 3, "MFN 3 is deleted");
+