ArangoDB
view release on metacpan or search on metacpan
t/05_query.t view on Meta::CPAN
is_deeply \@docs, $expects;
my $cur2 = $sth->bind( { age => 20 } )->execute();
my @docs2;
while ( my $doc = $cur2->next() ) {
push @docs2, $doc->content;
}
is_deeply \@docs2, [ { name => 'John Doe', age => 42 }, ];
my $docs3 = $db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u')->bind( age => 10 )
->execute->all;
is_deeply [ map { $_->content } @$docs3 ], $expects;
my $cur3 = $sth->bind( { age => [ 1 .. 10 ] } )->execute( { do_count => 1, batch_size => 0 } );
is $cur3->length, 0;
my $docs4
= $db->query('FOR u IN users FILTER u.age == @age SORT u.name ASC RETURN u')->bind( age => 11 )->execute->all;
is scalar @$docs4, 1;
is_deeply $docs4->[0]->content, { name => 'Baz', age => 11 };
like exception {
$db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u')->execute;
}, qr/^Failed to execute query/;
like exception {
$sth->bind( age => {} );
}, qr/^Invalid bind parameter value/;
};
subtest 'Use bind var2' => sub {
my $db = ArangoDB->new($config);
my $sth = $db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u');
lives_ok {
$sth->bind( [] );
$sth->bind( 10, 0 );
$sth->bind( foo => undef );
$sth->bind( bar => q{} );
};
};
subtest 'batch query' => sub {
my $db = ArangoDB->new($config);
my $sth = $db->query('FOR u IN users FILTER u.age > @age SORT u.age ASC RETURN u');
$sth->bind( age => 10 );
my $cur = $sth->execute( { batch_size => 1, do_count => 1 } );
is $cur->count, 3;
is $cur->length, 1;
my @docs;
while ( my $doc = $cur->next() ) {
push @docs, $doc->content;
}
my $expects = [ { name => 'Baz', age => 11 }, { name => 'Bar', age => 20 }, { name => 'John Doe', age => 42 }, ];
is_deeply \@docs, $expects;
my $docs2
= $db->query('FOR u IN users FILTER u.age > @age SORT u.age ASC RETURN u')->bind( age => 10 )->execute->all;
is_deeply [ map { $_->content } @$docs2 ], $expects;
};
subtest 'delete cursor' => sub {
my $db = ArangoDB->new($config);
my $sth = $db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u');
$sth->bind( age => 10 );
my $cur = $sth->execute( { batch_size => 2, } );
$cur->delete;
like exception {
while ( my $doc = $cur->next() ) {
}
}, qr/^Failed to get next batch cursor/;
like exception {
$cur->delete;
}, qr/^Failed to delete cursor/;
like exception {
my $guard = mock_guard(
'ArangoDB::Connection' => {
http_delete => sub {die}
}
);
$cur->delete;
}, qr/^Failed to delete cursor/;
};
subtest 'parse query' => sub {
my $db = ArangoDB->new($config);
my $binds = $db->query('FOR u IN users SORT u.name ASC RETURN u')->parse();
is scalar @$binds, 0;
$binds = $db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETURN u')->parse();
is_deeply $binds, [qw/age/];
like exception {
$binds = $db->query('FOR u IN users FILTER u.age > @age SORT u.name ASC RETUR')->parse();
}, qr/^Failed to parse query/;
};
subtest 'explain query' => sub {
my $db = ArangoDB->new($config);
my $plan = $db->query('FOR u IN users SORT u.name ASC RETURN u')->explain();
ok $plan && ref($plan) eq 'ARRAY';
like exception { $db->query('FOR u IN users SORT u.name ASC RETURN ')->explain(); }, qr/^Failed to explain query/;
};
subtest 'cursor' => sub {
my $db = ArangoDB->new($config);
my $conn = $db->{connection};
my $cur = ArangoDB::Cursor->new( $conn, {} );
isa_ok $cur, 'ArangoDB::Cursor';
$cur = ArangoDB::Cursor->new( $conn, { result => {} } );
ok $cur;
$cur = ArangoDB::Cursor->new(
$conn,
{ result => [
{ _id => '0/0',
'_rev' => 0,
foo => [
{ bar => 1 }, [1], 42, undef, \do { my $var = 1 }
]
},
undef,
]
}
);
my $doc = $cur->next;
isa_ok $doc, 'ArangoDB::Document';
like exception{ $cur->next }, qr/^Invalid argument for ArangoDB\:\:Document/;
pass();
};
done_testing;
__END__
( run in 1.820 second using v1.01-cache-2.11-cpan-39bf76dae61 )