Added autovivification at the leaf level
rkinyon [Fri, 1 Dec 2006 02:11:40 +0000 (02:11 +0000)]
lib/DBM/Deep/Engine3.pm
t/02_hash.t

index 933075c..6013ce4 100644 (file)
@@ -115,7 +115,15 @@ sub read_value {
     }) or die "How did this fail (no blist)?!\n";
 
     my $value_sector = $blist->get_data_for( $key_md5 );
-    return if ! $value_sector;
+    if ( !$value_sector ) {
+        # Autovivification
+        $value_sector = DBM::Deep::Engine::Sector::Null->new({
+            engine => $self,
+            data   => undef,
+        });
+
+        $blist->write_md5( $key_md5, $key, $value_sector->offset );
+    }
 
     return $value_sector->data;
 }
index d91df74..89a421b 100644 (file)
@@ -39,10 +39,7 @@ ok( exists $db->{key2}, "exists() works against tied hash" );
 
 ok( !exists $db->{key4}, "exists() function works for keys that aren't there" );
 is( $db->{key4}, undef, "Autovivified key4" );
-TODO: {
-    local $TODO = "Autovivification isn't correct yet";
-    ok( exists $db->{key4}, "Autovivified key4 now exists" );
-}
+ok( exists $db->{key4}, "Autovivified key4 now exists" );
 
 delete $db->{key4};
 ok( !exists $db->{key4}, "And key4 doesn't exists anymore" );