X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBM%2FDeep%2FSector%2FDBI%2FReference.pm;h=98dcfaef47a4e87bbdb591df76efcbb3098604a4;hb=641aa32d2d78eb7084801c7b9aa91f962c8af75f;hp=d224760db0718fa999faf8a71474360f266f5d1b;hpb=350896ee7e5b32e5f965e84f445df47113573a72;p=dbsrgits%2FDBM-Deep.git diff --git a/lib/DBM/Deep/Sector/DBI/Reference.pm b/lib/DBM/Deep/Sector/DBI/Reference.pm index d224760..98dcfae 100644 --- a/lib/DBM/Deep/Sector/DBI/Reference.pm +++ b/lib/DBM/Deep/Sector/DBI/Reference.pm @@ -153,20 +153,37 @@ sub free { } sub increment_refcount { - return 1; + my $self = shift; + my $refcount = $self->get_refcount; + $refcount++; + $self->write_refcount( $refcount ); + return $refcount; } sub decrement_refcount { - return 0; + my $self = shift; + my $refcount = $self->get_refcount; + $refcount--; + $self->write_refcount( $refcount ); + return $refcount; } sub get_refcount { - return 1; + my $self = shift; + my ($rows) = $self->engine->storage->read_from( + 'refs', $self->offset, + qw( refcount ), + ); + return $rows->[0]{refcount}; } sub write_refcount { my $self = shift; my ($num) = @_; + $self->engine->storage->{dbh}->do( + "UPDATE refs SET refcount = ? WHERE id = ?", undef, + $num, $self->offset, + ); } 1;