diff options
| author | Robin Edwards <robin.ge@gmail.com> | 2013-03-01 02:04:58 -0800 |
|---|---|---|
| committer | Robin Edwards <robin.ge@gmail.com> | 2013-03-01 02:04:58 -0800 |
| commit | 5f99cd866eb23113ea46ac78720f5608c54982ce (patch) | |
| tree | 3c35ac04f3d748942c2e973e6f42164ff02e4316 /lib/Net/Riak/Object.pm | |
| parent | Update changelog (diff) | |
| parent | *Added secondary index support using method names from the riak python (diff) | |
| download | net-riak-5f99cd866eb23113ea46ac78720f5608c54982ce.tar.gz | |
Merge pull request #22 from Mainframe2008/master
Secondary index support
Diffstat (limited to '')
| -rw-r--r-- | lib/Net/Riak/Object.pm | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm index 7148d4f..aa8fbcd 100644 --- a/lib/Net/Riak/Object.pm +++ b/lib/Net/Riak/Object.pm @@ -5,6 +5,7 @@ package Net::Riak::Object; use Moose; use Scalar::Util; use Net::Riak::Link; +use Data::Dumper; with 'Net::Riak::Role::Replica' => {keys => [qw/r w dw/]}; with 'Net::Riak::Role::Base' => {classes => @@ -23,6 +24,9 @@ has vtag => (is => 'rw', isa => 'Str'); has content_type => (is => 'rw', isa => 'Str', default => 'application/json'); has location => ( is => 'rw', isa => 'Str' ); has _jsonize => (is => 'rw', isa => 'Bool', lazy => 1, default => 1); + +has i2indexes => ( is => 'rw', isa => 'HashRef' ); + has links => ( traits => ['Array'], is => 'rw', @@ -69,6 +73,54 @@ sub store { $self->client->store_object($w, $dw, $self); } +sub add_index { + my($self, $index, $data) = @_; + + if ( defined($index) && defined($data) ) { + my $ref = undef; + if ( defined($self->i2indexes) ) { $ref = $self->i2indexes; } + + if ( length($index) > 4 && $index =~ /^.+_bin$/ && length($data) > 0 ) + { + $ref->{$index} = $data; + + } + if ( length($index) > 4 && $index =~ /^.+_int$/ && $data =~ /^\d+$/ ) + { + $ref->{$index} = $data; + } + $self->i2indexes($ref); + } + $self->i2indexes; +} + +sub remove_index { + my($self, $index, $data) = @_; + if ( defined($index) && defined($data) ) { + if ( defined($self->i2indexes) ) { + my $ref = $self->i2indexes; + + if ( $index =~ /^.+_bin$/ ) { + if ( defined($ref->{$index}) && $ref->{$index} eq $data ) + { + + delete(${$ref}{$index}); + } + $self->i2indexes($ref); + } + if ( $index =~ /^.+_int$/ ) { + if ( defined($ref->{$index}) && $ref->{$index} == $data ) + { + print "Deleting $index\n"; + delete(${$ref}{$index}); + } + $self->i2indexes($ref); + } + print Dumper($ref),"\n"; + } + } +} + sub status { my ($self) = @_; warn "DEPRECATED: status method will be removed in the 0.17 release, please use ->client->status."; |
