Commit 60069a98 authored by Aditya A's avatar Aditya A Committed by Marko Mäkelä

Bug #29127203 VIRTUAL GENERATED COLUMN INDEX DATA INCONSISTENCY

PROBLEM
-------

Index defined on a virtual column whose base column was in a fk
relation was not getting updated. This is because while getting
the updated field information from the update vector of the parent
table we were comparing the column number of the base column (for
virtual column) in child table with the associated column number
in the parent table. There was a mismatch in this column number
because of which this update field information was skipped and
subsequently index was not getting updated.

FIX
parent b6ac6738
...@@ -21654,7 +21654,7 @@ innobase_rename_vc_templ( ...@@ -21654,7 +21654,7 @@ innobase_rename_vc_templ(
given col_no. given col_no.
@param[in] foreign foreign key information @param[in] foreign foreign key information
@param[in] update updated parent vector. @param[in] update updated parent vector.
@param[in] col_no column position of the table @param[in] col_no base column position of the child table to check
@return updated field from the parent update vector, else NULL */ @return updated field from the parent update vector, else NULL */
static static
dfield_t* dfield_t*
...@@ -21670,6 +21670,10 @@ innobase_get_field_from_update_vector( ...@@ -21670,6 +21670,10 @@ innobase_get_field_from_update_vector(
ulint prefix_col_no; ulint prefix_col_no;
for (ulint i = 0; i < foreign->n_fields; i++) { for (ulint i = 0; i < foreign->n_fields; i++) {
if (dict_index_get_nth_col_no(foreign->foreign_index, i)
!= col_no) {
continue;
}
parent_col_no = dict_index_get_nth_col_no(parent_index, i); parent_col_no = dict_index_get_nth_col_no(parent_index, i);
parent_field_no = dict_table_get_nth_col_pos( parent_field_no = dict_table_get_nth_col_pos(
...@@ -21679,8 +21683,7 @@ innobase_get_field_from_update_vector( ...@@ -21679,8 +21683,7 @@ innobase_get_field_from_update_vector(
upd_field_t* parent_ufield upd_field_t* parent_ufield
= &update->fields[j]; = &update->fields[j];
if (parent_ufield->field_no == parent_field_no if (parent_ufield->field_no == parent_field_no) {
&& parent_col_no == col_no) {
return(&parent_ufield->new_val); return(&parent_ufield->new_val);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment