diff options
author | unknown <sergefp@mysql.com> | 2005-05-03 10:23:10 +0400 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2005-05-03 10:23:10 +0400 |
commit | f5955f4d872db92ada4574ff761bca732fe8bb41 (patch) | |
tree | 7fdbad4948a3194b69b93b90997e6f4204c0eec7 | |
parent | 4471eb92fa761aa066036d828388f36a0cc14a0a (diff) | |
parent | 58334f8360065ba62931376f98c2f267d6115a99 (diff) | |
download | mariadb-git-f5955f4d872db92ada4574ff761bca732fe8bb41.tar.gz |
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/psergey/mysql-5.0-test-valgrind
sql/sql_select.cc:
Auto merged
-rw-r--r-- | sql/opt_range.cc | 25 | ||||
-rw-r--r-- | sql/opt_range.h | 6 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
3 files changed, 25 insertions, 9 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 95fe003770b..7dfee132ea9 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -5513,14 +5513,26 @@ bool QUICK_ROR_UNION_SELECT::check_if_keys_used(List<Item> *fields) } -/**************************************************************************** - Create a QUICK RANGE based on a key - This allocates things in a new memory root, as this may be called many times - during a query. -****************************************************************************/ +/* + Create quick select from ref/ref_or_null scan. + SYNOPSIS + get_quick_select_for_ref() + thd Thread handle + table Table to access + ref ref[_or_null] scan parameters + records Estimate of number of records (needed only to construct + quick select) + NOTES + This allocates things in a new memory root, as this may be called many + times during a query. + + RETURN + Quick select that retrieves the same rows as passed ref scan + NULL on error. +*/ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, - TABLE_REF *ref) + TABLE_REF *ref, ha_rows records) { MEM_ROOT *old_root= thd->mem_root; /* The following call may change thd->mem_root */ @@ -5537,6 +5549,7 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, delete quick; goto err; } + quick->records= records; if (cp_buffer_from_ref(thd,ref) && thd->is_fatal_error || !(range= new QUICK_RANGE())) diff --git a/sql/opt_range.h b/sql/opt_range.h index 97d646cedbe..71680b5a1fc 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -281,7 +281,8 @@ protected: friend class TRP_ROR_INTERSECT; friend QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, - struct st_table_ref *ref); + struct st_table_ref *ref, + ha_rows records); friend bool get_quick_keys(struct st_qsel_param *param, QUICK_RANGE_SELECT *quick,KEY_PART *key, SEL_ARG *key_tree, @@ -709,5 +710,6 @@ public: }; QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, - struct st_table_ref *ref); + struct st_table_ref *ref, + ha_rows records); #endif diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 18172eb1f03..32624bb3305 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -11002,7 +11002,8 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, */ if (!(select->quick= (tab->type == JT_FT ? new FT_SELECT(thd, table, tab->ref.key) : - get_quick_select_for_ref(thd, table, &tab->ref)))) + get_quick_select_for_ref(thd, table, &tab->ref, + tab->found_records)))) goto err; } } |