package DBM::Deep::Sector::DBI;
use 5.008_004;
use strict;
use warnings FATAL => 'all';
use base qw( DBM::Deep::Sector );
use DBM::Deep::Sector::DBI::Reference ();
use DBM::Deep::Sector::DBI::Scalar ();
sub free {
my $self = shift;
$self->engine->storage->delete_from(
$self->table, $self->offset,
);
}
sub reload {
my $self = shift;
$self->_init;
}
sub load {
my $self = shift;
my ($engine, $offset, $type) = @_;
if ( !defined $type || $type eq 'refs' ) {
return DBM::Deep::Sector::DBI::Reference->new({
engine => $engine,
offset => $offset,
});
}
elsif ( $type eq 'datas' ) {
my $sector = DBM::Deep::Sector::DBI::Scalar->new({
engine => $engine,
offset => $offset,
});
if ( $sector->{data_type} eq 'R' ) {
return $self->load(
$engine, $sector->{value}, 'refs',
);
}
return $sector;
}
DBM::Deep->_throw_error( "'$offset': Don't know what to do with type '$type'" );
}
1;
__END__