Commit 1ff4a0eb authored by unknown's avatar unknown
Browse files

Disabled the GOTO feature. (It's non-standard and undocumented.)

We want to have the defacto standard syntax for labels ("L:" instead of "label L;"),
and fix some known bugs, before we enable this again.
The code is left intact (#ifdef'ed SP_GOTO) and the test cases are kept in
sp-goto.test, for the future...


mysql-test/r/sp-error.result:
  Moved all goto tests to sp-goto.test.
mysql-test/r/sp.result:
  Moved all goto tests to sp-goto.test.
mysql-test/t/disabled.def:
  Disabled GOTO/LABEL (until the label syntax and some bugs can be fixed).
  We keep the tests in sp-goto.test for the future, but disable for now.
mysql-test/t/sp-error.test:
  Moved all goto tests to sp-goto.test.
mysql-test/t/sp.test:
  Moved all goto tests to sp-goto.test.
sql/lex.h:
  Disabled GOTO/LABEL (until the label syntax and some bugs can be fixed).
sql/sql_yacc.yy:
  Disabled GOTO/LABEL (until the label syntax and some bugs can be fixed).
parent 6c8d3975
Loading
Loading
Loading
Loading
+0 −51
Original line number Diff line number Diff line
@@ -65,47 +65,6 @@ iterate foo;
end|
ERROR 42000: ITERATE with no matching label: foo
create procedure foo()
begin
goto foo;
end|
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
label foo;
end;
goto foo;
end|
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
goto foo;
begin
label foo;
end;
end|
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
goto foo;
end;
begin
label foo;
end;
end|
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
label foo;
end;
begin
goto foo;
end;
end|
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
foo: loop
foo: loop
set @x=2;
@@ -308,16 +267,6 @@ declare continue handler for sqlstate '42S99' set x = 1;
declare c cursor for select * from t1;
end|
ERROR 42000: Cursor declaration after handler declaration
create procedure p()
begin
declare continue handler for sqlexception
begin
goto L1;
end;
select field from t1;
label L1;
end|
ERROR HY000: GOTO is not allowed in a stored procedure handler
drop procedure if exists p|
create procedure p(in x int, inout y int, out z int)
begin
+205 −0
Original line number Diff line number Diff line
drop table if exists t1;
create table t1 (
id   char(16) not null default '',
data int not null
);
drop procedure if exists goto1//
create procedure goto1()
begin
declare y int;
label a;
select * from t1;
select count(*) into y from t1;
if y > 2 then
goto b;
end if;
insert into t1 values ("j", y);
goto a;
label b;
end//
call goto1()//
id	data
id	data
j	0
id	data
j	0
j	1
id	data
j	0
j	1
j	2
drop procedure goto1//
drop procedure if exists goto2//
create procedure goto2(a int)
begin
declare x int default 0;
declare continue handler for sqlstate '42S98' set x = 1;
label a;
select * from t1;
b:
while x < 2 do
begin
declare continue handler for sqlstate '42S99' set x = 2;
if a = 0 then
set x = x + 1;
iterate b;
elseif a = 1 then
leave b;
elseif a = 2 then
set a = 1;
goto a;
end if;
end;
end while b;
select * from t1;
end//
call goto2(0)//
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
call goto2(1)//
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
call goto2(2)//
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
drop procedure goto2//
delete from t1//
drop procedure if exists goto3//
create procedure goto3()
begin
label L1;
begin
end;
goto L1;
end//
drop procedure goto3//
drop procedure if exists goto4//
create procedure goto4()
begin
begin
label lab1;
begin
goto lab1;
end;
end;
end//
drop procedure goto4//
drop procedure if exists goto5//
create procedure goto5()
begin
begin
begin
goto lab1;
end;
label lab1;
end;
end//
drop procedure goto5//
drop procedure if exists goto6//
create procedure goto6()
begin
label L1;
goto L5;
begin
label L2;
goto L1;
goto L5;
begin
label L3;
goto L1;
goto L2;
goto L3;
goto L4;
goto L5;
end;
goto L2;
goto L4;
label L4;
end;
label L5;
goto L1;
end//
drop procedure goto6//
create procedure foo()
begin
goto foo;
end//
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
label foo;
end;
goto foo;
end//
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
goto foo;
begin
label foo;
end;
end//
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
goto foo;
end;
begin
label foo;
end;
end//
ERROR 42000: GOTO with no matching label: foo
create procedure foo()
begin
begin
label foo;
end;
begin
goto foo;
end;
end//
ERROR 42000: GOTO with no matching label: foo
create procedure p()
begin
declare continue handler for sqlexception
begin
goto L1;
end;
select field from t1;
label L1;
end//
ERROR HY000: GOTO is not allowed in a stored procedure handler
drop procedure if exists bug6898//
create procedure bug6898()
begin
goto label1;
label label1;
begin end;
goto label1;
end//
drop procedure bug6898//
drop table t1;
+0 −148
Original line number Diff line number Diff line
@@ -438,145 +438,6 @@ id data
i	3
delete from t1|
drop procedure i|
drop procedure if exists goto1|
create procedure goto1()
begin
declare y int;
label a;
select * from t1;
select count(*) into y from t1;
if y > 2 then
goto b;
end if;
insert into t1 values ("j", y);
goto a;
label b;
end|
call goto1()|
id	data
id	data
j	0
id	data
j	0
j	1
id	data
j	0
j	1
j	2
drop procedure goto1|
drop procedure if exists goto2|
create procedure goto2(a int)
begin
declare x int default 0;
declare continue handler for sqlstate '42S98' set x = 1;
label a;
select * from t1;
b:
while x < 2 do
begin
declare continue handler for sqlstate '42S99' set x = 2;
if a = 0 then
set x = x + 1;
iterate b;
elseif a = 1 then
leave b;
elseif a = 2 then
set a = 1;
goto a;
end if;
end;
end while b;
select * from t1;
end|
call goto2(0)|
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
call goto2(1)|
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
call goto2(2)|
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
id	data
j	0
j	1
j	2
drop procedure goto2|
delete from t1|
drop procedure if exists goto3|
create procedure goto3()
begin
label L1;
begin
end;
goto L1;
end|
drop procedure goto3|
drop procedure if exists goto4|
create procedure goto4()
begin
begin
label lab1;
begin
goto lab1;
end;
end;
end|
drop procedure goto4|
drop procedure if exists goto5|
create procedure goto5()
begin
begin
begin
goto lab1;
end;
label lab1;
end;
end|
drop procedure goto5|
drop procedure if exists goto6|
create procedure goto6()
begin
label L1;
goto L5;
begin
label L2;
goto L1;
goto L5;
begin
label L3;
goto L1;
goto L2;
goto L3;
goto L4;
goto L5;
end;
goto L2;
goto L4;
label L4;
end;
label L5;
goto L1;
end|
drop procedure goto6|
insert into t1 values ("foo", 3), ("bar", 19)|
insert into t2 values ("x", 9, 4.1), ("y", -1, 19.2), ("z", 3, 2.2)|
drop procedure if exists sel1|
@@ -2971,15 +2832,6 @@ select @x|
set global query_cache_size = @qcs1|
delete from t1|
drop function bug9902|
drop procedure if exists bug6898|
create procedure bug6898()
begin
goto label1;
label label1;
begin end;
goto label1;
end|
drop procedure bug6898|
drop function if exists bug9102|
create function bug9102() returns blob return 'a'|
select bug9102()|
+1 −0
Original line number Diff line number Diff line
@@ -10,3 +10,4 @@
#
##############################################################################

sp-goto:GOTO is currently is disabled - will be fixed in the future
+1 −54
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ show create procedure foo|
--error 1305
show create function foo|

# LEAVE/ITERATE/GOTO with no match
# LEAVE/ITERATE with no match
--error 1308
create procedure foo()
foo: loop
@@ -100,47 +100,6 @@ create procedure foo()
foo: begin
  iterate foo;
end|
--error 1308
create procedure foo()
begin
  goto foo;
end|
--error 1308
create procedure foo()
begin
  begin
    label foo;
  end;
  goto foo;
end|
--error 1308
create procedure foo()
begin
  goto foo;
  begin
    label foo;
  end;
end|
--error 1308
create procedure foo()
begin
  begin
    goto foo;
  end;
  begin
    label foo;
  end;
end|
--error 1308
create procedure foo()
begin
  begin
    label foo;
  end;
  begin
    goto foo;
  end;
end|

# Redefining label
--error 1309
@@ -398,18 +357,6 @@ begin
  declare c cursor for select * from t1;
end|

--error 1358
create procedure p()
begin
  declare continue handler for sqlexception
    begin
      goto L1;
    end;

  select field from t1;
  label L1;
end|

# Check in and inout arguments.
--disable_warnings
drop procedure if exists p|
Loading