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