[Jifty-commit] r6285 - in Jifty-DBI/trunk: . lib/Jifty/DBI lib/Jifty/DBI/Record

Jifty commits jifty-commit at lists.jifty.org
Mon Feb 2 17:48:30 EST 2009


Author: alexmv
Date: Mon Feb  2 17:48:30 2009
New Revision: 6285

Modified:
   Jifty-DBI/trunk/   (props changed)
   Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Record/Cachable.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Record/Memcached.pm
   Jifty-DBI/trunk/t/02records_cachable.t

Log:
 r41337 at kohr-ah:  chmrr | 2009-02-02 17:47:32 -0500
  * Collapse fetched and raw_fetched; fetched wasn't being properly set, leaving to lack of decoding when reading from cache


Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	Mon Feb  2 17:48:30 2009
@@ -784,9 +784,9 @@
     # In the default case of "yeah, we have a value", return it as
     # fast as we can.
     return $self->{'raw_values'}{$column_name}
-      if $self->{'raw_fetched'}{$column_name};
+      if $self->{'fetched'}{$column_name};
 
-    if ( !$self->{'raw_fetched'}{$column_name} and my $id = $self->id() ) {
+    if ( !$self->{'fetched'}{$column_name} and my $id = $self->id() ) {
         my $pkey = $self->_primary_key();
         my $query_string =
             "SELECT "
@@ -797,7 +797,7 @@
         my $sth = $self->_handle->simple_query( $query_string, $id );
         my ($value) = eval { $sth->fetchrow_array() };
         $self->{'raw_values'}{$column_name}  = $value;
-        $self->{'raw_fetched'}{$column_name} = 1;
+        $self->{'fetched'}{$column_name} = 1;
     }
 
     return $self->{'raw_values'}{$column_name};
@@ -839,15 +839,17 @@
 
     my $column_name = $column->name;
 
-
     # In the default case of "yeah, we have a value", return it as
     # fast as we can.
     return $self->{'values'}{$column_name}
         if ( $self->{'fetched'}{$column_name}
         && $self->{'decoded'}{$column_name} );
 
-    $self->{'values'}{$column_name}  = $self->__raw_value( $column_name )
-        unless $self->{'fetched'}{$column_name};
+    unless ($self->{'fetched'}{$column_name}) {
+        # Fetch it, and mark it as not decoded
+        $self->{'values'}{$column_name} = $self->__raw_value( $column_name );
+        $self->{'decoded'}{$column_name} = 0;
+    }
 
     unless ( $self->{'decoded'}{$column_name} ) {
         $self->_apply_output_filters(
@@ -1200,9 +1202,8 @@
     }
 
     $self->{'values'} = {};
-    $self->{'fetched'} = {};
     $self->{'raw_values'} = {};
-    $self->{'raw_fetched'} = {};
+    $self->{'fetched'} = {};
 
     foreach my $col ( grep exists $hashref->{ lc $_ }, map $_->name, $self->columns ) {
         $self->{'fetched'}{$col} = 1;
@@ -1233,7 +1234,6 @@
     my $hashref = $sth->fetchrow_hashref;
     delete $self->{'values'};
     delete $self->{'raw_values'};
-    $self->{'raw_fetched'} = {};
     $self->{'fetched'} = {};
     $self->{'decoded'} = {};
 
@@ -1804,7 +1804,7 @@
 sub unload_value {
     my $self = shift;
     my $column = shift;
-    delete $self->{$_}{$column} for qw/values raw_values fetched raw_fetched decoded _prefetched/;
+    delete $self->{$_}{$column} for qw/values raw_values fetched decoded _prefetched/;
 }
 
 1;

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record/Cachable.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record/Cachable.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record/Cachable.pm	Mon Feb  2 17:48:30 2009
@@ -246,7 +246,6 @@
             fetched     => $self->{'fetched'},
             decoded     => $self->{'decoded'},
             raw_values  => $self->{'raw_values'},
-            raw_fetched => $self->{'raw_fetched'},
         }
     );
 }

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record/Memcached.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record/Memcached.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record/Memcached.pm	Mon Feb  2 17:48:30 2009
@@ -184,7 +184,6 @@
             table   => $self->table,
             fetched => $self->{'fetched'},
             raw_values => $self->{'raw_values'},
-            raw_fetched => $self->{'raw_fetched'},
         },
         $self->_cache_config->{'cache_for_sec'}
     );

Modified: Jifty-DBI/trunk/t/02records_cachable.t
==============================================================================
--- Jifty-DBI/trunk/t/02records_cachable.t	(original)
+++ Jifty-DBI/trunk/t/02records_cachable.t	Mon Feb  2 17:48:30 2009
@@ -6,7 +6,7 @@
 use Test::More;
 BEGIN { require "t/utils.pl" }
 
-use constant TESTS_PER_DRIVER => 35;
+use constant TESTS_PER_DRIVER => 42;
 
 our (@available_drivers);
 my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
@@ -116,6 +116,30 @@
 
         Jifty::DBI::Record::Cachable->flush_cache;
 
+        {
+            my $rec = TestApp::Address->new( handle => $handle );
+            my ($id) = $rec->create( name => 'Metadata', metadata => { some => "values" } );
+            ok( $id, "Created record #$id" );
+
+            # Do a search, but only load the 'id' column
+            my $search = TestApp::AddressCollection->new( handle => $handle );
+            $search->columns(qw/id/);
+            $search->limit( column => 'name', value => 'Metadata');
+
+            $rec = $search->first;
+            is( $rec->id, $id, "The record has its id" );
+            is_deeply( $rec->metadata, { some => "values" } , "Got decoded values");
+
+            my $cache = TestApp::Address->new( handle => $handle );
+            my ( $status, $msg ) = $cache->load($id);
+            ok( $status, 'loaded record' );
+            is( $cache->id, $id, 'the same record as we created' );
+            is( $msg, 'Fetched from cache', 'we fetched record from cache' );
+            is_deeply( $cache->metadata, { some => "values" } , "Got decoded values");
+        }
+
+        Jifty::DBI::Record::Cachable->flush_cache;
+
         cleanup_schema( 'TestApp::Address', $handle );
         disconnect_handle($handle);
     }
@@ -134,6 +158,7 @@
         phone varchar(18),
         address varchar(50),
         employee_id int(8),
+        metadata text,
         PRIMARY KEY (id))
 EOF
 
@@ -146,7 +171,8 @@
         name varchar,
         phone varchar,
         address varchar,
-        employee_id integer
+        employee_id integer,
+        metadata text
 )
 EOF
 
@@ -160,7 +186,8 @@
         name varchar(36),
         phone varchar(18),
         address varchar(50),
-        employee_id int(8))
+        employee_id int(8),
+        metadata text)
 EOF
 
 }
@@ -171,7 +198,8 @@
         id integer CONSTRAINT addresses_key PRIMARY KEY,
         name varchar(36),
         phone varchar(18),
-        employee_id integer
+        employee_id integer,
+        metadata text
     )",
 ] }
 
@@ -197,6 +225,14 @@
         default is '';
 
     column employee_id => type is 'int(8)';
+
+    column metadata => type is 'text',
+        filters are 'Jifty::DBI::Filter::YAML';
     }
 }
+
+package TestApp::AddressCollection;
+use base qw/Jifty::DBI::Collection/;
+use constant table => "addresses";
+
 1;


More information about the Jifty-commit mailing list