From 0425b9a802b54d223c616c678f3af326cc6adf1c Mon Sep 17 00:00:00 2001 From: Mainframe2008 Date: Fri, 1 Feb 2013 12:44:18 +0100 Subject: Added comments for searching using secondary indexes --- lib/Net/Riak/Role/REST/Search.pm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'lib/Net/Riak/Role/REST') diff --git a/lib/Net/Riak/Role/REST/Search.pm b/lib/Net/Riak/Role/REST/Search.pm index b83e3d4..7e74af5 100644 --- a/lib/Net/Riak/Role/REST/Search.pm +++ b/lib/Net/Riak/Role/REST/Search.pm @@ -1,6 +1,7 @@ package Net::Riak::Role::REST::Search; use Moose::Role; use JSON; +use Data::Dumper; #ABSTRACT: Search interface @@ -73,4 +74,24 @@ sub setup_indexing { JSON::decode_json($http_response->content); } +sub i2search { + my $self = shift; + my %params = @_; + my $request; + + my $org_prefix = $self->prefix; + + $request = $self->new_request('GET', [ + 'buckets', + $params{bucket}, + 'index', + $params{index}, + $params{key} + ] + ); + + my $http_response = $self->send_request($request); + JSON::decode_json($http_response->content)->{keys}; +} + 1; -- cgit v1.2.3 From 2fd683a151a9a4bdaf64d44468fbde4fa5226602 Mon Sep 17 00:00:00 2001 From: Mainframe2008 Date: Fri, 1 Feb 2013 12:46:04 +0100 Subject: Added support for searching with secondary indexes --- lib/Net/Riak/Role/REST/Object.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'lib/Net/Riak/Role/REST') diff --git a/lib/Net/Riak/Role/REST/Object.pm b/lib/Net/Riak/Role/REST/Object.pm index fc45f3c..859e06b 100644 --- a/lib/Net/Riak/Role/REST/Object.pm +++ b/lib/Net/Riak/Role/REST/Object.pm @@ -1,6 +1,7 @@ package Net::Riak::Role::REST::Object; use Moose::Role; +use Data::Dumper; use JSON; sub store_object { @@ -32,13 +33,20 @@ sub store_object { $request->header('link' => $self->_links_to_header($object)); } + if ( $object->i2indexes) { + + foreach (keys %{$object->i2indexes}) { + $request->header(':x-riak-index-' . lc($_) => $object->i2indexes->{$_}); + } + } + if (ref $object->data && $object->content_type eq 'application/json') { $request->content(JSON::encode_json($object->data)); } else { $request->content($object->data); } - + my $response = $self->send_request($request); $self->populate_object($object, $response, [200, 201, 204, 300]); return $object; @@ -75,7 +83,8 @@ sub populate_object { $obj->exists(0); return if (!$http_response); - + + my $status = $http_response->code; $obj->data($http_response->content) @@ -91,6 +100,13 @@ sub populate_object { . (join(', ', @$expected)) . ", received: ".$http_response->status_line } + + $HTTP::Headers::TRANSLATE_UNDERSCORE = 0; + foreach ( $http_response->header_field_names ) { + next unless /^X-Riak-Index-(.+_bin)/; + $obj->i2index({ lc($1) => $http_response->header($_) }) + } + $HTTP::Headers::TRANSLATE_UNDERSCORE = 1; if ($status == 404) { $obj->clear; -- cgit v1.2.3 From 1b442767f0bc92b98c3a398dde02dae6212ecd1c Mon Sep 17 00:00:00 2001 From: Mainframe2008 Date: Tue, 26 Feb 2013 08:44:28 +0100 Subject: *Added secondary index support using method names from the riak python client. * Added tests for secondary indexes * Added documentation --- lib/Net/Riak/Role/REST/Object.pm | 4 ++-- lib/Net/Riak/Role/REST/Search.pm | 28 +++++++++++++++++----------- 2 files changed, 19 insertions(+), 13 deletions(-) (limited to 'lib/Net/Riak/Role/REST') 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}; -- cgit v1.2.3