TABLE::update_virtual_field to compute just one vcol
will be used later by storage engines (e.g. in MyISAM repair or in InnoDB purge)
This commit is contained in:
parent
2cdcf141f5
commit
c2b2cb8acd
12
sql/item.cc
12
sql/item.cc
@ -985,6 +985,18 @@ bool Item_field::check_field_expression_processor(void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Item_field::update_vcol_processor(void *arg)
|
||||
{
|
||||
MY_BITMAP *map= (MY_BITMAP *) arg;
|
||||
if (field->vcol_info &&
|
||||
!bitmap_fast_test_and_set(map, field->field_index))
|
||||
{
|
||||
field->vcol_info->expr_item->walk(&Item::update_vcol_processor, 0, arg);
|
||||
field->vcol_info->expr_item->save_in_field(field, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool Item::check_cols(uint c)
|
||||
{
|
||||
|
@ -1635,6 +1635,7 @@ public:
|
||||
timezone-dependent expressions in a (sub)partitioning function.
|
||||
*/
|
||||
virtual bool check_valid_arguments_processor(void *arg) { return 0; }
|
||||
virtual bool update_vcol_processor(void *arg) { return 0; }
|
||||
/*============== End of Item processor list ======================*/
|
||||
|
||||
virtual Item *get_copy(THD *thd, MEM_ROOT *mem_root)=0;
|
||||
@ -2580,6 +2581,7 @@ public:
|
||||
bool enumerate_field_refs_processor(void *arg);
|
||||
bool update_table_bitmaps_processor(void *arg);
|
||||
bool switch_to_nullable_fields_processor(void *arg);
|
||||
bool update_vcol_processor(void *arg);
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
{
|
||||
return mark_unsupported_function(field_name, arg, VCOL_FIELD_REF);
|
||||
@ -5091,6 +5093,7 @@ public:
|
||||
}
|
||||
table_map used_tables() const { return (table_map)0L; }
|
||||
Item_field *field_for_view_update() { return 0; }
|
||||
bool update_vcol_processor(void *arg) { return 0; }
|
||||
|
||||
bool walk(Item_processor processor, bool walk_subquery, void *args)
|
||||
{
|
||||
@ -5170,6 +5173,7 @@ public:
|
||||
(this->*processor)(args);
|
||||
}
|
||||
bool check_partition_func_processor(void *int_arg) {return TRUE;}
|
||||
bool update_vcol_processor(void *arg) { return 0; }
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
{
|
||||
return mark_unsupported_function("values()", arg, VCOL_IMPOSSIBLE);
|
||||
|
12
sql/table.cc
12
sql/table.cc
@ -7333,6 +7333,18 @@ int TABLE::update_virtual_fields(enum_vcol_update_mode update_mode)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int TABLE::update_virtual_field(Field *vf)
|
||||
{
|
||||
DBUG_ENTER("TABLE::update_virtual_field");
|
||||
|
||||
in_use->reset_arena_for_cached_items(expr_arena);
|
||||
bitmap_clear_all(&tmp_set);
|
||||
vf->vcol_info->expr_item->walk(&Item::update_vcol_processor, 0, &tmp_set);
|
||||
vf->vcol_info->expr_item->save_in_field(vf, 0);
|
||||
in_use->reset_arena_for_cached_items(0);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Update all DEFAULT and/or ON INSERT fields.
|
||||
|
@ -1423,6 +1423,7 @@ public:
|
||||
|
||||
uint actual_n_key_parts(KEY *keyinfo);
|
||||
ulong actual_key_flags(KEY *keyinfo);
|
||||
int update_virtual_field(Field *vf);
|
||||
int update_virtual_fields(enum_vcol_update_mode update_mode);
|
||||
int update_default_fields(bool update, bool ignore_errors);
|
||||
void reset_default_fields();
|
||||
|
Loading…
x
Reference in New Issue
Block a user