#!/usr/bin/perl -w


package PgCharge;
use Pg;
use strict;

sub new {
    my ($type,$DBHOST,$DBNAME,$DBUSER,$DBPWD)=@_;
	my $debug=0;
    # Ouverture connexion postgres
    my $req={};
    my $conn = Pg::connectdb("dbname=$DBNAME user=$DBUSER host=$DBHOST password=$DBPWD");
	$conn->exec("set datestyle to SQL,EURO");
    $req->{conn}=$conn;
    print "dbname=$DBNAME user=$DBUSER password=$DBPWD host=$DBHOST\n" if $debug;
    if (PGRES_CONNECTION_OK ne $conn->status) {
		undef $req;
		print STDERR "dbname=$DBNAME user=$DBUSER password=$DBPWD host=$DBHOST";
    }
    bless $req, $type;
}

sub exec {
	my $self=shift;
	my $req=shift;
	print STDERR "Execution de \n$req :\n";
	my $result=$self->{conn}->exec($req); 
	if ($result->resultStatus ne PGRES_COMMAND_OK) {
		print STDERR "Erreur : $req => ".$self->{conn}->errorMessage."\n";
		$result=$self->{conn}->errorMessage;
	}
	return $result;
}

sub load {
	my $self=shift;
	my $table=shift;
	my $where=shift;
	my @fields=@_;
	my @supRes;

	$where="" if (!$where);
	my $req="select ".join(',',@fields)." from $table $where";
	#print STDERR $req."\n";
	my $result=$self->{conn}->exec($req); 
	if (PGRES_TUPLES_OK ne $result->resultStatus) {
		die "ERREUR : $req failed : ".$self->{conn}->errorMessage;
	}

	while (my @row=$result->fetchrow) {
		my %SelResult;
		for my $i (0 .. $#fields) {
			$SelResult{$fields[$i]}=$row[$i];
			$SelResult{$fields[$i]}="" if (!defined $row[$i]);
		}
		push @supRes,\%SelResult;
	}
	
	$self->{$table}=\@supRes;
	return \@supRes;
}

sub printCsv {
	my $self=shift;
	my $table=shift;
	my $sep=shift;
	$sep='|' if (!$sep);

	if (!exists ($self->{$table})) { return "";}
	for my $key (@{$self->{$table}}) {
		print join($sep,values(%{$key}))."\n";
	}
}

1;

