package PgArray;
# #############################################################################
# $Id: PgArray.pm,v 1.6 2005/03/07 08:35:06 weby Exp $
# Author: Vulcho Nedelchev <kumcho@vulcho.com>
# Description: Converts Perl array data struct to PlPgSQL array and vice versa
# $Revision: 1.6 $
# #############################################################################
use Data::Dumper;
our $VERSION = sprintf "%d.%03d",q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/;
sub new
{
my $class = shift;
my $this = {};
bless($this, $class);
return($this);
}
sub decode
{
my $this = shift;
my $parr = shift;
return([]) unless length $parr;
if ($parr =~ /^\s*\{/) {
$parr =~ tr/{}/[]/;
my $arr_ref = eval $parr;
die __PACKAGE__." error: $@\n$parr\n" if $@;
return($arr_ref);
}
return([]);
}
sub encode
{
my $this = shift;
my $arr = shift;
die __PACKAGE__."->encode(ARR_REF)\n" unless ref $arr eq 'ARRAY';
my $dump = Dumper($arr);
$dump =~ s/^\$VAR1 = //; # remove "$VAR1 = " from begining
$dump =~ tr/[]/{}/; # translate [] to {}
$dump =~ s/\n//gm; # clean new lines
$dump =~ s/\s*(\{|\})\s*/$1/g; # clean spaces
$dump =~ s/\s*\,\s*/, /g; # the same but near by commas
return($dump);
}
1;
__END__
=head1 NAME
PgArray
=head1 DESCRIPTION
Converts Perl array data struct to plPgSQL array and vice versa
=head1 METHODS
=head2 encode
Accepts array reference as argument
=head2 decode
Accepts STRING as argument
=head1 SYNOPSIS
use PgArray;
use Data::Dumper;
my $pg = new PgArray;
my $pgArr = $pg->encode([1,2,3,4]);
my $perlArr = $pg->decode('{1,2,3,4}');
print Dumper($perlArr);
print "PG_Array: $pgArr\n";
=head1 AUTHOR
Vulcho Nedelchev <kumcho@vulcho.com>
=head1 SEE ALSO
DBI
=cut