MDEV-31112 vcol circular references lead to stack overflow
This commit is contained in:
parent
547dfc0e01
commit
082aea7742
@ -569,3 +569,14 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# MDEV-31112 vcol circular references lead to stack overflow
|
||||||
|
#
|
||||||
|
create table t (a int, c int as (a));
|
||||||
|
alter table t alter column c drop default;
|
||||||
|
alter table t modify column a int as (c) stored;
|
||||||
|
ERROR 01000: Expression for field `a` is referring to uninitialized field `c`
|
||||||
|
drop table t;
|
||||||
|
#
|
||||||
|
# End of 10.4 tests
|
||||||
|
#
|
||||||
|
@ -536,3 +536,16 @@ drop table t1;
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-31112 vcol circular references lead to stack overflow
|
||||||
|
--echo #
|
||||||
|
create table t (a int, c int as (a));
|
||||||
|
alter table t alter column c drop default;
|
||||||
|
--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
|
||||||
|
alter table t modify column a int as (c) stored;
|
||||||
|
drop table t;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.4 tests
|
||||||
|
--echo #
|
||||||
|
@ -908,14 +908,15 @@ bool Item_field::register_field_in_write_map(void *arg)
|
|||||||
|
|
||||||
This is used by fix_vcol_expr() when a table is opened
|
This is used by fix_vcol_expr() when a table is opened
|
||||||
|
|
||||||
We don't have to check fields that are marked as NO_DEFAULT_VALUE
|
We don't have to check non-virtual fields that are marked as
|
||||||
as the upper level will ensure that all these will be given a value.
|
NO_DEFAULT_VALUE as the upper level will ensure that all these
|
||||||
|
will be given a value.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Item_field::check_field_expression_processor(void *arg)
|
bool Item_field::check_field_expression_processor(void *arg)
|
||||||
{
|
{
|
||||||
Field *org_field= (Field*) arg;
|
Field *org_field= (Field*) arg;
|
||||||
if (field->flags & NO_DEFAULT_VALUE_FLAG)
|
if (field->flags & NO_DEFAULT_VALUE_FLAG && !field->vcol_info)
|
||||||
return 0;
|
return 0;
|
||||||
if ((field->default_value && field->default_value->flags) || field->vcol_info)
|
if ((field->default_value && field->default_value->flags) || field->vcol_info)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user