diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 20b796bb1ba..be931c56247 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -296,7 +296,7 @@ protected: select_result *result; int res; - ulong describe, found_rows_for_union; + ulong found_rows_for_union; bool prepared, // prepare phase already performed for UNION (unit) optimized, // optimize phase already performed for UNION (unit) executed, // already executed diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3decbd62a2c..091bde26b0a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -862,7 +862,8 @@ JOIN::optimize() We only need to do this when we have a simple_order or simple_group as in other cases the join is done before the sort. */ - if ((order || group_list) && join_tab[const_tables].type != JT_ALL && + if (const_tables != tables && + (order || group_list) && join_tab[const_tables].type != JT_ALL && join_tab[const_tables].type != JT_FT && (order && simple_order || group_list && simple_group)) { diff --git a/sql/sql_union.cc b/sql/sql_union.cc index de2bb4a786c..93541d66d65 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -377,11 +377,12 @@ int st_select_lex_unit::exec() offset_limit_cnt= global_parameters->offset_limit; select_limit_cnt= global_parameters->select_limit + global_parameters->offset_limit; + if (select_limit_cnt < global_parameters->select_limit) select_limit_cnt= HA_POS_ERROR; // no limit if (select_limit_cnt == HA_POS_ERROR) options&= ~OPTION_FOUND_ROWS; - else if (found_rows_for_union && !describe) + else if (found_rows_for_union && !thd->lex.describe) options|= OPTION_FOUND_ROWS; fake_select_lex->ftfunc_list= &empty_list; fake_select_lex->table_list.link_in_list((byte *)&result_table_list,