mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-6879: Dereference of NULL primary_file->table in DsMrr_impl::get_disk_sweep_mrr_cost()
(Attempt #2) - Don't attempt to use BKA for materialized derived tables. The table is neither filled nor fully opened yet, so attempt to call handler->multi_range_read_info() causes crash.
This commit is contained in:
@ -10549,6 +10549,19 @@ uint check_join_cache_usage(JOIN_TAB *tab,
|
||||
cache_level--;
|
||||
}
|
||||
|
||||
/*
|
||||
Don't use BKA for materialized tables. We could actually have a
|
||||
meaningful use of BKA when linked join buffers are used.
|
||||
|
||||
The problem is, the temp.table is not filled (actually not even opened
|
||||
properly) yet, and this doesn't let us call
|
||||
handler->multi_range_read_info(). It is possible to come up with
|
||||
estimates, etc. without acessing the table, but it seems not to worth the
|
||||
effort now.
|
||||
*/
|
||||
if (tab->table->pos_in_table_list->is_materialized_derived())
|
||||
no_bka_cache= true;
|
||||
|
||||
/*
|
||||
Don't use join buffering if we're dictated not to by no_jbuf_after
|
||||
(This is not meaningfully used currently)
|
||||
@ -10615,7 +10628,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
|
||||
if (tab->ref.is_access_triggered())
|
||||
goto no_join_cache;
|
||||
|
||||
if (!tab->is_ref_for_hash_join())
|
||||
if (!tab->is_ref_for_hash_join() && !no_bka_cache)
|
||||
{
|
||||
flags= HA_MRR_NO_NULL_ENDPOINTS | HA_MRR_SINGLE_POINT;
|
||||
if (tab->table->covering_keys.is_set(tab->ref.key))
|
||||
|
Reference in New Issue
Block a user