Commit ab6bc424 authored by Sergey Petrunya's avatar Sergey Petrunya

MWL#90: Address review feedback part #11.

parent 4aefacb6
...@@ -7823,6 +7823,12 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) ...@@ -7823,6 +7823,12 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
static uint make_join_orderinfo(JOIN *join) static uint make_join_orderinfo(JOIN *join)
{ {
/*
This function needs to be fixed to take into account that we now have SJM
nests.
*/
DBUG_ASSERT(0);
JOIN_TAB *tab; JOIN_TAB *tab;
if (join->need_tmp) if (join->need_tmp)
return join->tables; return join->tables;
...@@ -8194,6 +8200,7 @@ static ...@@ -8194,6 +8200,7 @@ static
uint check_join_cache_usage(JOIN_TAB *tab, uint check_join_cache_usage(JOIN_TAB *tab,
ulonglong options, ulonglong options,
uint no_jbuf_after, uint no_jbuf_after,
uint table_index,
JOIN_TAB *prev_tab) JOIN_TAB *prev_tab)
{ {
COST_VECT cost; COST_VECT cost;
...@@ -8209,7 +8216,6 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -8209,7 +8216,6 @@ uint check_join_cache_usage(JOIN_TAB *tab,
!(join->allowed_join_cache_types & JOIN_CACHE_HASHED_BIT); !(join->allowed_join_cache_types & JOIN_CACHE_HASHED_BIT);
bool no_bka_cache= bool no_bka_cache=
!(join->allowed_join_cache_types & JOIN_CACHE_BKA_BIT); !(join->allowed_join_cache_types & JOIN_CACHE_BKA_BIT);
uint i= tab - join->join_tab;
join->return_tab= 0; join->return_tab= 0;
...@@ -8217,8 +8223,7 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -8217,8 +8223,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
Don't use join cache if @@join_cache_level==0 or this table is the first Don't use join cache if @@join_cache_level==0 or this table is the first
one join suborder (either at top level or inside a bush) one join suborder (either at top level or inside a bush)
*/ */
if (cache_level == 0 || tab == join->join_tab + join->const_tables || if (cache_level == 0 || !prev_tab)
(tab->bush_root_tab && tab->bush_root_tab->bush_children->start == tab))
return 0; return 0;
if (force_unlinked_cache && (cache_level%2 == 0)) if (force_unlinked_cache && (cache_level%2 == 0))
...@@ -8249,11 +8254,16 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -8249,11 +8254,16 @@ uint check_join_cache_usage(JOIN_TAB *tab,
} }
/* /*
Don't use join buffering if we're dictated not to by no_jbuf_after (this Don't use join buffering if we're dictated not to by no_jbuf_after
...) (This is not meaningfully used currently)
*/
if (table_index > no_jbuf_after)
goto no_join_cache;
/*
TODO: BNL join buffer should be perfectly ok with tab->bush_children.
*/ */
if ((!tab->bush_root_tab? !(i <= no_jbuf_after) : FALSE) || if (tab->loosescan_match_tab || tab->bush_children)
tab->loosescan_match_tab || tab->bush_children)
goto no_join_cache; goto no_join_cache;
for (JOIN_TAB *first_inner= tab->first_inner; first_inner; for (JOIN_TAB *first_inner= tab->first_inner; first_inner;
...@@ -8383,6 +8393,9 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -8383,6 +8393,9 @@ uint check_join_cache_usage(JOIN_TAB *tab,
join join whose tables are to be checked join join whose tables are to be checked
options options of the join options options of the join
no_jbuf_after don't use join buffering after table with this number no_jbuf_after don't use join buffering after table with this number
(The tables are assumed to be numbered in
first_linear_tab(join, WITHOUT_CONST_TABLES),
next_linear_tab(join, WITH_CONST_TABLES) order).
DESCRIPTION DESCRIPTION
For each table after the first non-constant table the function checks For each table after the first non-constant table the function checks
...@@ -8407,6 +8420,7 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options, ...@@ -8407,6 +8420,7 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options,
uint no_jbuf_after) uint no_jbuf_after)
{ {
JOIN_TAB *tab; JOIN_TAB *tab;
JOIN_TAB *prev_tab;
for (tab= first_linear_tab(join, WITHOUT_CONST_TABLES); for (tab= first_linear_tab(join, WITHOUT_CONST_TABLES);
tab; tab;
...@@ -8415,17 +8429,24 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options, ...@@ -8415,17 +8429,24 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options,
tab->used_join_cache_level= join->max_allowed_join_cache_level; tab->used_join_cache_level= join->max_allowed_join_cache_level;
} }
uint idx= join->const_tables;
for (tab= first_linear_tab(join, WITHOUT_CONST_TABLES); for (tab= first_linear_tab(join, WITHOUT_CONST_TABLES);
tab; tab;
tab= next_linear_tab(join, tab, WITH_BUSH_ROOTS)) tab= next_linear_tab(join, tab, WITH_BUSH_ROOTS))
{ {
JOIN_TAB *prev_tab;
restart: restart:
tab->icp_other_tables_ok= TRUE; tab->icp_other_tables_ok= TRUE;
tab->idx_cond_fact_out= TRUE; tab->idx_cond_fact_out= TRUE;
/*
Check if we have a preceding join_tab, as something that will feed us
records that we could buffer. We don't have it, if
- this is the first non-const table in the join order,
- this is the first table inside an SJM nest.
*/
prev_tab= tab - 1; prev_tab= tab - 1;
if ((tab->bush_root_tab && tab->bush_root_tab->bush_children->start == tab)) if (tab == join->join_tab + join->const_tables ||
(tab->bush_root_tab && tab->bush_root_tab->bush_children->start == tab))
prev_tab= NULL; prev_tab= NULL;
switch (tab->type) { switch (tab->type) {
...@@ -8437,6 +8458,7 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options, ...@@ -8437,6 +8458,7 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options,
case JT_ALL: case JT_ALL:
tab->used_join_cache_level= check_join_cache_usage(tab, options, tab->used_join_cache_level= check_join_cache_usage(tab, options,
no_jbuf_after, no_jbuf_after,
idx,
prev_tab); prev_tab);
tab->use_join_cache= test(tab->used_join_cache_level); tab->use_join_cache= test(tab->used_join_cache_level);
/* /*
...@@ -8453,6 +8475,8 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options, ...@@ -8453,6 +8475,8 @@ void check_join_cache_usage_for_tables(JOIN *join, ulonglong options,
default: default:
tab->used_join_cache_level= 0; tab->used_join_cache_level= 0;
} }
if (!tab->bush_children)
idx++;
} }
} }
......
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