#include <stdio.h>
exec sql include sqlca;
#include <stdlib.h>
exec sql include ../regression;

int main(void)
{
   exec sql begin declare section;
   int *ip1=0;
   char **cp2=0;
   int *ipointer1=0;
   int *ipointer2=0;
   int colnum;
   exec sql end declare section;
   int i;

   ECPGdebug(1, stderr);

   exec sql whenever sqlerror do sqlprint();
   exec sql connect to REGRESSDB1;

   exec sql set datestyle to postgres;

   exec sql create table test (a int, b text);
   exec sql insert into test values (1, 'one');
   exec sql insert into test values (2, 'two');
   exec sql insert into test values (NULL, 'three');
   exec sql insert into test values (4, 'four');
   exec sql insert into test values (5, NULL);
   exec sql insert into test values (NULL, NULL);

   exec sql allocate descriptor mydesc;
   exec sql select * into sql descriptor mydesc from test;
   exec sql get descriptor mydesc :colnum=COUNT;
   exec sql get descriptor mydesc value 1 :ip1=DATA, :ipointer1=INDICATOR;
   exec sql get descriptor mydesc value 2 :cp2=DATA, :ipointer2=INDICATOR;

   printf("Result (%d columns):\n", colnum);
   for (i=0;i < sqlca.sqlerrd[2];++i)
   {
      if (ipointer1[i]) printf("NULL, ");
      else printf("%d, ",ip1[i]);

      if (ipointer2[i]) printf("NULL, ");
      else printf("'%s', ",cp2[i]);
      printf("\n");
   }
   ECPGfree_auto_mem();
   printf("\n");

   exec sql deallocate descriptor mydesc;
   exec sql rollback;
   exec sql disconnect;
   return 0;
}
