#include <stdio.h>
#include <libpq-fe.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
 PGconn *con=PQconnectdb("dbname=test1");
 PGresult *res;
 int tsize,tcount,i;

 if(PQstatus(con)==CONNECTION_BAD)
 {
  fprintf(stderr,"Database connection error %s\n",PQerrorMessage(con));
  exit(-1);
 }

 if(argc>1) tsize=atoi(argv[1]);
 if(argc>2) tcount=atoi(argv[2]);

 fprintf(stderr,"Transaction size=%d Transaction record=%d\n",tsize,tcount);

 for(i=1;i<=tcount;i++)
 {
  if((i%tsize)==1)
  {
   //fprintf(stderr,"Beginning transaction for i=%d\n",i);
   res=PQexec(con,"begin");
   if(PQresultStatus(res)!=PGRES_COMMAND_OK)
   {
    fprintf(stderr,"Begin transaction error %s.\n",PQresultErrorMessage(res));
    PQfinish(con);
    exit(-1);
   }
   PQclear(res);
  }

  res=PQexec(con,"insert into t values(25,\'Shridhar Daithankar\')");
  if(PQresultStatus(res)!=PGRES_COMMAND_OK)
  {
   fprintf(stderr,"Insertion error %s.\n",PQresultErrorMessage(res));
   PQexec(con,"rollback");
   PQfinish(con);
   exit(-1);
  }
  PQclear(res);

  if(!(i%tsize))
  {
   //fprintf(stderr,"Committing transaction for i=%d\n",i);
   res=PQexec(con,"commit");
   if(PQresultStatus(res)!=PGRES_COMMAND_OK)
   {
    fprintf(stderr,"Commit transaction error %s.\n",PQresultErrorMessage(res));
    PQexec(con,"rollback");
    PQfinish(con);
    exit(-1);
   }
   PQclear(res);
  }
 }
 PQfinish(con);
}
