Fixed how classname is stored
Rob Kinyon [Mon, 28 Dec 2009 01:10:57 +0000 (20:10 -0500)]
etc/mysql_tables.sql
lib/DBM/Deep/Engine/DBI.pm
lib/DBM/Deep/Sector/DBI/Reference.pm
lib/DBM/Deep/Sector/DBI/Scalar.pm

index b6d8dc0..840b0b8 100644 (file)
@@ -5,6 +5,7 @@ CREATE TABLE refs (
     id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
    ,ref_type ENUM( 'H', 'A' ) NOT NULL DEFAULT 'H'
    ,refcount BIGINT UNSIGNED NOT NULL DEFAULT 1
+   ,classname LONGTEXT
 );
 
 CREATE TABLE datas (
@@ -13,7 +14,6 @@ CREATE TABLE datas (
    ,data_type ENUM( 'S', 'R' ) DEFAULT 'S'
    ,`key` LONGTEXT NOT NULL
    ,value LONGTEXT
-   ,class LONGTEXT
    ,FOREIGN KEY (ref_id) REFERENCES refs (id)
         ON DELETE CASCADE ON UPDATE CASCADE
    ,UNIQUE INDEX (ref_id, `key` (900) )
index 34b1ca2..6d7a533 100644 (file)
@@ -101,7 +101,10 @@ sub get_classname {
     my $self = shift;
     my ($obj) = @_;
 
-    return;
+    my $sector = $self->load_sector( $obj->_base_offset, 'refs' )
+        or return;
+
+    return $sector->get_classname;
 }
 
 sub make_reference {
index 7775ce8..761f268 100644 (file)
@@ -15,9 +15,11 @@ sub _init {
     my $e = $self->engine;
 
     unless ( $self->offset ) {
+        my $classname = Scalar::Util::blessed( delete $self->{data} );
         $self->{offset} = $self->engine->storage->write_to(
             refs => undef,
-            ref_type => $self->type,
+            ref_type  => $self->type,
+            classname => $classname,
         );
     }
     else {
@@ -61,7 +63,6 @@ sub write_data {
             data_type => 'S',
             key       => $args->{key},
             value     => $args->{value}{data},
-            class     => $args->{value}{class},
         );
 
         $args->{value}->reload;
@@ -74,7 +75,6 @@ sub write_data {
             data_type => 'R',
             key       => $args->{key},
             value     => $args->{value}{offset},
-            class     => $args->{value}{class},
         );
     }
 }
@@ -98,7 +98,12 @@ sub delete_key {
 
 sub get_classname {
     my $self = shift;
-    return;
+    my ($rows) = $self->engine->storage->read_from(
+        'refs', $self->offset,
+        qw( classname ),
+    );
+    return unless @$rows;
+    return $rows->[0]{classname};
 }
 
 sub data {
index ba22e5b..4d5d41b 100644 (file)
@@ -13,10 +13,10 @@ sub _init {
     if ( $self->offset ) {
         my ($rows) = $self->engine->storage->read_from(
             datas => $self->offset,
-            qw( id data_type key value class ),
+            qw( id data_type key value ),
         );
 
-        $self->{$_} = $rows->[0]{$_} for qw( data_type key value class );
+        $self->{$_} = $rows->[0]{$_} for qw( data_type key value );
     }
 
     return;