DBM-Deep
view release on metacpan or search on metacpan
lib/DBM/Deep/Engine/File.pm view on Meta::CPAN
=item * txn_bitfield_len
=back
=cut
sub byte_size { $_[0]{byte_size} }
sub hash_size { $_[0]{hash_size} }
sub hash_chars { $_[0]{hash_chars} }
sub num_txns { $_[0]{num_txns} }
sub max_buckets { $_[0]{max_buckets} }
sub blank_md5 { chr(0) x $_[0]->hash_size }
sub data_sector_size { $_[0]{data_sector_size} }
# This is a calculated value
sub txn_bitfield_len {
my $self = shift;
unless ( exists $self->{txn_bitfield_len} ) {
my $temp = ($self->num_txns) / 8;
if ( $temp > int( $temp ) ) {
$temp = int( $temp ) + 1;
}
$self->{txn_bitfield_len} = $temp;
}
return $self->{txn_bitfield_len};
}
=pod
The following are read/write attributes.
=over 4
=item * trans_id / set_trans_id( $new_id )
=item * trans_loc / set_trans_loc( $new_loc )
=item * chains_loc / set_chains_loc( $new_loc )
=back
=cut
sub trans_id { $_[0]{trans_id} }
sub set_trans_id { $_[0]{trans_id} = $_[1] }
sub trans_loc { $_[0]{trans_loc} }
sub set_trans_loc { $_[0]{trans_loc} = $_[1] }
sub chains_loc { $_[0]{chains_loc} }
sub set_chains_loc { $_[0]{chains_loc} = $_[1] }
sub supports {
my $self = shift;
my ($feature) = @_;
if ( $feature eq 'transactions' ) {
return $self->num_txns > 1;
}
return 1 if $feature eq 'singletons';
return 1 if $feature eq 'unicode';
return;
}
sub db_version {
return $_[0]{v} == 3 ? '1.0003' : 2;
}
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()
This method takes no arguments. It's used to print out a textual representation
of the DBM::Deep DB file. It assumes the file is not-corrupted.
=cut
sub _dump_file {
my $self = shift;
# Read the header
my $spot = $self->_read_file_header();
my %types = (
0 => 'B',
1 => 'D',
2 => 'I',
);
my %sizes = (
'D' => $self->data_sector_size,
'B' => DBM::Deep::Sector::File::BucketList->new({engine=>$self,offset=>1})->size,
'I' => DBM::Deep::Sector::File::Index->new({engine=>$self,offset=>1})->size,
);
my $return = "";
# Header values
$return .= "NumTxns: " . $self->num_txns . $/;
# Read the free sector chains
my %sectors;
foreach my $multiple ( 0 .. 2 ) {
$return .= "Chains($types{$multiple}):";
my $old_loc = $self->chains_loc + $multiple * $self->byte_size;
while ( 1 ) {
my $loc = unpack(
$StP{$self->byte_size},
$self->storage->read_at( $old_loc, $self->byte_size ),
( run in 0.659 second using v1.01-cache-2.11-cpan-39bf76dae61 )