diff options
author | unknown <timour@mysql.com> | 2005-01-17 12:41:59 +0200 |
---|---|---|
committer | unknown <timour@mysql.com> | 2005-01-17 12:41:59 +0200 |
commit | f1328f1337e2ea5a5f3f6bd5c1478b8a423a2a46 (patch) | |
tree | 9211a99c6671fa4a8505581ece676e409d03809f /sql/sql_select.cc | |
parent | b25fcad4a7ee8c8b54610609dd989b1e8b9ce3c5 (diff) | |
parent | f0cf742fd3e87dbe6cfb065bb371b1cbc93c00e5 (diff) | |
download | mariadb-git-f1328f1337e2ea5a5f3f6bd5c1478b8a423a2a46.tar.gz |
Merge mysql.com:/home/timka/mysql/src/4.1-virgin
into mysql.com:/home/timka/mysql/src/4.1-bug-7331
sql/sql_select.cc:
Auto merged
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 03e322d28ee..aea7cb9ed6d 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7153,11 +7153,24 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, } else { - select->quick->file->ha_index_end(); - select->quick->index= new_ref_key; - select->quick->init(); + /* + The range optimizer constructed QUICK_RANGE for ref_key, and + we want to use instead new_ref_key as the index. We can't + just change the index of the quick select, because this may + result in an incosistent QUICK_SELECT object. Below we + create a new QUICK_SELECT from scratch so that all its + parameres are set correctly by the range optimizer. + */ + key_map new_ref_key_map; + new_ref_key_map.clear_all(); /* Force the creation of quick select */ + new_ref_key_map.set_bit(new_ref_key); /* only for new_ref_key. */ + + if (select->test_quick_select(tab->join->thd, new_ref_key_map, 0, + (tab->join->select_options & OPTION_FOUND_ROWS) ? + HA_POS_ERROR : tab->join->unit->select_limit_cnt) <= 0) + DBUG_RETURN(0); } - ref_key= new_ref_key; + ref_key= new_ref_key; } } /* Check if we get the rows in requested sorted order by using the key */ |