/[Redis.pre-github]/lib/Redis.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/Redis.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 26 by dpavlin, Sun Mar 22 13:37:49 2009 UTC revision 34 by dpavlin, Sun Mar 22 17:37:46 2009 UTC
# Line 63  sub _sock_read_bulk { Line 63  sub _sock_read_bulk {
63          warn "## bulk len: ",dump($len);          warn "## bulk len: ",dump($len);
64          return undef if $len eq "nil\r\n";          return undef if $len eq "nil\r\n";
65          my $v;          my $v;
66          read($sock, $v, $len) || die $!;          if ( $len > 0 ) {
67          warn "## bulk v: ",dump($v);                  read($sock, $v, $len) || die $!;
68                    warn "## bulk v: ",dump($v);
69            }
70          my $crlf;          my $crlf;
71          read($sock, $crlf, 2); # skip cr/lf          read($sock, $crlf, 2); # skip cr/lf
72          return $v;          return $v;
# Line 77  sub _sock_result_bulk { Line 79  sub _sock_result_bulk {
79          _sock_read_bulk();          _sock_read_bulk();
80  }  }
81    
82    sub _sock_result_bulk_list {
83            my $self = shift;
84            warn "## _sock_result_bulk_list ",dump( @_ );
85    
86            my $size = $self->_sock_send( @_ );
87            confess $size unless $size > 0;
88            $size--;
89    
90            my @list = ( 0 .. $size );
91            foreach ( 0 .. $size ) {
92                    $list[ $_ ] = _sock_read_bulk();
93            }
94    
95            warn "## list = ", dump( @list );
96            return @list;
97    }
98    
99  sub __sock_ok {  sub __sock_ok {
100          my $ok = <$sock>;          my $ok = <$sock>;
101            return undef if $ok eq "nil\r\n";
102          confess dump($ok) unless $ok eq "+OK\r\n";          confess dump($ok) unless $ok eq "+OK\r\n";
103  }  }
104    
# Line 100  sub __sock_send_bulk_raw { Line 120  sub __sock_send_bulk_raw {
120          my $self = shift;          my $self = shift;
121          warn "## _sock_send_bulk ",dump( @_ );          warn "## _sock_send_bulk ",dump( @_ );
122          my $value = pop;          my $value = pop;
123          print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n";          $value = '' unless defined $value; # FIXME errr? nil?
124            print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n"
125  }  }
126    
127  sub _sock_send_bulk {  sub _sock_send_bulk {
# Line 313  sub llen { Line 334  sub llen {
334    
335  sub lrange {  sub lrange {
336          my ( $self, $key, $start, $end ) = @_;          my ( $self, $key, $start, $end ) = @_;
337          my $size = $self->_sock_send('LRANGE', $key, $start, $end);          $self->_sock_result_bulk_list('LRANGE', $key, $start, $end);
   
         confess $size unless $size > 0;  
         $size--;  
   
         my @list = ( 0 .. $size );  
         foreach ( 0 .. $size ) {  
                 $list[ $_ ] = _sock_read_bulk();  
         }  
   
         warn "## lrange $key $start $end = [$size] ", dump( @list );  
         return @list;  
338  }  }
339    
340  =head2 ltrim  =head2 ltrim
# Line 362  sub lset { Line 372  sub lset {
372    
373  =head2 lrem  =head2 lrem
374    
375    $r->lrem( $key, $count, $value );    my $modified_count = $r->lrem( $key, $count, $value );
376    
377  =cut  =cut
378    
# Line 371  sub lrem { Line 381  sub lrem {
381          $self->_sock_send_bulk_number( 'LREM', $key, $count, $value );          $self->_sock_send_bulk_number( 'LREM', $key, $count, $value );
382  }  }
383    
384    =head2 lpop
385    
386      my $value = $r->lpop( $key );
387    
388    =cut
389    
390    sub lpop {
391            my ( $self, $key ) = @_;
392            $self->_sock_result_bulk( 'LPOP', $key );
393    }
394    
395    =head2 rpop
396    
397      my $value = $r->rpop( $key );
398    
399    =cut
400    
401    sub rpop {
402            my ( $self, $key ) = @_;
403            $self->_sock_result_bulk( 'RPOP', $key );
404    }
405    
406    =head1 Commands operating on sets
407    
408    =head2 sadd
409    
410      $r->sadd( $key, $member );
411    
412    =cut
413    
414    sub sadd {
415            my ( $self, $key, $member ) = @_;
416            $self->_sock_send_bulk_number( 'SADD', $key, $member );
417    }
418    
419    =head2 srem
420    
421      $r->srem( $key, $member );
422    
423    =cut
424    
425    sub srem {
426            my ( $self, $key, $member ) = @_;
427            $self->_sock_send_bulk_number( 'SREM', $key, $member );
428    }
429    
430    =head2 scard
431    
432      my $elements = $r->scard( $key );
433    
434    =cut
435    
436    sub scard {
437            my ( $self, $key ) = @_;
438            $self->_sock_send( 'SCARD', $key );
439    }
440    
441    =head2 sismember
442    
443      $r->sismember( $key, $member );
444    
445    =cut
446    
447    sub sismember {
448            my ( $self, $key, $member ) = @_;
449            $self->_sock_send_bulk_number( 'SISMEMBER', $key, $member );
450    }
451    
452    =head2 sinter
453    
454      $r->sinter( $key1, $key2, ... );
455    
456    =cut
457    
458    sub sinter {
459            my $self = shift;
460            $self->_sock_result_bulk_list( 'SINTER', @_ );
461    }
462    
463    =head2 sinterstore
464    
465      my $ok = $r->sinterstore( $dstkey, $key1, $key2, ... );
466    
467    =cut
468    
469    sub sinterstore {
470            my $self = shift;
471            $self->_sock_send_ok( 'SINTERSTORE', @_ );
472    }
473    
474  =head1 AUTHOR  =head1 AUTHOR
475    
476  Dobrica Pavlinusic, C<< <dpavlin at rot13.org> >>  Dobrica Pavlinusic, C<< <dpavlin at rot13.org> >>

Legend:
Removed from v.26  
changed lines
  Added in v.34

  ViewVC Help
Powered by ViewVC 1.1.26