Aniki
view release on metacpan or search on metacpan
lib/Aniki/Plugin/SQLPager.pm view on Meta::CPAN
package Aniki::Plugin::SQLPager;
use 5.014002;
use namespace::autoclean;
use Mouse::Role;
requires qw/select_by_sql select_named/;
with qw/Aniki::Plugin::PagerInjector/;
sub select_by_sql_with_pager {
my ($self, $sql, $bind, $opt) = @_;
$opt //= {};
my $page = $opt->{page} or Carp::croak("required parameter: page");
my $rows = $opt->{rows} or Carp::croak("required parameter: rows");
my $limit = $rows + 1;
my $offset = $rows * ($page - 1);
if ($opt->{no_offset}) {
$sql .= sprintf ' LIMIT %d', $limit;
}
else {
$sql .= sprintf ' LIMIT %d OFFSET %d', $limit, $offset;
}
my $result = $self->select_by_sql($sql, $bind, $opt);
return $self->inject_pager_to_result($result => $opt);
}
sub select_named_with_pager {
my ($self, $sql, $bind, $opt) = @_;
$opt //= {};
my $page = $opt->{page} or Carp::croak("required parameter: page");
my $rows = $opt->{rows} or Carp::croak("required parameter: rows");
my $limit = $rows + 1;
my $offset = $rows * ($page - 1);
if ($opt->{no_offset}) {
$sql .= sprintf ' LIMIT %d', $limit;
}
else {
$sql .= sprintf ' LIMIT %d OFFSET %d', $limit, $offset;
}
my $result = $self->select_named($sql, $bind, $opt);
return $self->inject_pager_to_result($result => $opt);
}
1;
__END__
=pod
=for stopwords sql
=encoding utf-8
=head1 NAME
Aniki::Plugin::SQLPager - SELECT sql with pager
=head1 SYNOPSIS
( run in 1.468 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )