summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_select.cc4
-rw-r--r--sql/sql_union.cc19
2 files changed, 14 insertions, 9 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 647dee80188..b964db4077d 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -2650,12 +2650,12 @@ void JOIN::exec_inner()
send_records= 0;
if (!error)
{
+ /* Single select (without union) always returns 0 or 1 row */
+ thd->limit_found_rows= send_records;
join_free(); // Unlock all cursors
error= (int) result->send_eof();
}
}
- /* Single select (without union) always returns 0 or 1 row */
- thd->limit_found_rows= send_records;
thd->set_examined_row_count(0);
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 38de2d592ed..d334bc9a694 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -767,10 +767,12 @@ bool st_select_lex_unit::optimize()
we don't calculate found_rows() per union part.
Otherwise, SQL_CALC_FOUND_ROWS should be done on all sub parts.
*/
- sl->join->select_options=
- (select_limit_cnt == HA_POS_ERROR || sl->braces) ?
- sl->options & ~OPTION_FOUND_ROWS : sl->options | found_rows_for_union;
-
+ sl->join->select_options=
+ (!found_rows_for_union) ? (sl->options & ~OPTION_FOUND_ROWS) :
+ ((sl->braces) ? ((select_limit_cnt==HA_POS_ERROR) ?
+ (sl->options | found_rows_for_union) :
+ (sl->options & ~OPTION_FOUND_ROWS)) :
+ (sl->options | found_rows_for_union));
saved_error= sl->join->optimize();
}
@@ -848,9 +850,12 @@ bool st_select_lex_unit::exec()
we don't calculate found_rows() per union part.
Otherwise, SQL_CALC_FOUND_ROWS should be done on all sub parts.
*/
- sl->join->select_options=
- (select_limit_cnt == HA_POS_ERROR || sl->braces) ?
- sl->options & ~OPTION_FOUND_ROWS : sl->options | found_rows_for_union;
+ sl->join->select_options=
+ (!found_rows_for_union) ? (sl->options & ~OPTION_FOUND_ROWS) :
+ ((sl->braces) ? ((select_limit_cnt==HA_POS_ERROR) ?
+ (sl->options | found_rows_for_union) :
+ (sl->options & ~OPTION_FOUND_ROWS)) :
+ (sl->options | found_rows_for_union));
saved_error= sl->join->optimize();
}
if (!saved_error)