Fixed typo
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Engine / DBI.pm
index c00227a..b00b98a 100644 (file)
@@ -82,8 +82,9 @@ sub read_value {
 
     unless ( $value_sector ) {
         $value_sector = DBM::Deep::Sector::DBI::Scalar->new({
-            engine => $self,
-            data   => undef,
+            engine    => $self,
+            data      => undef,
+            data_type => 'S',
         });
 
         $sector->write_data({
@@ -100,15 +101,56 @@ sub get_classname {
     my $self = shift;
     my ($obj) = @_;
 
-    return;
+    my $sector = $self->load_sector( $obj->_base_offset, 'refs' )
+        or return;
+
+    return $sector->get_classname;
 }
 
-=pod
 sub make_reference {
     my $self = shift;
     my ($obj, $old_key, $new_key) = @_;
+
+    my $sector = $self->load_sector( $obj->_base_offset, 'refs' )
+        or return;
+
+#    if ( $sector->staleness != $obj->_staleness ) {
+#        return;
+#    }
+
+    my $value_sector = $sector->get_data_for({
+        key        => $old_key,
+        allow_head => 1,
+    });
+
+    unless ( $value_sector ) {
+        $value_sector = DBM::Deep::Sector::DBI::Scalar->new({
+            engine => $self,
+            data   => undef,
+        });
+
+        $sector->write_data({
+            key     => $old_key,
+            value   => $value_sector,
+        });
+    }
+
+    if ( $value_sector->isa( 'DBM::Deep::Sector::DBI::Reference' ) ) {
+        $sector->write_data({
+            key     => $new_key,
+            value   => $value_sector,
+        });
+        $value_sector->increment_refcount;
+    }
+    else {
+        $sector->write_data({
+            key     => $new_key,
+            value   => $value_sector->clone,
+        });
+    }
+
+    return;
 }
-=cut
 
 # exists returns '', not undefined.
 sub key_exists {
@@ -199,10 +241,10 @@ sub write_value {
             
             # See whether or not we are storing ourselves to ourself.
             # Write the sector as data in this reference (keyed by $key)
-            my $value_sector = $self->load_sector( $tmpvar->_base_offset );
+            my $value_sector = $self->load_sector( $tmpvar->_base_offset, 'refs' );
             $sector->write_data({
                 key     => $key,
-                key_md5 => $self->_apply_digest( $key ),
+#                key_md5 => $self->_apply_digest( $key ),
                 value   => $value_sector,
             });
             $value_sector->increment_refcount;
@@ -269,21 +311,17 @@ sub write_value {
     return 1;
 }
 
-sub begin_work {
-    my $self = shift;
-    my ($obj) = @_;
-}
+sub begin_work { die "Transactions are not supported by this engine" } 
+sub rollback   { die "Transactions are not supported by this engine" } 
+sub commit     { die "Transactions are not supported by this engine" }
 
-sub rollback {
-    my $self = shift;
-    my ($obj) = @_;
-}
+sub supports {
+    shift;
+    my ($feature) = @_;
 
-sub commit {
-    my $self = shift;
-    my ($obj) = @_;
+    return if $feature eq 'transactions';
+    return;
 }
 
-
 1;
 __END__