mariadb/mysql-test/r/sp-error.result
unknown 3aaa8ab94e Fixed BUG#336: Subselects with tables does not work as values for local SP variables
and BUG#1654: Stored Procedure Crash if contains subquery and set function

Disallowed subselects in RETURN (for FUNCTIONs) and SET of local variables.
The latter should work, but turned out to be difficult to fix, so we just
disallow it for the time being.


include/mysqld_error.h:
  New error message for unsupported subselect as SP set values (for the time being).
include/sql_state.h:
  New error message for unsupported subselect as SP set values (for the time being).
mysql-test/r/sp-error.result:
  Test cases for BUG#336 and BUG#1654. (Unsupported use of subselect)
mysql-test/t/sp-error.test:
  Test cases for BUG#336 and BUG#1654. (Unsupported use of subselect)
sql/item.cc:
  Made Item_splocal::type() work at compile time, for error checking.
sql/item.h:
  Made Item_splocal::type() work at compile time, for error checking.
sql/share/czech/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/danish/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/dutch/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/english/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/estonian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/french/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/german/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/greek/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/hungarian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/italian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/japanese/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/korean/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/norwegian-ny/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/norwegian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/polish/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/portuguese/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/romanian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/russian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/serbian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/slovak/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/spanish/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/swedish/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/share/ukrainian/errmsg.txt:
  New error message for unsupported subselect as SP set values (for the time being).
sql/sp_head.cc:
  Fixed (bogus) compile error on HP-UX alpha.
sql/sql_yacc.yy:
  Disallowed subselects in RETURN (for FUNCTIONs) and SET of local variables.
  The latter should work, but turned out to be difficult to fix, so we just
  disallow it for the time being.
2003-12-04 15:17:55 +01:00

283 lines
6.9 KiB
Text

