MDEV-28747 Index condition pushdown may be configured incorrectly

ha_innobase::build_template may initialize m_prebuilt->idx_cond
even if there is no valid pushed_idx_cond_keyno.
This potentially problematic piece of code was found while
working on MDEV-27366
This commit is contained in:
Oleg Smirnov 2022-06-04 10:16:15 +04:00
parent 09177eadc3
commit 5efadf8d8c

View File

@ -7718,9 +7718,12 @@ ha_innobase::build_template(
ulint num_v = 0; ulint num_v = 0;
if ((active_index != MAX_KEY if (active_index != MAX_KEY
&& active_index == pushed_idx_cond_keyno) && active_index == pushed_idx_cond_keyno) {
|| (pushed_rowid_filter && rowid_filter_is_active)) { m_prebuilt->idx_cond = this;
goto icp;
} else if (pushed_rowid_filter && rowid_filter_is_active) {
icp:
/* Push down an index condition or an end_range check. */ /* Push down an index condition or an end_range check. */
for (ulint i = 0; i < n_fields; i++) { for (ulint i = 0; i < n_fields; i++) {
const Field* field = table->field[i]; const Field* field = table->field[i];
@ -7901,9 +7904,6 @@ ha_innobase::build_template(
} }
} }
} }
if (active_index == pushed_idx_cond_keyno) {
m_prebuilt->idx_cond = this;
}
} else { } else {
no_icp: no_icp:
/* No index condition pushdown */ /* No index condition pushdown */