Line data Source code
1 : #include <stdlib.h>
2 : #include <string.h>
3 : #include <stdio.h>
4 :
5 : exec sql include ../regression;
6 : exec sql whenever sqlerror sqlprint;
7 :
8 : static void
9 34 : check_result_of_insert(void)
10 : {
11 : exec sql begin declare section;
12 34 : int ivar1 = 0, ivar2 = 0;
13 : exec sql end declare section;
14 :
15 34 : exec sql select c1,c2 into :ivar1,:ivar2 from test;
16 34 : printf("%d %d\n", ivar1, ivar2);
17 34 : }
18 :
19 2 : int main(void)
20 : {
21 : exec sql begin declare section;
22 2 : int ivar1 = 1, ivar2 = 2;
23 : char v_include_dq_name[16], v_include_ws_name[16], v_normal_name[16], v_query[64];
24 : exec sql end declare section;
25 :
26 2 : strcpy(v_normal_name, "normal_name");
27 2 : strcpy(v_include_dq_name, "include_\"_name");
28 2 : strcpy(v_include_ws_name, "include_ _name");
29 2 : strcpy(v_query, "insert into test values(?,?)");
30 :
31 : /*
32 : * preparing for test
33 : */
34 2 : exec sql connect to REGRESSDB1;
35 2 : exec sql begin;
36 2 : exec sql create table test (c1 int, c2 int);
37 2 : exec sql commit work;
38 2 : exec sql begin;
39 2 :
40 : /*
41 : * Non dynamic statement
42 : */
43 2 : exec sql truncate test;
44 2 : printf("+++++ Test for prepnormal +++++\n");
45 2 : printf("insert into test values(:ivar1,:ivar2)\n");
46 2 : exec sql insert into test values(:ivar1,:ivar2);
47 2 : check_result_of_insert();
48 :
49 2 : exec sql truncate test;
50 2 : printf("+++++ Test for execute immediate +++++\n");
51 2 : printf("execute immediate \"insert into test values(1,2)\"\n");
52 2 : exec sql execute immediate "insert into test values(1,2)";
53 2 : check_result_of_insert();
54 :
55 : /*
56 : * PREPARE FROM
57 : */
58 2 : exec sql truncate test;
59 2 : printf("+++++ Test for PREPARE ident FROM CString +++++\n");
60 2 : printf("prepare ident_name from \"insert into test values(?,?)\"\n");
61 2 : exec sql prepare ident_name from "insert into test values(?,?)";
62 2 : printf("execute ident_name using :ivar1,:ivar2\n");
63 2 : exec sql execute ident_name using :ivar1,:ivar2;
64 2 : check_result_of_insert();
65 :
66 2 : exec sql truncate test;
67 2 : printf("+++++ Test for PREPARE char_variable_normal_name FROM char_variable +++++\n");
68 2 : printf("prepare :v_normal_name from :v_query\n");
69 2 : exec sql prepare :v_normal_name from :v_query;
70 2 : printf("execute :v_normal_name using :ivar1,:ivar2\n");
71 2 : exec sql execute :v_normal_name using :ivar1,:ivar2;
72 2 : check_result_of_insert();
73 :
74 2 : exec sql truncate test;
75 2 : printf("+++++ Test for PREPARE char_variable_inc_dq_name FROM char_variable +++++\n");
76 2 : printf("prepare :v_include_dq_name from :v_query\n");
77 2 : exec sql prepare :v_include_dq_name from :v_query;
78 2 : printf("execute :v_include_dq_name using :ivar1,:ivar2\n");
79 2 : exec sql execute :v_include_dq_name using :ivar1,:ivar2;
80 2 : check_result_of_insert();
81 :
82 2 : exec sql truncate test;
83 2 : printf("+++++ Test for PREPARE char_variable_inc_ws_name FROM char_variable +++++\n");
84 2 : printf("prepare :v_include_ws_name from :v_query\n");
85 2 : exec sql prepare :v_include_ws_name from :v_query;
86 2 : printf("execute :v_include_ws_name using :ivar1,:ivar2\n");
87 2 : exec sql execute :v_include_ws_name using :ivar1,:ivar2;
88 2 : check_result_of_insert();
89 :
90 2 : exec sql truncate test;
91 2 : printf("+++++ Test for PREPARE CString_inc_ws_name FROM char_variable +++++\n");
92 2 : printf("prepare \"include_ _name\" from :v_query\n");
93 2 : exec sql prepare "include_ _name" from :v_query;
94 2 : printf("exec sql execute \"include_ _name\" using :ivar1,:ivar2\n");
95 2 : exec sql execute "include_ _name" using :ivar1,:ivar2;
96 2 : check_result_of_insert();
97 :
98 2 : exec sql truncate test;
99 2 : printf("+++++ Test for PREPARE CString_normal_name FROM char_variable +++++\n");
100 2 : printf("prepare \"norma_name\" from :v_query\n");
101 2 : exec sql prepare "normal_name" from :v_query;
102 2 : printf("exec sql execute \"normal_name\" using :ivar1,:ivar2\n");
103 2 : exec sql execute "normal_name" using :ivar1,:ivar2;
104 2 : check_result_of_insert();
105 :
106 : /*
107 : * PREPARE AS
108 : */
109 2 : exec sql deallocate "ident_name";
110 2 : exec sql deallocate "normal_name";
111 2 : exec sql deallocate "include_ _name";
112 2 :
113 2 : exec sql truncate test;
114 2 : printf("+++++ Test for PREPARE ident(typelist) AS +++++\n");
115 2 : printf("prepare ident_name(int,int) as insert into test values($1,$2)\n");
116 2 : exec sql prepare ident_name(int,int) as insert into test values($1,$2);
117 2 : printf("execute ident_name(:ivar1,:ivar2)\n");
118 2 : exec sql execute ident_name(:ivar1,:ivar2);
119 2 : check_result_of_insert();
120 2 : exec sql deallocate "ident_name";
121 2 :
122 2 : exec sql truncate test;
123 2 : printf("+++++ Test for PREPARE CString_normal_name(typelist) AS +++++\n");
124 2 : printf("prepare \"normal_name\"(int,int) as insert into test values($1,$2)\n");
125 2 : exec sql prepare "normal_name"(int,int) as insert into test values($1,$2);
126 2 : printf("execute \"normal_name\"(:ivar1,:ivar2)\n");
127 2 : exec sql execute "normal_name"(:ivar1,:ivar2);
128 2 : check_result_of_insert();
129 2 : exec sql deallocate "normal_name";
130 2 :
131 2 : exec sql truncate test;
132 2 : printf("+++++ Test for PREPARE CString_include_ws_name(typelist) AS +++++\n");
133 2 : printf("prepare \"include_ _name\"(int,int) as insert into test values($1,$2)\n");
134 2 : exec sql prepare "include_ _name"(int,int) as insert into test values($1,$2);
135 2 : printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
136 2 : exec sql execute "include_ _name"(:ivar1,:ivar2);
137 2 : check_result_of_insert();
138 2 : exec sql deallocate "include_ _name";
139 2 :
140 2 : exec sql truncate test;
141 2 : printf("+++++ Test for PREPARE char_variable_normal_name(typelist) AS +++++\n");
142 2 : printf("prepare :v_normal_name(int,int) as insert into test values($1,$2)\n");
143 2 : exec sql prepare :v_normal_name(int,int) as insert into test values($1,$2);
144 2 : printf("execute :v_normal_name(:ivar1,:ivar2)\n");
145 2 : exec sql execute :v_normal_name(:ivar1,:ivar2);
146 2 : check_result_of_insert();
147 2 : exec sql deallocate "normal_name";
148 2 :
149 2 : exec sql truncate test;
150 2 : printf("+++++ Test for PREPARE char_variable_include_ws_name(typelist) AS +++++\n");
151 2 : printf("prepare :v_include_ws_name(int,int) as insert into test values($1,$2)\n");
152 2 : exec sql prepare :v_include_ws_name(int,int) as insert into test values($1,$2);
153 2 : printf("execute :v_include_ws_name(:ivar1,:ivar2)\n");
154 2 : exec sql execute :v_include_ws_name(:ivar1,:ivar2);
155 2 : check_result_of_insert();
156 2 : exec sql deallocate "include_ _name";
157 2 :
158 2 : exec sql truncate test;
159 2 : printf("+++++ Test for EXECUTE :v_normal_name(const,const) +++++\n");
160 2 : printf("prepare :v_normal_name from :v_query\n");
161 2 : exec sql prepare :v_normal_name from :v_query;
162 2 : printf("execute :v_normal_name(1,2)\n");
163 2 : exec sql execute :v_normal_name(1,2);
164 2 : check_result_of_insert();
165 2 : exec sql deallocate "normal_name";
166 2 :
167 2 : exec sql truncate test;
168 2 : printf("+++++ Test for EXECUTE :v_normal_name(expr,expr) +++++\n");
169 2 : printf("prepare :v_normal_name from :v_query\n");
170 2 : exec sql prepare :v_normal_name from :v_query;
171 2 : printf("execute :v_normal_name(0+1,1+1)\n");
172 2 : exec sql execute :v_normal_name(0+1,1+1);
173 2 : check_result_of_insert();
174 2 : exec sql deallocate "normal_name";
175 2 :
176 2 : exec sql truncate test;
177 2 : printf("+++++ Test for combination PREPARE FROM and EXECUTE ident(typelist) +++++\n");
178 2 : printf("prepare ident_name from :v_query\n");
179 2 : exec sql prepare ident_name from :v_query;
180 2 : printf("execute ident_name(:ivar1,:ivar2)\n");
181 2 : exec sql execute ident_name(:ivar1,:ivar2);
182 2 : check_result_of_insert();
183 2 : exec sql deallocate "ident_name";
184 2 :
185 2 : exec sql truncate test;
186 2 : printf("+++++ Test for combination PREPARE FROM and EXECUTE CString_include_ws_name(typelist) +++++\n");
187 2 : printf("prepare \"include_ _name\" from :v_query\n");
188 2 : exec sql prepare "include_ _name" from :v_query;
189 2 : printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
190 2 : exec sql execute "include_ _name"(:ivar1,:ivar2);
191 2 : check_result_of_insert();
192 2 : exec sql deallocate "include_ _name";
193 2 :
194 2 : exec sql drop table test;
195 2 : exec sql commit work;
196 2 :
197 2 : return 0;
198 : }
|