package Fey::Role::SQL::HasLimitClause; BEGIN { $Fey::Role::SQL::HasLimitClause::VERSION = '0.40'; } use strict; use warnings; use namespace::autoclean; use Scalar::Util qw( blessed ); use Fey::Types qw( PosInteger PosOrZeroInteger Undef ); use Moose::Role; use MooseX::Params::Validate qw( pos_validated_list ); has '_limit' => ( is => 'rw', writer => '_set_limit', predicate => '_has_limit', ); has '_offset' => ( is => 'rw', writer => '_set_offset', predicate => '_has_offset', ); sub limit { my $self = shift; my ( $limit, $offset ) = pos_validated_list( \@_, { isa => (PosInteger | Undef) }, { isa => PosOrZeroInteger, optional => 1, }, ); $self->_set_limit($limit) if defined $limit; $self->_set_offset($offset) if defined $offset; return $self; } sub limit_clause { my $self = shift; return unless $self->_has_limit() || $self->_has_offset(); my $sql = ''; $sql .= 'LIMIT ' . $self->_limit() if $self->_has_limit(); $sql .= q{ } if $self->_has_limit() && $self->_has_offset(); $sql .= 'OFFSET ' . $self->_offset() if $self->_has_offset(); return $sql; } 1; # ABSTRACT: A role for queries which can include a LIMIT clause =pod =head1 NAME Fey::Role::SQL::HasLimitClause - A role for queries which can include a LIMIT clause =head1 VERSION version 0.40 =head1 SYNOPSIS use Moose; with 'Fey::Role::SQL::HasLimitClause'; =head1 DESCRIPTION Classes which do this role represent a query which can include a C clause. =head1 METHODS This role provides the following methods: =head2 $query->limit() See the L for more details. =head2 $query->limit_clause() Returns the C clause portion of the SQL statement as a string. =head1 BUGS See L for details on how to report bugs. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2011 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut __END__