| DBIx-SQLEngine documentation | Contained in the DBIx-SQLEngine distribution. |
DBIx::SQLEngine::RecordSet::NextPrev - A RecordSet with a current index
use DBIx::SQLEngine::RecordSet;
$rs = DBIx::SQLEngine::RecordSet->class( 'NextPrev' )->new(@records);
while ( $rs->current_record ) {
print $rs->get_values( 'name' );
$rs->move_next();
}
$rs->move_first;
while ( $rs->current_record ) {
$rs->set_values( 'updated' => time() );
$rs->save_record();
$rs->move_next();
}
Provides additional methods for a RecordSet to add a current index with previous and next methods.
This package is INCOMPLETE!
See DBIx::SQLEngine for the overall interface and developer documentation.
See DBIx::SQLEngine::Docs::ReadMe for general information about this distribution, including installation and license information.
| DBIx-SQLEngine documentation | Contained in the DBIx-SQLEngine distribution. |
######################################################################## package DBIx::SQLEngine::RecordSet::NextPrev; use strict; use Carp; ######################################################################## use Class::MakeMethods ( 'Standard::Inheritable:scalar' => 'index_current', ); sub reset { (shift)->index_current( undef ) } ######################################################################## sub index { my $self = shift; my $offset = ( scalar @_ ) ? shift : 0; my $index = $self->index_current + $offset ( $index < 0 ) ? undef : $index } sub look { my $self = shift; $self->record( $self->index( @_ ) ) } sub move { my $self = shift; $self->index_current( $self->index( @_ ) ) } ######################################################################## sub current_record { my $self = shift; $self->record( $self->index_current || 0 ) } sub get_current { ( $_[0] )->current_record or croak("No current record at position '" . $self->index_current . "'" ) } ######################################################################## sub index_next { (shift)->index( ( scalar @_ ) ? shift : 1 ) } sub next_record { my $self = shift; $self->record( $self->index_next( @_ ) ) } sub move_next { my $self = shift; $self->index_current( $self->index_next( @_ ) ); $self->get_current; } sub get_next { ( $_[0] )->move_next or croak("No next record at position '" . $self->index_current . "'" ) } ######################################################################## sub index_prev { (shift)->index( 0 - ( ( scalar @_ ) ? shift : 1 ) ) } sub prev_record { my $self = shift; $self->record( $self->index_prev( @_ ) ) } sub move_prev { my $self = shift; $self->index_current( $self->index_prev( @_ ) ); $self->get_current; } sub get_prev { ( $_[0] )->move_prev or croak("No prev record at position '" . $self->index_current . "'" ) } ######################################################################## sub index_first { (shift)->record( 0 ) ? 0 : undef } sub look_first { my $self = shift; $self->record( ( scalar @_ ) ? shift : 0 ) } sub move_first { my $self = shift; $self->index_current( 0 ); $self->get_current; } sub get_first { (shift)->move_first( @_ ) or croak("No first record, record set is empty" ) } ######################################################################## sub index_last { my $self = shift; my $count = $self->count; $count ? $count - 1 : undef } sub look_last { my $self = shift; $self->record( 0 - ( ( scalar @_ ) ? shift : 1 ) ) } sub move_last { my $self = shift; $self->index_current( $self->index_last ); $self->get_current; } sub get_last { (shift)->move_last( @_ ) or croak("No last record, record set is empty" ) } ######################################################################## sub before_first { ! defined (shift)->index_current } sub at_first { (shift)->index_current < 1 } sub at_either_end { my $self = shift; $self->at_first or $self->at_last } sub at_index { my $self = shift; $self->index_current == $self->index( @_ ) } sub at_last { my $self = shift; ( ! $self->get_current ) and ( $self->index_current >= $self->index_last ) } sub after_last { my $self = shift; ( ! $self->get_current ) and ( $self->index_current > $self->index_last ) } ######################################################################## use Class::MakeMethods ( 'Standard::Universal:delegate' => [ [ qw( get_values change_values save_record ) ] => { target=>'get_current' }, ], ); ######################################################################## ########################################################################
######################################################################## 1;