sub siblings {
my( $self ) = @_;
my $position_column = $self->position_column;
- my $rs = $self->search(
+ my $rs = $self->result_source->resultset->search(
{
$position_column => { '!=' => $self->get_column($position_column) },
$self->_collection_clause(),
sub first_sibling {
my( $self ) = @_;
- return ($self->search(
- { $self->_collection_clause() },
- { rows=>1, order_by => $self->position_column },
+ return ($self->result_source->resultset->search(
+ {
+ $self->position_column => 1,
+ $self->_collection_clause(),
+ },
)->all())[0];
}
sub last_sibling {
my( $self ) = @_;
- return ($self->search(
- { $self->_collection_clause() },
- { rows=>1, order_by => $self->position_column.' DESC' },
+ my $count = $self->result_source->resultset->search({$self->_collection_clause()})->count();
+ return ($self->result_source->resultset->search(
+ {
+ $self->position_column => $count,
+ $self->_collection_clause(),
+ },
)->all())[0];
}
sub previous_sibling {
my( $self ) = @_;
my $position_column = $self->position_column;
- return ($self->search(
+ my $position = $self->get_column( $position_column );
+ return 0 if ($position==1);
+ return ($self->result_source->resultset->search(
{
- $position_column => { '<' => $self->get_column($position_column) },
+ $position_column => $position - 1,
$self->_collection_clause(),
- },
- { rows=>1, order_by => $position_column.' DESC' },
+ }
)->all())[0];
}
sub next_sibling {
my( $self ) = @_;
my $position_column = $self->position_column;
+ my $position = $self->get_column( $position_column );
+ my $count = $self->result_source->resultset->search({$self->_collection_clause()})->count();
+ return 0 if ($position==$count);
return ($self->result_source->resultset->search(
{
- $position_column => { '>' => $self->get_column($position_column) },
+ $position_column => $position + 1,
$self->_collection_clause(),
},
- { rows=>1, order_by => $position_column },
)->all())[0];
}