use strict;
use warnings FATAL => 'all';
+no warnings 'recursion';
use base qw( DBM::Deep::Engine );
use DBM::Deep::Storage::File ();
sub sector_type { 'DBM::Deep::Sector::File' }
+sub iterator_class { 'DBM::Deep::Iterator::File' }
my $STALE_SIZE = 2;
=head1 PURPOSE
-This is the engine for use with L<DBM::Deep::Storage::File/>.
+This is the engine for use with L<DBM::Deep::Storage::File>.
=head1 EXTERNAL METHODS
value => $value_sector,
});
- # This code is to make sure we write all the values in the $value to the
- # disk and to make sure all changes to $value after the assignment are
- # reflected on disk. This may be counter-intuitive at first, but it is
- # correct dwimmery.
- # NOTE - simply tying $value won't perform a STORE on each value. Hence,
- # the copy to a temp value.
- if ( $r eq 'ARRAY' ) {
- my @temp = @$value;
- tie @$value, 'DBM::Deep', {
- base_offset => $value_sector->offset,
- staleness => $value_sector->staleness,
- storage => $self->storage,
- engine => $self,
- };
- @$value = @temp;
- bless $value, 'DBM::Deep::Array' unless Scalar::Util::blessed( $value );
- }
- elsif ( $r eq 'HASH' ) {
- my %temp = %$value;
- tie %$value, 'DBM::Deep', {
- base_offset => $value_sector->offset,
- staleness => $value_sector->staleness,
- storage => $self->storage,
- engine => $self,
- };
-
- %$value = %temp;
- bless $value, 'DBM::Deep::Hash' unless Scalar::Util::blessed( $value );
- }
+ $self->_descend( $value, $value_sector );
return 1;
}
sub chains_loc { $_[0]{chains_loc} }
sub set_chains_loc { $_[0]{chains_loc} = $_[1] }
-sub cache { $_[0]{cache} ||= {} }
-sub clear_cache { %{$_[0]->cache} = () }
+sub supports {
+ shift;
+ my ($feature) = @_;
+
+ return 1 if $feature eq 'transactions';
+ return if $feature eq 'singletones';
+ return;
+}
+
+sub clear {
+ my $self = shift;
+ my $obj = shift;
+
+ my $sector = $self->load_sector( $obj->_base_offset )
+ or return;
+
+ return unless $sector->staleness == $obj->_staleness;
+
+ $sector->clear;
+
+ return;
+}
=head2 _dump_file()