diff options
author | Sergei Petrunia <sergey@mariadb.com> | 2023-05-05 11:16:23 +0300 |
---|---|---|
committer | Sergei Petrunia <sergey@mariadb.com> | 2023-05-05 11:16:23 +0300 |
commit | 2594da7a33580bf03590502a011679c878487d0c (patch) | |
tree | 17e66bbb18d268b33055612ba00144d187e2fa88 /sql/sql_select.cc | |
parent | 7973ffde0fede83049a1d611c379b9ee61dea9c9 (diff) | |
download | mariadb-git-2594da7a33580bf03590502a011679c878487d0c.tar.gz |
MDEV-31194: Server crash or assertion failure with join_cache_level=4mariadb-10.4.29
The problem, introduced in patch for MDEV-26301:
When check_join_cache_usage() decides not to use join buffer, it must
adjust the access method accordingly. For BNL-H joins this means switching
from pseudo-"ref access"(with index=MAX_KEY) to some other access method.
Failing to do this will cause assertions down the line when code that is
not aware of BNL-H will try to initialize index use for ref access with
index=MAX_KEY.
The fix is to follow the regular code path to disable the join buffer for
the join_tab ("goto no_join_cache") instead of just returning from
check_join_cache_usage().
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5e2ce06add7..bfe17bb43e1 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12873,7 +12873,7 @@ uint check_join_cache_usage(JOIN_TAB *tab, join->return_tab= 0; if (tab->no_forced_join_cache) - return 0; + goto no_join_cache; /* Don't use join cache if @@join_cache_level==0 or this table is the first |