summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorSergei Petrunia <sergey@mariadb.com>2023-05-05 11:16:23 +0300
committerSergei Petrunia <sergey@mariadb.com>2023-05-05 11:16:23 +0300
commit2594da7a33580bf03590502a011679c878487d0c (patch)
tree17e66bbb18d268b33055612ba00144d187e2fa88 /sql/sql_select.cc
parent7973ffde0fede83049a1d611c379b9ee61dea9c9 (diff)
downloadmariadb-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.cc2
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