mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-22560 Crash on a table value constructor with an SP variable
fix_fields_for_tvc() could call fix_fields() for Items that have already been fixed before. Changing fix_fields() to fix_fields_if_needed().
This commit is contained in:
@ -2599,3 +2599,14 @@ a
|
||||
2
|
||||
1
|
||||
drop view v1;
|
||||
#
|
||||
# MDEV-22560 Crash on a table value constructor with an SP variable
|
||||
#
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a INT DEFAULT 0;
|
||||
VALUES (a) UNION SELECT 1;
|
||||
END;
|
||||
$$
|
||||
a
|
||||
0
|
||||
1
|
||||
|
@ -1326,3 +1326,16 @@ create view v1 as with t(a) as (values (2), (1)) select a from t;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-22560 Crash on a table value constructor with an SP variable
|
||||
--echo #
|
||||
|
||||
DELIMITER $$;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a INT DEFAULT 0;
|
||||
VALUES (a) UNION SELECT 1;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
@ -52,7 +52,14 @@ bool fix_fields_for_tvc(THD *thd, List_iterator_fast<List_item> &li)
|
||||
|
||||
while ((item= it++))
|
||||
{
|
||||
if (item->fix_fields(thd, 0))
|
||||
/*
|
||||
Some items have already been fixed.
|
||||
For example Item_splocal items get fixed in
|
||||
Item_splocal::append_for_log(), which is called from subst_spvars()
|
||||
while replacing their values to NAME_CONST()s.
|
||||
So fix only those that have not been.
|
||||
*/
|
||||
if (item->fix_fields_if_needed(thd, 0))
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user