#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <pgtypes_numeric.h>

EXEC SQL include sqlda.h;

sqlda_t *sqlda;

int
main(void)
{
    EXEC SQL CONNECT TO unix:postgresql://localhost:5496/postgres AS con1 USER postgres/postgres;
    EXEC SQL CREATE TABLE testtab(c1 numeric);
    EXEC SQL INSERT INTO testtab VALUES (1.23456), (0.12345), (0.01234);
    EXEC SQL COMMIT;
    
    sqlda = malloc(sizeof(sqlda_t));
    
    while (1)
    {
        sqlda_t *cur_sqlda;
        EXEC SQL PREPARE SELECT_INTO FROM "SELECT * FROM testtab";
        EXEC SQL EXECUTE SELECT_INTO INTO DESCRIPTOR sqlda;
        
        for (cur_sqlda = sqlda; cur_sqlda != NULL; cur_sqlda = cur_sqlda->desc_next)
        {
            int i,j;
            
            for (i=0; i<cur_sqlda->sqld; i++)
            {
                sqlvar_t v = cur_sqlda->sqlvar[i];
                char *sqldata = v.sqldata;
                
                printf("ndigits :%d\n",((numeric *)sqldata)->ndigits);
                printf("buf     :");
                
                for (j=0; j<((numeric *)sqldata)->digits - ((numeric *)sqldata)->buf + ((numeric *)sqldata)->ndigits; j++){
                    printf("%d   ",((numeric *)sqldata)->buf[j]);
                }
                printf("\n");
                printf("digits  :");
                
                for (j=0; j<((numeric *)sqldata)->ndigits; j++){
                    printf("%d   ",((numeric *)sqldata)->digits[j]);
                }
                
                printf("\n");
                printf("numeric :%s\n", PGTYPESnumeric_to_asc((numeric *)sqldata, 5));
                printf("----------------------------");
                printf("\n");
            }
        }
    break;
    }
    
    EXEC SQL DROP TABLE testtab;
    EXEC SQL COMMIT;
    EXEC SQL DISCONNECT ALL;

}
