summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Net/Riak.pm16
-rw-r--r--lib/Net/Riak/Object.pm51
-rw-r--r--lib/Net/Riak/Role/REST/Object.pm4
-rw-r--r--lib/Net/Riak/Role/REST/Search.pm28
-rw-r--r--lib/Net/Riak/Search.pm12
5 files changed, 77 insertions, 34 deletions
diff --git a/lib/Net/Riak.pm b/lib/Net/Riak.pm
index 4f2bfe5..1fd23a6 100644
--- a/lib/Net/Riak.pm
+++ b/lib/Net/Riak.pm
@@ -14,7 +14,7 @@ has client => (
is => 'rw',
isa => Client_T,
required => 1,
- handles => [qw/is_alive all_buckets server_info stats search i2search setup_indexing/]
+ handles => [qw/is_alive all_buckets server_info stats search index setup_indexing/]
);
sub BUILDARGS {
@@ -68,10 +68,20 @@ sub bucket {
# Secondary index setup (REST interface)
my $obj3 = $bucket->new_object('foo3', {...});
- $obj3->i2index({ myindex_bin => 'myvalue' });
+ $obj3->add_index('myindex_bin','myvalue' );
+ $obj3->add_index('number_int', 1001);
$obj3->store;
- my @keys = $client->i2search(bucket => 'foo', index => 'myindex_bin', key => 'myvalue' );
+ # Get all keys for a specific index/value pair
+ my @keys = $client->index('mybucket', 'myindex_bin', 'myvalue' );
+
+ # Get all keys for a range of index value pairs
+ my @keys = $client->index('mybucket', 'number_int', 500, 1500);
+
+ # Removing a secondary index (REST interface)
+ my $new_obj = $bucket->get('foo3');
+ $new_obj->remove_index('number_int', 1001);
+ $new_obj->store;
=head1 DESCRIPTION
diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm
index 8e48dcb..aa8fbcd 100644
--- a/lib/Net/Riak/Object.pm
+++ b/lib/Net/Riak/Object.pm
@@ -73,31 +73,54 @@ sub store {
$self->client->store_object($w, $dw, $self);
}
-sub i2index {
- my($self, $args) = @_;
+sub add_index {
+ my($self, $index, $data) = @_;
- if ( defined($args) ) {
- my %args = %{$args};
+ if ( defined($index) && defined($data) ) {
my $ref = undef;
if ( defined($self->i2indexes) ) { $ref = $self->i2indexes; }
- foreach my $i (keys %args)
+
+ if ( length($index) > 4 && $index =~ /^.+_bin$/ && length($data) > 0 )
{
+ $ref->{$index} = $data;
- #$i = lc($i);
- print $i,"\n";
- if ( defined($args{$i}) && length($args{$i}) > 0 )
- {
- $ref->{$i} = $args{$i};
-
- } else {
- delete $ref->{$i};
- }
+ }
+ 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.";
diff --git a/lib/Net/Riak/Role/REST/Object.pm b/lib/Net/Riak/Role/REST/Object.pm
index 859e06b..545e4e0 100644
--- a/lib/Net/Riak/Role/REST/Object.pm
+++ b/lib/Net/Riak/Role/REST/Object.pm
@@ -103,8 +103,8 @@ sub populate_object {
$HTTP::Headers::TRANSLATE_UNDERSCORE = 0;
foreach ( $http_response->header_field_names ) {
- next unless /^X-Riak-Index-(.+_bin)/;
- $obj->i2index({ lc($1) => $http_response->header($_) })
+ next unless /^X-Riak-Index-(.+_bin)$/ || /^X-Riak-Index-(.+_int)$/;
+ $obj->add_index(lc($1), $http_response->header($_) )
}
$HTTP::Headers::TRANSLATE_UNDERSCORE = 1;
diff --git a/lib/Net/Riak/Role/REST/Search.pm b/lib/Net/Riak/Role/REST/Search.pm
index 7e74af5..f813578 100644
--- a/lib/Net/Riak/Role/REST/Search.pm
+++ b/lib/Net/Riak/Role/REST/Search.pm
@@ -74,21 +74,27 @@ sub setup_indexing {
JSON::decode_json($http_response->content);
}
-sub i2search {
- my $self = shift;
- my %params = @_;
+sub index {
+ my ($self, $bucket,$index,$first, $last) = @_;
+
my $request;
+ my @req = ();
my $org_prefix = $self->prefix;
-
- $request = $self->new_request('GET', [
+ if ( defined($bucket) && defined($index) && defined($first) )
+ {
+ @req = (
'buckets',
- $params{bucket},
- 'index',
- $params{index},
- $params{key}
- ]
- );
+ $bucket,
+ 'index',
+ $index,
+ $first
+ );
+
+ if ( defined($last) ) { push(@req, $last); }
+ }
+
+ $request = $self->new_request('GET', [ @req ] );
my $http_response = $self->send_request($request);
JSON::decode_json($http_response->content)->{keys};
diff --git a/lib/Net/Riak/Search.pm b/lib/Net/Riak/Search.pm
index 646d4d3..368b7e7 100644
--- a/lib/Net/Riak/Search.pm
+++ b/lib/Net/Riak/Search.pm
@@ -35,10 +35,10 @@ sub setup_indexing {
# Secondary index setup
my $obj3 = $bucket->new_object('foo3', {...});
- $obj3->i2index({ myindex_bin => 'myvalue' });
+ $obj3->add_index('index', 'first');
$obj3->store;
- my @keys = $client->i2search(bucket => 'foo', index => 'myindex_bin', key => 'myvalue' );
+ my @keys = $client->index('bucket', 'myindex_bin', 'first_value' [, 'last_value'] );
=head1 DESCRIPTION
@@ -87,11 +87,15 @@ is the default index you want to query, if no index is provided you have to add
is the number of documents you want to be returned in the response
-=item i2index
+=item add_index
add secondary index to object
-=item i2search
+= item remove_index
+
+remove secondary index from object
+
+=item index
Find keys via secondary index.