summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-09-14 09:12:47 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-09-14 09:12:47 +0300
commit348eaf425216fe927424220b1820da0e383cfa52 (patch)
treefb24590627585a4aeab98bbe1b7a1f77bd8d63d5 /sql/sql_select.cc
parent474f51711b1abbba799d93a0223ef38316b78f6c (diff)
parent2bd6ccae72306547fc89199342584cd4d6e9b939 (diff)
downloadmariadb-git-348eaf425216fe927424220b1820da0e383cfa52.tar.gz
Merge bb-10.2-ext into 10.3
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 96c8f65e29e..52544130918 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1111,7 +1111,7 @@ int JOIN::optimize()
{
int res= 0;
join_optimization_state init_state= optimization_state;
- if (optimization_state == JOIN::OPTIMIZATION_IN_STAGE_2)
+ if (optimization_state == JOIN::OPTIMIZATION_PHASE_1_DONE)
res= optimize_stage2();
else
{
@@ -1123,7 +1123,7 @@ int JOIN::optimize()
res= optimize_inner();
}
if (!with_two_phase_optimization ||
- init_state == JOIN::OPTIMIZATION_IN_STAGE_2)
+ init_state == JOIN::OPTIMIZATION_PHASE_1_DONE)
{
if (!res && have_query_plan != QEP_DELETED)
build_explain();
@@ -1341,6 +1341,11 @@ JOIN::optimize_inner()
*/
if (tbl->is_materialized_derived())
{
+ JOIN *join= tbl->get_unit()->first_select()->join;
+ if (join &&
+ join->optimization_state == JOIN::OPTIMIZATION_PHASE_1_DONE &&
+ join->with_two_phase_optimization)
+ continue;
/*
Do not push conditions from where into materialized inner tables
of outer joins: this is not valid.
@@ -1535,7 +1540,7 @@ JOIN::optimize_inner()
setup_subq_exit:
with_two_phase_optimization= check_two_phase_optimization(thd);
if (with_two_phase_optimization)
- optimization_state= JOIN::OPTIMIZATION_IN_STAGE_2;
+ optimization_state= JOIN::OPTIMIZATION_PHASE_1_DONE;
else
{
if (optimize_stage2())
@@ -1556,7 +1561,7 @@ int JOIN::optimize_stage2()
goto setup_subq_exit;
if (select_lex->handle_derived(thd->lex, DT_OPTIMIZE))
- DBUG_RETURN(1);
+ DBUG_RETURN(1);
if (thd->check_killed())
DBUG_RETURN(1);
@@ -9070,12 +9075,10 @@ bool JOIN::push_splitting_cond_into_derived(THD *thd, Item *cond)
{
enum_reopt_result reopt_result= REOPT_NONE;
table_map all_table_map= 0;
- for (JOIN_TAB *tab= join_tab + const_tables;
+ for (JOIN_TAB *tab= join_tab;
tab < join_tab + top_join_tab_count; tab++)
- {
all_table_map|= tab->table->map;
- }
- reopt_result= reoptimize(cond, all_table_map, NULL);
+ reopt_result= reoptimize(cond, all_table_map & ~const_table_map, NULL);
if (reopt_result == REOPT_ERROR)
return true;
if (inject_cond_into_where(cond))