summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc19
1 files changed, 12 insertions, 7 deletions
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)