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

int main(void)
{
   exec sql begin declare section;
   int     *d1=0;
   double  *d2=0;
   char **d3=0;
   char **d4=0;
   char **d5=0;
   char **d6=0;
   char **d7=0;
/*   char **d8=0; */
   char **d9=0;
   int *i1=0;
   int *i2=0;
   int *i3=0;
   int *i4=0;
   int *i5=0;
   int *i6=0;
   int *i7=0;
/*   int *i8=0; */
   int *i9=0;
   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 mdy;

   exec sql create table test (a serial, b numeric(12,3), c varchar, d varchar(3), e char(4), f timestamptz, g boolean, h box, i inet);
   exec sql insert into test (b, c, d, e, f, g, h, i) values (23.456, 'varchar', 'v', 'c', '2003-03-03 12:33:07 PDT', true, '(1,2,3,4)', '2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128');
   exec sql insert into test (b, c, d, e, f, g, h, i) values (2.446456, NULL, 'v', 'c', '2003-03-03 12:33:07 PDT', false, NULL, NULL);

   exec sql allocate descriptor mydesc;
   exec sql select a,b,c,d,e,f,g,h,i into sql descriptor mydesc from test order by a;
   exec sql get descriptor mydesc value 1 :d1=DATA, :i1=INDICATOR;
   exec sql get descriptor mydesc value 2 :d2=DATA, :i2=INDICATOR;
   exec sql get descriptor mydesc value 3 :d3=DATA, :i3=INDICATOR;
   exec sql get descriptor mydesc value 4 :d4=DATA, :i4=INDICATOR;
   exec sql get descriptor mydesc value 5 :d5=DATA, :i5=INDICATOR;
   exec sql get descriptor mydesc value 6 :d6=DATA, :i6=INDICATOR;
   exec sql get descriptor mydesc value 7 :d7=DATA, :i7=INDICATOR;
   /* skip box for now */
   /* exec sql get descriptor mydesc value 8 :d8=DATA, :i8=INDICATOR; */
   exec sql get descriptor mydesc value 9 :d9=DATA, :i9=INDICATOR;

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

      if (i2[i]) printf("NULL, ");
      else printf("%f, ",d2[i]);

      if (i3[i]) printf("NULL, ");
      else printf("'%s', ",d3[i]);

      if (i4[i]) printf("NULL, ");
      else printf("'%s', ",d4[i]);

      if (i5[i]) printf("NULL, ");
      else printf("'%s', ",d5[i]);

      if (i6[i]) printf("NULL, ");
      else printf("'%s', ",d6[i]);

      if (i7[i]) printf("NULL, ");
      else printf("'%s', ",d7[i]);

      if (i9[i]) printf("NULL, ");
      else printf("'%s', ",d9[i]);

      printf("\n");
   }
   ECPGfree_auto_mem();
   printf("\n");

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