diff options
author | unknown <bell@sanja.is.com.ua> | 2003-09-18 10:50:53 +0300 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2003-09-18 10:50:53 +0300 |
commit | f354f3364dd10b03c61ffed3dc34237e76805136 (patch) | |
tree | 3c1aaf705b5b18baa8245be81aa1261f6d495c44 /sql | |
parent | 4535f6897f5ee132d086e0bd98bbc3a1fdaea54a (diff) | |
parent | cf24f5acd76d0d374c167e942e500678a5d5e81e (diff) | |
download | mariadb-git-f354f3364dd10b03c61ffed3dc34237e76805136.tar.gz |
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-union-4.1
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_parse.cc | 4 | ||||
-rw-r--r-- | sql/sql_union.cc | 32 |
2 files changed, 26 insertions, 10 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 370ccd3c38b..42f8bb16bcd 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1723,6 +1723,10 @@ mysql_execute_command(THD *thd) break; // Error message is given } + /* + In case of single SELECT unit->global_parameters points on first SELECT + TODO: move counters to SELECT_LEX + */ unit->offset_limit_cnt= (ha_rows) unit->global_parameters->offset_limit; unit->select_limit_cnt= (ha_rows) (unit->global_parameters->select_limit+ unit->global_parameters->offset_limit); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 2d7bee54da8..ae596625bf7 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -262,8 +262,23 @@ int st_select_lex_unit::exec() res= sl->join->reinit(); else { - offset_limit_cnt= sl->offset_limit; - select_limit_cnt= sl->select_limit+sl->offset_limit; + if (sl != global_parameters) + { + offset_limit_cnt= sl->offset_limit; + select_limit_cnt= sl->select_limit+sl->offset_limit; + } + else + { + offset_limit_cnt= 0; + /* + We can't use LIMIT at this stage if we are using ORDER BY for the + whole query + */ + if (sl->order_list.first) + select_limit_cnt= HA_POS_ERROR; + else + select_limit_cnt= sl->select_limit+sl->offset_limit; + } if (select_limit_cnt < sl->select_limit) select_limit_cnt= HA_POS_ERROR; // no limit @@ -352,14 +367,11 @@ int st_select_lex_unit::exec() { ulong options= thd->options; thd->lex.current_select= fake_select_lex; - if (select_cursor->braces) - { - 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 - } + 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) |