#include <stdio.h>
#include <pgtypes_numeric.h>
#include <decimal.h>

int
main()
{
	char *text="error\n";
	numeric *value1, *value2, *res;
	exec sql begin declare section;
		numeric(14,7) des = {0, 0, 0, 0, 0, NULL, NULL} ;
	exec sql end declare section;
	double d;
	FILE *dbgs;
	
	if ((dbgs = fopen("log", "w")) != NULL)
	         ECPGdebug(1, dbgs);
	exec sql whenever sqlerror do sqlprint();

	exec sql connect to mm;
	exec sql create table test (text char(5), num numeric(14,7));
	
	value1 = PGTYPESnumeric_new();
	PGTYPESnumeric_from_int(1407, value1);
	text = PGTYPESnumeric_to_asc(value1, -1);
	printf("long = %s\n", text);
		
	value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
	value2 = PGTYPESnumeric_from_asc("10.0", NULL);
	res = PGTYPESnumeric_new();
	PGTYPESnumeric_add(value1, value2, res);
	text = PGTYPESnumeric_to_asc(res, -1);
	printf("add = %s\n", text);
	
	PGTYPESnumeric_sub(res, value2, res);
	text = PGTYPESnumeric_to_asc(res, -1);
	printf("sub = %s\n", text);
		
	PGTYPESnumeric_copy(res, &des);
	exec sql insert into test (text, num) values ('test', :des);
	
	value2 = PGTYPESnumeric_from_asc("2369.7", NULL);
	PGTYPESnumeric_mul(value1, value2, res);

	exec sql select num into :des from test where text = 'test';
	
	PGTYPESnumeric_mul(res, &des, res);
	text = PGTYPESnumeric_to_asc(res, -1);
	printf("mul = %s\n", text);

	value2 = PGTYPESnumeric_from_asc("10000", NULL);
	PGTYPESnumeric_div(res, value2, res);
	text = PGTYPESnumeric_to_asc(res, -1);
	PGTYPESnumeric_to_double(res, &d);
	printf("div = %s %e\n", text, d);

	exec sql rollback;
	exec sql disconnect;

	if (dbgs != NULL)
                fclose(dbgs);
		
	return (0);
}

