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