Changeset 29541

Show
Ignore:
Timestamp:
02/04/09 22:09:56 (4 years ago)
Author:
yappo
Message:

add lookup/lookup_multi methods form Driver::Memcached

Location:
lang/perl/Data-Model/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Data-Model/trunk/lib/Data/Model/Driver/Memcached.pm

    r29480 r29541  
    1010 
    1111sub update_direct { Carp::croak("update_direct is NOT IMPLEMENTED") } 
     12 
     13sub lookup { 
     14    my($self, $schema, $key) = @_; 
     15    my $cache_key = $self->cache_key($schema, $key); 
     16    my $ret = $self->{memcached}->get( $cache_key ); 
     17    return unless $ret; 
     18    return $ret; 
     19} 
     20 
     21sub lookup_multi { 
     22    my($self, $schema, $keys) = @_; 
     23    my @cache_keys = map { $self->cache_key($schema, $_) } @{ $keys }; 
     24    my $ret = $self->{memcached}->get_multi( @cache_keys ); 
     25    return unless $ret; 
     26 
     27    my %resultlist; 
     28    while (my($id, $data) = each %{ $ret }) { 
     29        my $key = $schema->get_key_array_by_hash($data); 
     30        $resultlist{join "\0", @{ $key }} = +{ %{ $data } }; 
     31    } 
     32    return \%resultlist; 
     33} 
    1234 
    1335sub get { 
  • lang/perl/Data-Model/trunk/t/lib/Mock/Tests/DriverMemcached.pm

    r29475 r29541  
    7474} 
    7575 
     76sub t_008_prepere : Tests { 
     77    ok(mock->set( simple => 101 => { name => 'yappo' } )); 
     78    ok(mock->set( simple => 102 => { name => 'osawa' } )); 
     79    ok(mock->set( simple => 103 => { name => 'kazuhiro' } )); 
     80} 
     81 
     82sub t_009_lookup : Tests { 
     83    my $lookup = mock->lookup( simple => 102 ); 
     84    isa_ok $lookup, mock_class."::simple"; 
     85    is $lookup->id, 102, 'id'; 
     86    is $lookup->name, 'osawa', 'name'; 
     87} 
     88 
     89sub t_010_lookup_multi : Tests { 
     90    my @lookup = mock->lookup_multi( simple => [ 103, 101, 102 ] ); 
     91 
     92    isa_ok $lookup[0], mock_class."::simple"; 
     93    is $lookup[0]->id, 103, 'id'; 
     94    is $lookup[0]->name, 'kazuhiro', 'name'; 
     95    isa_ok $lookup[1], mock_class."::simple"; 
     96    is $lookup[1]->id, 101, 'id'; 
     97    is $lookup[1]->name, 'yappo', 'name'; 
     98    isa_ok $lookup[2], mock_class."::simple"; 
     99    is $lookup[2]->id, 102, 'id'; 
     100    is $lookup[2]->name, 'osawa', 'name'; 
     101} 
     102 
     103 
    76104sub t_101_multi_keys_set : Tests { 
    77105    eval { 
     
    108136} 
    109137 
     138sub t_103_prepere : Tests { 
     139    ok(mock->set( multi_keys => [qw/ k1 k2 k3 /] )); 
     140    ok(mock->set( multi_keys => [qw/ e1 e2 e3 /] )); 
     141} 
     142 
     143sub t_104_lookup : Tests { 
     144    my $lookup = mock->lookup( multi_keys => [qw/ k1 k2 k3/] ); 
     145    ok($lookup, 'set ok'); 
     146    is $lookup->key1, 'k1', 'key1'; 
     147    is $lookup->key2, 'k2', 'key2'; 
     148    is $lookup->key3, 'k3', 'key3'; 
     149} 
     150 
     151sub t_105_lookup_multi : Tests { 
     152    my @lookup = mock->lookup_multi( multi_keys => [ [qw/ e1 e2 e3 /], [qw/ a s d /], [qw/ k1 k2 k3/] ] ); 
     153    ok($lookup[0], 'set ok'); 
     154    is $lookup[0]->key1, 'e1', 'key1'; 
     155    is $lookup[0]->key2, 'e2', 'key2'; 
     156    is $lookup[0]->key3, 'e3', 'key3'; 
     157    ok($lookup[2], 'set ok'); 
     158    is $lookup[2]->key1, 'k1', 'key1'; 
     159    is $lookup[2]->key2, 'k2', 'key2'; 
     160    is $lookup[2]->key3, 'k3', 'key3'; 
     161} 
     162 
    110163sub t_201_multi_keys_columns_set : Tests { 
    111164    my $set1 = mock->set(