Age Owner Branch data TLA Line data Source code
1 : : #include <stdio.h>
2 : : #include <stdlib.h>
3 : : #include <float.h>
4 : : #include <math.h>
5 : : #include <pgtypes_numeric.h>
6 : : #include <decimal.h>
7 : :
8 : : exec sql include ../regression;
9 : :
10 : : int
5696 meskes@postgresql.or 11 :CBC 1 : main(void)
12 : : {
13 : : exec sql begin declare section;
14 : : int id, loopcount;
15 : : double d;
16 : : numeric *num;
17 : : char val[16];
18 : : exec sql end declare section;
19 : :
20 : 1 : ECPGdebug(1, stderr);
21 : : exec sql whenever sqlerror do sqlprint();
22 : :
23 : 1 : exec sql connect to REGRESSDB1;
24 [ - + ]: 1 :
25 : 1 : exec sql create table nantest1 (id int4, d float8);
5695 26 [ - + ]: 1 : exec sql insert into nantest1 (id, d) values (1, 'nan'::float8), (2, 'infinity'::float8), (3, '-infinity'::float8);
5696 27 [ - + ]: 1 :
28 : : exec sql declare cur cursor for select id, d, d from nantest1;
29 : 1 : exec sql open cur;
2418 tgl@sss.pgh.pa.us 30 [ - + + - ]: 4 : for (loopcount = 0; loopcount < 100; loopcount++)
31 : : {
5696 meskes@postgresql.or 32 : 4 : exec sql fetch from cur into :id, :d, :val;
33 [ - + + + ]: 4 : if (sqlca.sqlcode)
34 : 1 : break;
35 [ + + ]: 3 : if (isnan(d))
36 : 1 : printf("%d NaN '%s'\n", id, val);
5682 37 [ + - + - ]: 2 : else if (isinf(d))
38 [ + + ]: 2 : printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val);
39 : :
5696 40 : 3 : exec sql insert into nantest1 (id, d) values (:id + 3, :d);
41 [ - + ]: 3 : exec sql insert into nantest1 (id, d) values (:id + 6, :val);
42 [ - + ]: 3 : }
43 : 1 : exec sql close cur;
44 [ - + ]: 1 :
45 : 1 : exec sql open cur;
2418 tgl@sss.pgh.pa.us 46 [ - + + - ]: 10 : for (loopcount = 0; loopcount < 100; loopcount++)
47 : : {
5696 meskes@postgresql.or 48 : 10 : exec sql fetch from cur into :id, :d, :val;
49 [ - + + + ]: 10 : if (sqlca.sqlcode)
50 : 1 : break;
51 [ + + + + ]: 9 : if (isinf(d))
52 [ + + ]: 6 : printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val);
53 [ + + ]: 9 : if (isnan(d))
54 : 3 : printf("%d NaN '%s'\n", id, val);
55 : : }
56 : 1 : exec sql close cur;
57 [ - + ]: 1 :
58 : 1 : num = PGTYPESnumeric_new();
59 : :
60 : 1 : exec sql create table nantest2 (id int4, d numeric);
61 [ - + ]: 1 : exec sql insert into nantest2 (id, d) values (4, 'nan'::numeric);
62 [ - + ]: 1 :
63 : 1 : exec sql select id, d, d into :id, :num, :val from nantest2 where id = 4;
64 [ - + ]: 1 :
65 [ + - ]: 1 : printf("%d %s '%s'\n", id, (num->sign == NUMERIC_NAN ? "NaN" : "not NaN"), val);
66 : :
67 : 1 : exec sql insert into nantest2 (id, d) values (5, :num);
68 [ - + ]: 1 : exec sql insert into nantest2 (id, d) values (6, :val);
69 [ - + ]: 1 :
70 : : exec sql declare cur1 cursor for select id, d, d from nantest2;
71 : 1 : exec sql open cur1;
2418 tgl@sss.pgh.pa.us 72 [ - + + - ]: 4 : for (loopcount = 0; loopcount < 100; loopcount++)
73 : : {
5696 meskes@postgresql.or 74 : 4 : exec sql fetch from cur1 into :id, :num, :val;
75 [ - + + + ]: 4 : if (sqlca.sqlcode)
76 : 1 : break;
77 [ + - ]: 3 : printf("%d %s '%s'\n", id, (num->sign == NUMERIC_NAN ? "NaN" : "not NaN"), val);
78 : : }
79 : 1 : exec sql close cur1;
80 [ - + ]: 1 :
5500 81 : 1 : PGTYPESnumeric_free(num);
82 : :
5696 83 : 1 : exec sql rollback;
84 [ - + ]: 1 : exec sql disconnect;
85 [ - + ]: 1 :
2943 peter_e@gmx.net 86 : 1 : return 0;
87 : : }
|