ArangoDB
view release on metacpan or search on metacpan
lib/ArangoDB.pm view on Meta::CPAN
$self->_server_error_handler( $@, "Failed to get collection: $name", 1 );
}
return $collection;
}
sub collections {
my $self = shift;
my @colls;
eval {
my $res = $self->{connection}->http_get(API_COLLECTION);
@colls = map { ArangoDB::Collection->new( $self, $_ ) } @{ $res->{collections} };
};
if ($@) {
$self->_server_error_handler( $@, 'Failed to get collections' );
}
return \@colls;
}
sub query {
my ( $self, $query ) = @_;
return ArangoDB::Statement->new( $self->{connection}, $query );
}
sub document {
my ( $self, $doc ) = @_;
$doc = $doc || q{};
my $api = API_DOCUMENT . '/' . $doc;
my $res = eval { $self->{connection}->http_get($api) };
if ($@) {
$self->_server_error_handler( $@, "Failed to get the document($doc) in the collection(%s)" );
}
return ArangoDB::Document->new( $self->{connection}, $res );
}
sub edge {
my ( $self, $edge ) = @_;
$edge = $edge || q{};
my $api = API_EDGE . '/' . $edge;
my $res = eval { $self->{connection}->http_get($api) };
if ($@) {
$self->_server_error_handler( $@, "Failed to get the edge($edge) in the collection(%s)" );
}
return ArangoDB::Edge->new( $self->{connection}, $res );
}
sub index {
my ( $self, $index_id ) = @_;
$index_id = defined $index_id ? $index_id : q{};
my $api = API_INDEX . '/' . $index_id;
my $index = eval {
my $res = $self->{connection}->http_get($api);
$self->_get_index_instance($res);
};
if ($@) {
$self->_server_error_handler( $@, 'Failed to get the index($index_id) on the collection(%s)' );
}
return $index;
}
sub _server_error_handler {
my ( $self, $error, $message, $ignore_404 ) = @_;
if ( ref($error) && $error->isa('ArangoDB::ServerException') ) {
return if $ignore_404 && $error->code == 404;
$message .= ':' . ( $error->detail->{errorMessage} || q{} );
}
croak $message;
}
BEGIN {
*_get_index_instance = \&ArangoDB::Collection::_get_index_instance;
}
1;
__END__
=head1 NAME
ArangoDB - ArangoDB client for Perl
=head1 SYNOPSIS
use ArangoDB;
my $db = ArangoDB->new(
host => 'localhost',
port => 8529,
keep_alive => 1,
);
# Find or create collection
my $foo = $db->('foo');
# Create new document
$foo->save({ x => 42, y => { a => 1, b => 2, } });
$foo->save({ x => 1, y => { a => 1, b => 10, } });
$foo->name('new_name'); # rename the collection
# Create hash index.
$foo->ensure_hash_index([qw/x y/]);
# Simple query
my $cursor = $db->('new_name')->by_example({ b => 2 });
while( my $doc = $cursor->next ){
# do something
}
# AQL
my $cursor2 = $db->query(
'FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u'
)->bind( { age => 19 } )->execute();
my $docs = $cursor2->all;
=head1 DESCRIPTION
This module is an ArangoDB's REST API client for Perl.
ArangoDB is a universal open-source database with a flexible data model for documents, graphs, and key-values.
More information: L<http://www.arangodb.org/>
=head1 SUPPORT API VERSION
This supports ArangoDB API implementation 1.01.
( run in 1.464 second using v1.01-cache-2.11-cpan-39bf76dae61 )