use base 'DBM::Deep';
sub _get_self {
- eval { tied( %{$_[0]} ) } || $_[0]
+ eval { local $SIG{'__DIE__'}; tied( %{$_[0]} ) } || $_[0]
}
sub TIEHASH {
sub FETCH {
my $self = shift->_get_self;
- my $key = ($self->root->{filter_store_key})
- ? $self->root->{filter_store_key}->($_[0])
+ my $key = ($self->_root->{filter_store_key})
+ ? $self->_root->{filter_store_key}->($_[0])
: $_[0];
return $self->SUPER::FETCH( $key );
sub STORE {
my $self = shift->_get_self;
- my $key = ($self->root->{filter_store_key})
- ? $self->root->{filter_store_key}->($_[0])
+ my $key = ($self->_root->{filter_store_key})
+ ? $self->_root->{filter_store_key}->($_[0])
: $_[0];
my $value = $_[1];
sub EXISTS {
my $self = shift->_get_self;
- my $key = ($self->root->{filter_store_key})
- ? $self->root->{filter_store_key}->($_[0])
+ my $key = ($self->_root->{filter_store_key})
+ ? $self->_root->{filter_store_key}->($_[0])
: $_[0];
return $self->SUPER::EXISTS( $key );
sub DELETE {
my $self = shift->_get_self;
- my $key = ($self->root->{filter_store_key})
- ? $self->root->{filter_store_key}->($_[0])
+ my $key = ($self->_root->{filter_store_key})
+ ? $self->_root->{filter_store_key}->($_[0])
: $_[0];
return $self->SUPER::DELETE( $key );
my $self = $_[0]->_get_self;
##
- # Make sure file is open
- ##
- if (!defined($self->fh)) { $self->_open(); }
-
- ##
# Request shared lock for reading
##
$self->lock( $self->LOCK_SH );
- my $result = $self->_get_next_key();
+ my $result = $self->{engine}->get_next_key($self);
$self->unlock();
- return ($result && $self->root->{filter_fetch_key})
- ? $self->root->{filter_fetch_key}->($result)
+ return ($result && $self->_root->{filter_fetch_key})
+ ? $self->_root->{filter_fetch_key}->($result)
: $result;
}
##
my $self = $_[0]->_get_self;
- my $prev_key = ($self->root->{filter_store_key})
- ? $self->root->{filter_store_key}->($_[1])
+ my $prev_key = ($self->_root->{filter_store_key})
+ ? $self->_root->{filter_store_key}->($_[1])
: $_[1];
- my $prev_md5 = $DBM::Deep::DIGEST_FUNC->($prev_key);
+ my $prev_md5 = $self->{engine}{digest}->($prev_key);
##
- # Make sure file is open
- ##
- if (!defined($self->fh)) { $self->_open(); }
-
- ##
# Request shared lock for reading
##
$self->lock( $self->LOCK_SH );
- my $result = $self->_get_next_key( $prev_md5 );
+ my $result = $self->{engine}->get_next_key( $self, $prev_md5 );
$self->unlock();
- return ($result && $self->root->{filter_fetch_key})
- ? $self->root->{filter_fetch_key}->($result)
+ return ($result && $self->_root->{filter_fetch_key})
+ ? $self->_root->{filter_fetch_key}->($result)
: $result;
}