Commit a1ac083f authored by Marko Mäkelä's avatar Marko Mäkelä

Bug#54686 "field->col->mtype == type" assertion error at row/row0sel.c

ha_innobase::index_read(), ha_innobase::records_in_range(): Check that
the index is useable before invoking row_sel_convert_mysql_key_to_innobase().

This fix is based on a suggestion by Yasufumi Kinoshita.
parent a6c1d93e
...@@ -5379,6 +5379,9 @@ ha_innobase::index_read( ...@@ -5379,6 +5379,9 @@ ha_innobase::index_read(
prebuilt->index_usable = FALSE; prebuilt->index_usable = FALSE;
DBUG_RETURN(HA_ERR_CRASHED); DBUG_RETURN(HA_ERR_CRASHED);
} }
if (UNIV_UNLIKELY(!prebuilt->index_usable)) {
DBUG_RETURN(HA_ERR_TABLE_DEF_CHANGED);
}
/* Note that if the index for which the search template is built is not /* Note that if the index for which the search template is built is not
necessarily prebuilt->index, but can also be the clustered index */ necessarily prebuilt->index, but can also be the clustered index */
...@@ -7221,6 +7224,10 @@ ha_innobase::records_in_range( ...@@ -7221,6 +7224,10 @@ ha_innobase::records_in_range(
n_rows = HA_POS_ERROR; n_rows = HA_POS_ERROR;
goto func_exit; goto func_exit;
} }
if (UNIV_UNLIKELY(!row_merge_is_index_usable(prebuilt->trx, index))) {
n_rows = HA_ERR_TABLE_DEF_CHANGED;
goto func_exit;
}
heap = mem_heap_create(2 * (key->key_parts * sizeof(dfield_t) heap = mem_heap_create(2 * (key->key_parts * sizeof(dfield_t)
+ sizeof(dtuple_t))); + sizeof(dtuple_t)));
......
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