diff options
| -rw-r--r-- | lib/Net/Riak/Bucket.pm | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm index cd42316..9720e86 100644 --- a/lib/Net/Riak/Bucket.pm +++ b/lib/Net/Riak/Bucket.pm @@ -45,8 +45,10 @@ sub allow_multiples { } sub get_keys { - my $self = shift; - my $properties = $self->get_properties({keys => 'true', props => 'false'}); + my ($self, $params) = @_; + $params ||= {}; + my $key_mode = $params->{stream} ? 'stream' : 'true'; + my $properties = $self->get_properties({keys => $key_mode, props => 'false'}); return $properties->{keys}; } @@ -89,7 +91,18 @@ sub get_properties { die "Error getting bucket properties: " . $response->status_line . "\n"; } - return JSON::decode_json($response->content); + if ($params->{keys} ne 'stream') { + return JSON::decode_json($response->content); + } + + # In streaming mode, aggregate keys from the multiple returned chunk objects + else { + my $json = JSON->new; + my $props = $json->incr_parse($response->content); + my @keys = map { $_->{keys} && ref $_->{keys} eq 'ARRAY' ? @{$_->{keys}} : () } + $json->incr_parse; + return { props => $props, keys => \@keys }; + } } sub set_properties { |
