NAME

ODG::Record - Perl extension for efficient and simple manipulation of row-based records.

VERSION

0.30

SYNOPSIS

	package  MyClass;

		use Moose;
			extends 'ODG::Record';
			

		has first_name => (
			is 			=> 'rw' ,
			isa			=> 'Str',
			index		=> 0 ,           # Denotes ArrayRef position for attribute
			traits		=> [ 'Index' ] , # Required trait
		);

		... 


	package main;
		use ODG::Record;

		my $record = ODG::Record->new( _data => [ 'frank', 'n', 'stein' ] ) );

      # Indexed attributes are stored in the ArrayRef and can be accessed
      # as any other attribute except that 

		print $record->first_name; 		# frank

		
	  # Data can retrieved by using the _data attribute.
		$record->_data = [ 'char', 'lee', 'brown' ] ;   

		$record->first_name; # char


	  # L-value attributes can also be defined.

		$record->first_name = 'Robert'  

DESCRIPTION

THIS VERSION BREAKS BACKWARD WITH PREVIOUS VERSIONS. THE API IS SIMPLIER.

ODG::Record is an extensible Moose-based class for efficiently and simply working with row based records. ArrayRefs are much faster than HashRefs especially for long arrays. This module circumvents the Mooses' HashRef based objects and places designated attributes in the _data slot, an ArrayRef. This allows for construction of more efficient row-based processing but retains the Moose flavor.

To work with a new record, simply change the reference of the _data slot.

$record->_data( [ 'Some', 'Array', 'Ref' ] );

Since the emphasis is on speed and generally connection to tightly typed systems such as Databases, we break the Moose encapsulation and install our own type-checking free accessors. Type checking is left up to the user. Since we have eliminated the type-checking, we have also added another bit of magic, L-based accessors. So rather than coding:

$record->first_name( "Frank" );

You can use the much more natural appearing:

$record->first_name = "Frank" 

This only works for attributes that are placed in the ArrayRef. Other attributes have normal Moose behavior.

DETAILS

Placing the record data in an ArrayRef _data slot allows far greater efficient when processing row-based records. Rather than creating a new object for each row, ODG::Record recycles the object and only swaps the reference of the _data. Since data is stored as an ArrayRef, this is a huge performance win.

During object construction, name-based accessors are built for each record field. By default, the accessors permit L-value assignment.

METHODS

new

Object constructor. Creates and returns a ODG::Record object. It takes the following options.

_data

L-value object accessor to the record data. Data is stroed internally as an array reference, so data This is the very fast accessor for the _data,

#  Getter
  $record->_data               # Retrieve entire array ref
  $record->_data->[ $index ]   # Get a specific field

# Setter
  $record->_data( [ .. ] )
  $record->_data = [ .. ]

  $record->_data->[ $index ] = $value    

EXPORT

None by default.

SEE ALSO

MooseX::Meta::Attribute::Index

Moose

THANKS

Steven Little, author of Moose

Paul Driver for suggesting to place the accessor methods in the instance rather than the class.

Members of moose@perl.org.

AUTHOR

Christopher Brown, <http://www.opendatagroup,com>

COPYRIGHT AND LICENSE

Copyright (C) 2008 by Open Data

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.