support for set foo => undef
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 22 Mar 2009 15:02:42 +0000 (15:02 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 22 Mar 2009 15:02:42 +0000 (15:02 +0000)
git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/Redis@28 447b33ff-793d-4489-8442-9bea7d161be5

lib/Redis.pm
t/01-Redis.t

index af9048a..3ac7619 100644 (file)
@@ -63,8 +63,10 @@ sub _sock_read_bulk {
        warn "## bulk len: ",dump($len);
        return undef if $len eq "nil\r\n";
        my $v;
        warn "## bulk len: ",dump($len);
        return undef if $len eq "nil\r\n";
        my $v;
-       read($sock, $v, $len) || die $!;
-       warn "## bulk v: ",dump($v);
+       if ( $len > 0 ) {
+               read($sock, $v, $len) || die $!;
+               warn "## bulk v: ",dump($v);
+       }
        my $crlf;
        read($sock, $crlf, 2); # skip cr/lf
        return $v;
        my $crlf;
        read($sock, $crlf, 2); # skip cr/lf
        return $v;
@@ -79,6 +81,7 @@ sub _sock_result_bulk {
 
 sub __sock_ok {
        my $ok = <$sock>;
 
 sub __sock_ok {
        my $ok = <$sock>;
+       return undef if $ok eq "nil\r\n";
        confess dump($ok) unless $ok eq "+OK\r\n";
 }
 
        confess dump($ok) unless $ok eq "+OK\r\n";
 }
 
@@ -100,7 +103,8 @@ sub __sock_send_bulk_raw {
        my $self = shift;
        warn "## _sock_send_bulk ",dump( @_ );
        my $value = pop;
        my $self = shift;
        warn "## _sock_send_bulk ",dump( @_ );
        my $value = pop;
-       print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n";
+       $value = '' unless defined $value; # FIXME errr? nil?
+       print $sock join(' ',@_) . ' ' . length($value) . "\r\n$value\r\n"
 }
 
 sub _sock_send_bulk {
 }
 
 sub _sock_send_bulk {
index 30d780d..2d13b97 100755 (executable)
@@ -3,7 +3,7 @@
 use warnings;
 use strict;
 
 use warnings;
 use strict;
 
-use Test::More tests => 71;
+use Test::More tests => 75;
 
 use lib 'lib';
 
 
 use lib 'lib';
 
@@ -26,6 +26,12 @@ ok( $o->set( foo => 'baz' ), 'set foo => baz' );
 
 cmp_ok( $o->get( 'foo' ), 'eq', 'baz', 'get foo = baz' );
 
 
 cmp_ok( $o->get( 'foo' ), 'eq', 'baz', 'get foo = baz' );
 
+ok( $o->set( 'test-undef' => 42 ), 'set test-undef' );
+ok( $o->set( 'test-undef' => undef ), 'set undef' );
+ok( ! defined $o->get( 'test-undef' ), 'get undef' );
+diag $o->exists( 'test-undef' );
+ok( $o->exists( 'test-undef' ), 'exists undef' );
+
 $o->del('non-existant');
 
 ok( ! $o->exists( 'non-existant' ), 'exists non-existant' );
 $o->del('non-existant');
 
 ok( ! $o->exists( 'non-existant' ), 'exists non-existant' );