summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorunknown <timour@mysql.com>2005-01-17 12:41:59 +0200
committerunknown <timour@mysql.com>2005-01-17 12:41:59 +0200
commitf1328f1337e2ea5a5f3f6bd5c1478b8a423a2a46 (patch)
tree9211a99c6671fa4a8505581ece676e409d03809f /sql/sql_select.cc
parentb25fcad4a7ee8c8b54610609dd989b1e8b9ce3c5 (diff)
parentf0cf742fd3e87dbe6cfb065bb371b1cbc93c00e5 (diff)
downloadmariadb-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.cc21
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 */