| SQL-Statement documentation | Contained in the SQL-Statement distribution. |
SQL::Statement::RAM
SQL::Statement::RAM
This package contains support for the internally used SQL::Statement::RAM::Table.
SQL::Statement::RAM SQL::Statement::RAM::Table ISA SQL::Eval::Table
Instantiates a new SQL::Statement::RAM::Table object, used for temporary
tables.
CREATE TEMP TABLE foo ....
Fetches the next row
As fetch_row except for writing
Deletes the last fetched/pushed row
Updates the last fetched/pushed row
Truncates the table at the current position
Set the column names of the table
Discards the table
Seek the row pointer
This table has following capabilities:
Using provided method update_current_row and capability inplace_update.
By providing capability update_current_row.
By definition (appropriate flag set in constructor).
Using provided method delete_current_row and capability inplace_delete.
By providing capability delete_current_row.
By definition (appropriate flag set in constructor).
You can find documentation for this module with the perldoc command.
perldoc SQL::Statement
You can also look for information at:
Copyright (c) 2001,2005 by Jeff Zucker: jzuckerATcpan.org Copyright (c) 2007-2010 by Jens Rehsack: rehsackATcpan.org
All rights reserved.
You may distribute this module under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
| SQL-Statement documentation | Contained in the SQL-Statement distribution. |
############################ package SQL::Statement::RAM; ############################ use strict; use warnings; use vars qw($VERSION); $VERSION = '1.33'; #################################### package SQL::Statement::RAM::Table; #################################### use strict; use warnings; require SQL::Eval; use vars qw(@ISA); @ISA = qw(SQL::Eval::Table); use Carp qw(croak); sub new { my ( $class, $tname, $col_names, $data_tbl ) = @_; my %table = ( NAME => $tname, index => 0, records => $data_tbl, col_names => $col_names, capabilities => { inplace_update => 1, inplace_delete => 1, }, ); my $self = $class->SUPER::new( \%table ); } ################################## # fetch_row() ################################## sub fetch_row { my ( $self, $data ) = @_; return $self->{row} = ( $self->{records} and ( $self->{index} < scalar( @{ $self->{records} } ) ) ) ? [ @{ $self->{records}->[ $self->{index}++ ] } ] : undef; } #################################### # insert_new_row() #################################### sub insert_new_row { my ( $self, $data, $fields ) = @_; push @{ $self->{records} }, [ @{$fields} ]; return 1; } ################################## # delete_current_row() ################################## sub delete_current_row { my ( $self, $data, $fields ) = @_; my $currentRow = $self->{index} - 1; croak "No current row" unless ( $currentRow >= 0 ); splice @{ $self->{records} }, $currentRow, 1; --$self->{index}; return 1; } ################################## # update_current_row() ################################## sub update_current_row { my ( $self, $data, $fields ) = @_; my $currentRow = $self->{index} - 1; croak "No current row" unless ( $currentRow >= 0 ); $self->{records}->[$currentRow] = [ @{$fields} ]; return 1; } ################################## # truncate() ################################## sub truncate { return splice @{ $_[0]->{records} }, $_[0]->{index}; } ##################################### # push_names() ##################################### sub push_names { my ( $self, $data, $names ) = @_; $self->{col_names} = $names; $self->{org_col_names} = [ @{$names} ]; $self->{col_nums} = SQL::Eval::Table::_map_colnums($names); } ##################################### # drop() ##################################### sub drop { my ( $self, $data ) = @_; my $tname = $self->{NAME}; delete $data->{Database}->{sql_ram_tables}->{$tname}; return 1; } ##################################### # seek() ##################################### sub seek { my ( $self, $data, $pos, $whence ) = @_; return unless defined $self->{records}; my ($currentRow) = $self->{index}; if ( $whence == 0 ) { $currentRow = $pos; } elsif ( $whence == 1 ) { $currentRow += $pos; } elsif ( $whence == 2 ) { $currentRow = @{ $self->{records} } + $pos; } else { croak $self . "->seek: Illegal whence argument ($whence)"; } if ( $currentRow < 0 ) { croak "Illegal row number: $currentRow"; } $self->{index} = $currentRow; } 1;