Class-DBI-Plugin-Senna
view release on metacpan or search on metacpan
lib/Class/DBI/Plugin/Senna.pm view on Meta::CPAN
$pkg->add_trigger(before_delete => \&_before_delete_trigger);
$pkg->add_trigger(after_delete => \&_after_delete_trigger);
$pkg->add_trigger("before_set_$args{index_column}", \&_before_set_trigger);
}
sub senna_search
{
my $class = shift;
my $query = shift;
my $index = $class->senna_index();
my $cursor = $index->search($query);
my $iter = Class::DBI::Plugin::Senna::Iterator->new($class, $cursor);
if (wantarray) {
my @ret;
while (my $e = $iter->next) {
push @ret, $e;
}
return @ret;
} else {
return $iter;
}
}
lib/Class/DBI/Plugin/Senna.pm view on Meta::CPAN
package Class::DBI::Plugin::Senna::Iterator;
use strict;
use overload
'0+' => 'count',
fallback => 1
;
sub new
{
my($class, $them, $cursor) = @_;
bless {
_class => $them,
_cursor => $cursor,
}, $class;
}
sub count
{
my $self = shift;
my $cursor = $self->{_cursor};
return $cursor->hits;
}
sub reset
{
my $self = shift;
my $cursor = $self->{_cursor};
$cursor->rewind;
}
sub first
{
my $self = shift;
$self->reset;
return $self->next;
}
sub next
{
my $self = shift;
my $class = $self->{_class};
my $cursor = $self->{_cursor};
my $result = $cursor->next();
my $obj;
if (defined $result) {
$obj = $class->retrieve($result->key);
}
return $obj;
}
sub delete_all
{
my $self = shift;
( run in 0.222 second using v1.01-cache-2.11-cpan-4d50c553e7e )