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
|
2
|
||||||
1
|
1
|
||||||
drop view v1;
|
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;
|
show create view v1;
|
||||||
select * from v1;
|
select * from v1;
|
||||||
drop view 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++))
|
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);
|
DBUG_RETURN(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user