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