From 19c91b79203ebaa1f5ac557bf3684d1f48c0a90e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 May 2004 19:15:26 +0300 Subject: Fix for a bug involving UNION's and SET SQL_SELECT_LIMIT mysql-test/r/union.result: Results for a test case for bug involving UNION's and SET SQL_SELECT_LIMIT mysql-test/t/union.test: Test case for bug involving UNION's and SET SQL_SELECT_LIMIT sql/sql_union.cc: Patch for a bug involving UNION's and SET SQL_SELECT_LIMIT --- sql/sql_union.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'sql') diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 468bdab9119..df20f04a67e 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -377,12 +377,21 @@ int st_select_lex_unit::exec() if (!thd->is_fatal_error) // Check if EOM { ulong options_tmp= thd->options; + /* + We have to take into the account a case when: + SET SQL_SELECT_LIMIT was set. + In mysql_new_select() function this value was copied to + the fake_select_lex node of the top-level unit. + Here below, we just take this value if global LIMIT was not applied + to the entire UNION. + */ + ha_rows select_limit= ((global_parameters->select_limit != HA_POS_ERROR) ? + global_parameters->select_limit : fake_select_lex->select_limit); thd->lex->current_select= fake_select_lex; offset_limit_cnt= global_parameters->offset_limit; - select_limit_cnt= global_parameters->select_limit + - global_parameters->offset_limit; + select_limit_cnt= select_limit + global_parameters->offset_limit; - if (select_limit_cnt < global_parameters->select_limit) + if (select_limit_cnt < select_limit) select_limit_cnt= HA_POS_ERROR; // no limit if (select_limit_cnt == HA_POS_ERROR) options_tmp&= ~OPTION_FOUND_ROWS; -- cgit v1.2.1