delete from mysql.proc;
create procedure syntaxerror(t int);
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
create procedure syntaxerror(t int);
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
create procedure syntaxerror(t int);
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
create procedure proc1()
set @x = 42;
create function func1() returns int
return 42;
create procedure foo()
create procedure bar() set @x=3;
ERROR 2F003: Can't create a PROCEDURE from within another stored routine
create procedure foo()
create function bar() returns double return 2.3;
ERROR 2F003: Can't create a FUNCTION from within another stored routine
create procedure proc1()
set @x = 42;
ERROR 42000: PROCEDURE proc1 already exists
create function func1() returns int
return 42;
ERROR 42000: FUNCTION func1 already exists
drop procedure proc1;
drop function func1;
alter procedure foo;
ERROR 42000: PROCEDURE foo does not exist
alter function foo;
ERROR 42000: FUNCTION foo does not exist
drop procedure foo;
ERROR 42000: PROCEDURE foo does not exist
drop function foo;
ERROR 42000: FUNCTION foo does not exist
call foo();
ERROR 42000: PROCEDURE foo does not exist
drop procedure if exists foo;
Warnings:
Warning 1287 PROCEDURE foo does not exist
show create procedure foo;
ERROR 42000: PROCEDURE foo does not exist
create procedure foo()
foo: loop
leave bar;
end loop;
ERROR 42000: LEAVE with no matching label: bar
create procedure foo()
foo: loop
iterate bar;
end loop;
ERROR 42000: ITERATE with no matching label: bar
create procedure foo()
foo: begin
iterate foo;
end;
ERROR 42000: ITERATE with no matching label: foo
create procedure foo()
foo: loop
foo: loop
set @x=2;
end loop foo;
end loop foo;
ERROR 42000: Redefining label foo
create procedure foo()
foo: loop
set @x=2;
end loop bar;
ERROR 42000: End-label bar without match
create procedure foo(out x int)
begin
declare y int;
set x = y;
end;
Warnings:
Warning 1293 Referring to uninitialized variable y
drop procedure foo;
create procedure foo()
begin
select name from mysql.proc;
select type from mysql.proc;
end;
call foo();
ERROR 0A000: SELECT in a stored procedure must have INTO
drop procedure foo;
create procedure foo()
return 42;
ERROR 42000: RETURN is only allowed in a FUNCTION
create function foo() returns int
begin
declare x int;
select max(c) into x from test.t;
return x;
end;
ERROR 0A000: Statements like SELECT, INSERT, UPDATE (and others) are not allowed in a FUNCTION
create procedure p(x int)
insert into test.t1 values (x);
create function f(x int) returns int
return x+42;
call p();
ERROR 42000: Wrong number of arguments for PROCEDURE p, expected 1, got 0
call p(1, 2);
ERROR 42000: Wrong number of arguments for PROCEDURE p, expected 1, got 2
select f();
ERROR 42000: Wrong number of arguments for FUNCTION f, expected 1, got 0
select f(1, 2);
ERROR 42000: Wrong number of arguments for FUNCTION f, expected 1, got 2
drop procedure p;
drop function f;
create procedure p(val int, out res int)
begin
declare x int default 0;
declare continue handler for foo set x = 1;
insert into test.t1 values (val);
if (x) then
set res = 0;
else
set res = 1;
end if;
end;
ERROR 42000: Undefined CONDITION: foo
create procedure p(val int, out res int)
begin
declare x int default 0;
declare foo condition for 1146;
declare continue handler for bar set x = 1;
insert into test.t1 values (val);
if (x) then
set res = 0;
else
set res = 1;
end if;
end;
ERROR 42000: Undefined CONDITION: bar
create function f(val int) returns int
begin
declare x int;
set x = val+3;
end;
ERROR 42000: No RETURN found in FUNCTION f
create function f(val int) returns int
begin
declare x int;
set x = val+3;
if x < 4 then
return x;
end if;
end;
select f(10);
ERROR 2F005: FUNCTION f ended without RETURN
drop function f;
create procedure p()
begin
declare c cursor for insert into test.t1 values ("foo", 42);
open c;
close c;
end;
ERROR 42000: Cursor statement must be a SELECT
create procedure p()
begin
declare x int;
declare c cursor for select * into x from test.t limit 1;
open c;
close c;
end;
ERROR 42000: Cursor SELECT must not have INTO
create procedure p()
begin
declare c cursor for select * from test.t;
open cc;
close c;
end;
ERROR 42000: Undefined CURSOR: cc
drop table if exists t1;
create table t1 (val int);
create procedure p()
begin
declare c cursor for select * from test.t1;
open c;
open c;
close c;
end;
call p();
ERROR 24000: Cursor is already open
drop procedure p;
create procedure p()
begin
declare c cursor for select * from test.t1;
open c;
close c;
close c;
end;
call p();
ERROR 24000: Cursor is not open
drop procedure p;
alter procedure bar3 sql security invoker;
ERROR 42000: PROCEDURE bar3 does not exist
alter procedure bar3 name
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;
ERROR 42000: Identifier name 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' is too long
drop table t1;
drop table if exists t1;
create table t1 (val int, x float);
insert into t1 values (42, 3.1), (19, 1.2);
create procedure p()
begin
declare c cursor for select * from t1;
declare x int;
open c;
fetch c into x, y;
close c;
end;
ERROR 42000: Undeclared variable: y
create procedure p()
begin
declare c cursor for select * from t1;
declare x int;
open c;
fetch c into x;
close c;
end;
call p();
ERROR HY000: Wrong number of FETCH variables
drop procedure p;
create procedure p()
begin
declare c cursor for select * from t1;
declare x int;
declare y float;
declare z int;
open c;
fetch c into x, y, z;
close c;
end;
call p();
ERROR HY000: Wrong number of FETCH variables
drop procedure p;
create procedure p(in x int, x char(10))
begin
end;
ERROR 42000: Duplicate parameter: x
create function p(x int, x char(10))
begin
end;
ERROR 42000: Duplicate parameter: x
create procedure p()
begin
declare x float;
declare x int;
end;
ERROR 42000: Duplicate variable: x
create procedure p()
begin
declare c condition for 1064;
declare c condition for 1065;
end;
ERROR 42000: Duplicate condition: c
create procedure p()
begin
declare c cursor for select * from t1;
declare c cursor for select field from t1;
end;
ERROR 42000: Duplicate cursor: c
create procedure bug1965()
begin
declare c cursor for select val from t1 order by valname;
open c;
close c;
end;
call bug1965();
ERROR 42S22: Unknown column 'valname' in 'order clause'
drop procedure bug1965;
select 1 into a;
ERROR 42000: Undeclared variable: a
create procedure bug336(id char(16))
begin
declare x int;
set x = (select sum(t.data) from test.t2 t);
end;
ERROR 0A000: Subselect value not supported
create function bug1654()
returns int
return (select sum(t.data) from test.t2 t);
ERROR 0A000: Statements like SELECT, INSERT, UPDATE (and others) are not allowed in a FUNCTION
drop table t1;