mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
952e2cd42a
Parse column names (and not variables) only in UPDATE ... SET ... mysql-test/r/sp-error.result: New test case for BUG#2272 mysql-test/t/sp-error.test: New test case for BUG#2272 sql/sql_yacc.yy: "UPDATE table SET id = val" should only recognize column names, and not local SP variables for 'id'. (Also removed "as locator" syntax which is not supported.)
295 lines
7.2 KiB
Text
295 lines
7.2 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 1289 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 1295 Referring to uninitialized variable y
|
|
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 if exists table_1|
|
|
create table t3 (column_1_0 int)|
|
|
create procedure bug1653()
|
|
update t3 set column_1 = 0|
|
|
call bug1653()|
|
|
ERROR 42S22: Unknown column 'column_1' in 'field list'
|
|
drop table t3|
|
|
create table t3 (column_1 int)|
|
|
call bug1653()|
|
|
drop procedure bug1653|
|
|
drop table t3|
|
|
create procedure bug2272()
|
|
begin
|
|
declare v int;
|
|
update t1 set v = 42;
|
|
end|
|
|
insert into t1 values (666, 51.3)|
|
|
call bug2272()|
|
|
ERROR 42S22: Unknown column 'v' in 'field list'
|
|
delete from t1|
|
|
drop table t1|
|