Fixed problem with second-level values being overwritten when accessed.
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Sector / DBI.pm
CommitLineData
d6ecf579 1package DBM::Deep::Sector::DBI;
2
3use 5.006_000;
4
5use strict;
6use warnings FATAL => 'all';
7
a4d36ff6 8use base qw( DBM::Deep::Sector );
9
10use DBM::Deep::Sector::DBI::Reference ();
11use DBM::Deep::Sector::DBI::Scalar ();
12
13sub _init {
14}
15
16sub free {
17 my $self = shift;
18
19 $self->engine->storage->delete_from(
20 $self->table, $self->offset,
21 );
22}
23
24sub reload {
25 my $self = shift;
26 $self->_init;
27}
28
29sub load {
30 my $self = shift;
31 my ($engine, $offset, $type) = @_;
32
33 if ( $type eq 'refs' ) {
34 return DBM::Deep::Sector::DBI::Reference->new({
35 engine => $engine,
36 offset => $offset,
37 });
38 }
39 elsif ( $type eq 'datas' ) {
350896ee 40 my $sector = DBM::Deep::Sector::DBI::Scalar->new({
a4d36ff6 41 engine => $engine,
42 offset => $offset,
43 });
350896ee 44
45 if ( $sector->{data_type} eq 'R' ) {
46 return $self->load(
cf4a1344 47 $engine, $sector->{value}, 'refs',
350896ee 48 );
49 }
50
51 return $sector;
a4d36ff6 52 }
53
54 DBM::Deep->_throw_error( "'$offset': Don't know what to do with type '$type'" );
55}
d6ecf579 56
571;
58__END__