]> granicus.if.org Git - postgresql/blob - src/interfaces/ecpg/test/compat_informix/test_informix.pgc
Make some ecpg test cases more robust against unexpected errors that happen
[postgresql] / src / interfaces / ecpg / test / compat_informix / test_informix.pgc
1 #include "sqltypes.h"
2 #include <stdlib.h>
3
4 $include ../regression;
5 $define NUMBER 12;
6
7 static void openit(void);
8 static void dosqlprint(void) {
9         printf("doSQLprint: Error: %s\n", sqlca.sqlerrm.sqlerrmc);
10 }
11
12 int main(void)
13 {
14         $int i = 14, loopcount;
15         $decimal j, m, n;
16         $string c[10];
17
18         ECPGdebug(1, stderr);
19         $whenever sqlerror do dosqlprint();
20
21         $connect to REGRESSDB1;
22         if (sqlca.sqlcode != 0) exit(1);
23
24         $create table test(i int primary key, j int, c text);
25
26         /* this INSERT works */
27         rsetnull(CDECIMALTYPE, (char *)&j);
28         $insert into test (i, j, c) values (7, :j, 'test   ');
29         $commit;
30
31         /* this INSERT should fail because i is a unique column */
32         $insert into test (i, j, c) values (7, NUMBER, 'a');
33         printf("INSERT: %ld=%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
34         if (sqlca.sqlcode != 0) $rollback;
35
36         $insert into test (i, j, c) values (:i, 1, 'a      ');
37         $commit;
38
39         /* this will fail (more than one row in subquery) */
40         $select i from test where j=(select j from test);
41         $rollback;
42
43         /* this however should be ok */
44         $select i from test where j=(select j from test order by i limit 1);
45         printf("SELECT: %ld=%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
46         if (sqlca.sqlcode != 0) $rollback;
47
48         sqlca.sqlcode = 100;
49         $declare c cursor for select * from test where i <= :i;
50         printf ("%ld\n", sqlca.sqlcode);
51         openit();
52
53         deccvint(0, &j);
54
55         for (loopcount = 0; loopcount < 100; loopcount++)
56         {
57                 $fetch forward c into :i, :j, :c;
58                 if (sqlca.sqlcode == 100) break;
59
60                 if (risnull(CDECIMALTYPE, (char *)&j))
61                         printf("%d NULL\n", i);
62                 else
63                 {
64                         int a;
65
66                         dectoint(&j, &a);
67                         printf("%d %d \"%s\"\n", i, a, c);
68                 }
69         }
70
71         deccvint(7, &j);
72         deccvint(14, &m);
73         decadd(&j, &m, &n);
74         $delete from test where i= :n::decimal;
75         printf("DELETE: %ld\n", sqlca.sqlcode);
76
77         $select 1 from test where i=14;
78         printf("Exists: %ld\n", sqlca.sqlcode);
79
80         $select 1 from test where i=147;
81         printf("Does not exist: %ld\n", sqlca.sqlcode);
82
83         $commit;
84         $drop table test;
85         $commit;
86
87         $close database;
88
89         return 0;
90 }
91
92 static void openit(void)
93 {
94         $open c;
95 }