mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-14347 CREATE PROCEDURE returns no error when using an unknown variable
CREATE PROCEDURE did not detect unknown SP variables in assignments like this: SET var=a_long_var_name_with_a_typo; The error happened only during the SP execution time, and only of the control flow reaches the erroneous statement. Fixing most expressions to detect unknown identifiers. This includes simple subqueries without tables: - Query specification: SELECT list, WHERE, HAVING (inside aggregate functions) clauses, e.g. SET var= (SELECT unknown_ident+1); SET var= (SELECT 1 WHERE unknown_identifier); SET var= (SELECT 1 HAVING SUM(unknown_identifier); - Table value constructor: VALUES clause, e.g.: SET var= (VALUES(unknown_ident)); Note, in some more complex subquery cases unknown variables are still not detected (this will be fixed separately): - Derived tables: SET a=(SELECT unknown_ident FROM (SELECT 1 AS alias) t1); SET res=(SELECT * FROM t1 LEFT OUTER JOIN (SELECT unknown_ident) t2 USING (c1)); - CTE: SET a=(WITH cte1 (a) AS (SELECT unknown_ident) SELECT * FROM cte1); SET a=(WITH cte1 (a,b) AS (VALUES (unknown,2),(3,4)) SELECT * FROM cte1); SET a=(WITH cte1 (a,b) AS (VALUES (1,2),(3,4)) SELECT unknown_ident FROM cte1); - SELECT .. GROUP BY unknown_identifier - SELECT .. ORDER BY unknown_identifier - HAVING with an unknown identifier outside of any aggregate functions: SELECT .. HAVING unknown_identifier;
This commit is contained in:
@ -607,13 +607,10 @@ create procedure nodb.bug3339() begin end|
|
||||
#
|
||||
# BUG#2653
|
||||
#
|
||||
--error ER_SP_UNDECLARED_VAR
|
||||
create procedure bug2653_1(a int, out b int)
|
||||
set b = aa|
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
call bug2653_1(1, @b)|
|
||||
|
||||
drop procedure bug2653_1|
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
create procedure bug2653_2(a int, out b int)
|
||||
@ -1714,6 +1711,7 @@ drop procedure if exists bug15091;
|
||||
--enable_warnings
|
||||
|
||||
delimiter |;
|
||||
--error ER_SP_UNDECLARED_VAR
|
||||
create procedure bug15091()
|
||||
begin
|
||||
declare selectstr varchar(6000) default ' ';
|
||||
@ -1726,15 +1724,6 @@ begin
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# The error message used to be:
|
||||
# ERROR 1109 (42S02): Unknown table 'c' in order clause
|
||||
# but is now rephrased to something less misleading:
|
||||
# ERROR 1109 (42S02): Unknown table 'c' in field list
|
||||
--error ER_UNKNOWN_TABLE
|
||||
call bug15091();
|
||||
|
||||
drop procedure bug15091;
|
||||
|
||||
|
||||
#
|
||||
# BUG#16896: Stored function: unused AGGREGATE-clause in CREATE FUNCTION
|
||||
|
Reference in New Issue
Block a user