aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/num_test.pgc
blob: 42eb66d9a04cdcc6ed231a19dc029b4a1e6a1d94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#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;
		decimal(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 decimal(14,7));
	
	value1 = PGTYPESnew();
	PGTYPESnumeric_iton(1407, value1);
	text = PGTYPESnumeric_ntoa(value1);
	printf("long = %s\n", text);
		
	value1 = PGTYPESnumeric_aton("2369.7", NULL);
	value2 = PGTYPESnumeric_aton("10.0", NULL);
	res = PGTYPESnew();
	decadd(value1, value2, res);
	text = PGTYPESnumeric_ntoa(res);
	printf("add = %s\n", text);
	
	PGTYPESnumeric_sub(res, value2, res);
	text = PGTYPESnumeric_ntoa(res);
	printf("sub = %s\n", text);
		
	PGTYPESnumeric_copy(res, &des);
	exec sql insert into test (text, num) values ('test', :des);
	
	value2 = PGTYPESnumeric_aton("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_ntoa(res);
	printf("mul = %s\n", text);

	value2 = PGTYPESnumeric_aton("10000", NULL);
	PGTYPESnumeric_div(res, value2, res);
	text = PGTYPESnumeric_ntoa(res);
	PGTYPESnumeric_ntod(res, &d);
	printf("div = %s %e\n", text, d);

	exec sql rollback;
	exec sql disconnect;

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