mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / t / parser_stack.test
blobf8291ce8766d7e10e2ff7fd557612cdb4c8ca22d
2 # These tests are designed to cause an internal parser stack overflow,
3 # and trigger my_yyoverflow().
6 use test;
8 SELECT
9 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
10 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
11 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
13 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
14 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
15 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
18 prepare stmt from
20 SELECT
21 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
22 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
23 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
25 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
26 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
27 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
31 execute stmt;
33 --disable_warnings
34 drop view if exists view_overflow;
35 --enable_warnings
37 CREATE VIEW view_overflow AS
38 SELECT
39 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
40 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
41 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
43 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
44 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
45 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
48 SELECT * from view_overflow;
50 drop view view_overflow;
52 --disable_warnings
53 drop procedure if exists proc_overflow;
54 --enable_warnings
56 delimiter $$;
58 CREATE PROCEDURE proc_overflow()
59 BEGIN
61   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
62   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
63   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
64   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
65   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
66   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
67   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
68   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
69   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
70   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
72   select 1;
73   select 2;
74   select 3;
76   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
77   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
78   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
79   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
80   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
81   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
82   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
83   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
84   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
85   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
87 END $$
89 delimiter ;$$
91 call proc_overflow();
93 drop procedure proc_overflow;
95 --disable_warnings
96 drop function if exists func_overflow;
97 --enable_warnings
99 delimiter $$;
101 create function func_overflow() returns int
102 BEGIN
103   DECLARE x int default 0;
105   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
106   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
107   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
108   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
109   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
110   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
111   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
112   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
113   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
114   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
116   SET x=x+1;
117   SET x=x+2;
118   SET x=x+3;
120   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
121   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
122   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
123   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
124   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
125   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
126   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
127   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
128   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
129   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
131   return x;
132 END $$
134 delimiter ;$$
136 select func_overflow();
138 drop function func_overflow;
140 --disable_warnings
141 drop table if exists table_overflow;
142 --enable_warnings
144 create table table_overflow(a int, b int);
146 delimiter $$;
148 create trigger trigger_overflow before insert on table_overflow
149 for each row
150 BEGIN
152   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
153   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
154   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
155   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
156   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
157   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
158   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
159   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
160   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
161   BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
163   SET NEW.b := NEW.a;
164   SET NEW.b := NEW.b + 1;
165   SET NEW.b := NEW.b + 2;
166   SET NEW.b := NEW.b + 3;
168   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
169   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
170   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
171   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
172   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
173   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
174   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
175   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
176   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
177   END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
179 END $$
181 delimiter ;$$
183 insert into table_overflow set a=10;
184 insert into table_overflow set a=20;
185 select * from table_overflow;
187 drop table table_overflow;
189 --disable_warnings
190 drop procedure if exists proc_35577;
191 --enable_warnings
193 delimiter $$;
195 CREATE PROCEDURE proc_35577()
196 BEGIN
197   DECLARE z_done INT DEFAULT 0;
198   DECLARE t_done VARCHAR(5000);
199   outer_loop: LOOP
200     IF t_done=1  THEN
201       LEAVE outer_loop;
202     END IF;
204     inner_block:BEGIN
205       DECLARE z_done INT DEFAULT  0;
206       SET z_done = 0;
207       inner_loop: LOOP
208         IF z_done=1  THEN
209           LEAVE inner_loop;
210         END IF;
211         IF (t_done = 'a') THEN
212           IF (t_done <> 0) THEN
213             IF ( t_done > 0) THEN
214               IF (t_done = 'a') THEN
215                 SET t_done = 'a';
216               ELSEIF (t_done = 'a') THEN
217                 SET t_done = 'a';
218               ELSEIF(t_done = 'a') THEN
219                 SET t_done = 'a';
220               ELSEIF(t_done = 'a') THEN
221                 SET t_done = 'a';
222               ELSEIF(t_done = 'a') THEN
223                 SET t_done = 'a';
224               ELSEIF(t_done = 'a') THEN
225                 SET t_done = 'a';
226               ELSEIF(t_done = 'a') THEN
227                 SET t_done = 'a';
228               ELSEIF(t_done = 'a') THEN
229                 SET t_done = 'a';
230               END IF;
231             END IF;
232           END IF;
233         END IF;
234       END LOOP inner_loop;
235     END inner_block;
236   END LOOP outer_loop;
237 END $$
239 delimiter ;$$
241 drop procedure proc_35577;
244 # Bug#37269 (parser crash when creating stored procedure)
247 --disable_warnings
248 drop procedure if exists p_37269;
249 --enable_warnings
251 delimiter $$;
253 create procedure p_37269()
254 begin
255   declare done int default 0;
256   declare varb int default 0;
257   declare vara int default 0;
259   repeat
260     select now();
261   until done end repeat;
262   while varb do
263     select now();
264     begin
265       select now();
266       repeat
267         select now();
268       until done end repeat;
269       if vara then 
270         select now();
271         repeat
272           select now();
273           loop
274             select now();
275           end loop;
276           repeat
277             select now();
278             label1: while varb do
279               select now();
280             end while label1;
281             if vara then 
282               select now();
283               repeat
284                 select now();
285               until done end repeat;
286               begin
287                 select now();
288                 while varb do
289                   select now();
290                   label1: while varb do
291                     select now();
292                   end while label1;
293                   if vara then 
294                     select now();
295                     while varb do
296                       select now();
297                       loop
298                         select now();
299                       end loop;
300                       repeat
301                         select now();
302                         loop
303                           select now();
304                           while varb do
305                             select now();
306                           end while;
307                           repeat
308                             select now();
309                             label1: loop
310                               select now();
311                               if vara then 
312                                 select now();
313                               end if;
314                             end loop label1;
315                           until done end repeat;
316                         end loop;
317                       until done end repeat;
318                     end while;
319                   end if;
320                 end while;
321               end;
322             end if;
323           until done end repeat;
324         until done end repeat;
325       end if;
326     end;
327   end while;
328 end $$
330 delimiter ;$$
332 drop procedure p_37269;
335 # Bug#37228 (Sever crashes when creating stored procedure with more than
336 #            10 IF/ELSEIF)
339 --disable_warnings
340 drop procedure if exists p_37228;
341 --enable_warnings
343 delimiter $$;
345 create procedure p_37228 ()
346 BEGIN
347   DECLARE v INT DEFAULT 123;
349   IF (v > 1) THEN SET v = 1; 
350   ELSEIF (v < 10) THEN SET v = 10;
351   ELSEIF (v < 11) THEN SET v = 11;
352   ELSEIF (v < 12) THEN SET v = 12;
353   ELSEIF (v < 13) THEN SET v = 13;
354   ELSEIF (v < 14) THEN SET v = 14;
355   ELSEIF (v < 15) THEN SET v = 15;
356   ELSEIF (v < 16) THEN SET v = 16;
357   ELSEIF (v < 17) THEN SET v = 17;
358   ELSEIF (v < 18) THEN SET v = 18;
359   ELSEIF (v < 19) THEN SET v = 19;
360   ELSEIF (v < 20) THEN SET v = 20;
361   ELSEIF (v < 21) THEN SET v = 21;
362   ELSEIF (v < 22) THEN SET v = 22;
363   ELSEIF (v < 23) THEN SET v = 23;
364   ELSEIF (v < 24) THEN SET v = 24;
365   ELSEIF (v < 25) THEN SET v = 25;
366   ELSEIF (v < 26) THEN SET v = 26;
367   ELSEIF (v < 27) THEN SET v = 27;
368   ELSEIF (v < 28) THEN SET v = 28;
369   ELSEIF (v < 29) THEN SET v = 29;
370   ELSEIF (v < 30) THEN SET v = 30;
371   ELSEIF (v < 31) THEN SET v = 31;
372   ELSEIF (v < 32) THEN SET v = 32;
373   ELSEIF (v < 33) THEN SET v = 33;
374   ELSEIF (v < 34) THEN SET v = 34;
375   ELSEIF (v < 35) THEN SET v = 35;
376   ELSEIF (v < 36) THEN SET v = 36;
377   ELSEIF (v < 37) THEN SET v = 37;
378   ELSEIF (v < 38) THEN SET v = 38;
379   ELSEIF (v < 39) THEN SET v = 39;
380   END IF;
381 END $$
383 delimiter ;$$
385 drop procedure p_37228;