From: Mattias Jonsson Date: July 9 2010 12:12pm Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3473) List-Archive: http://lists.mysql.com/commits/113238 Message-Id: <201007091215.o68Lf8ih016843@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3547483902921227407==" --===============3547483902921227407== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ based on revid:davi.arnaut@stripped 3473 Mattias Jonsson 2010-07-09 [merge] merge modified: sql/ha_partition.cc sql/ha_partition.h === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2010-05-25 13:41:00 +0000 +++ b/sql/ha_partition.cc 2010-07-08 23:09:31 +0000 @@ -4220,6 +4220,58 @@ int ha_partition::index_read_last_map(uc /* + Optimization of the default implementation to take advantage of dynamic + partition pruning. +*/ +int ha_partition::index_read_idx_map(uchar *buf, uint index, + const uchar *key, + key_part_map keypart_map, + enum ha_rkey_function find_flag) +{ + int error= HA_ERR_KEY_NOT_FOUND; + DBUG_ENTER("ha_partition::index_read_idx_map"); + + if (find_flag == HA_READ_KEY_EXACT) + { + uint part; + m_start_key.key= key; + m_start_key.keypart_map= keypart_map; + m_start_key.flag= find_flag; + m_start_key.length= calculate_key_len(table, index, m_start_key.key, + m_start_key.keypart_map); + + get_partition_set(table, buf, index, &m_start_key, &m_part_spec); + + /* How can it be more than one partition with the current use? */ + DBUG_ASSERT(m_part_spec.start_part == m_part_spec.end_part); + + for (part= m_part_spec.start_part; part <= m_part_spec.end_part; part++) + { + if (bitmap_is_set(&(m_part_info->used_partitions), part)) + { + error= m_file[part]->index_read_idx_map(buf, index, key, + keypart_map, find_flag); + if (error != HA_ERR_KEY_NOT_FOUND && + error != HA_ERR_END_OF_FILE) + break; + } + } + } + else + { + /* + If not only used with READ_EXACT, we should investigate if possible + to optimize for other find_flag's as well. + */ + DBUG_ASSERT(0); + /* fall back on the default implementation */ + error= handler::index_read_idx_map(buf, index, key, keypart_map, find_flag); + } + DBUG_RETURN(error); +} + + +/* Read next record in a forward index scan SYNOPSIS === modified file 'sql/ha_partition.h' --- a/sql/ha_partition.h 2009-11-17 19:02:16 +0000 +++ b/sql/ha_partition.h 2010-07-08 23:09:31 +0000 @@ -448,6 +448,15 @@ public: virtual int index_init(uint idx, bool sorted); virtual int index_end(); + /** + @breif + Positions an index cursor to the index specified in the hanlde. Fetches the + row if available. If the key value is null, begin at first key of the + index. + */ + virtual int index_read_idx_map(uchar *buf, uint index, const uchar *key, + key_part_map keypart_map, + enum ha_rkey_function find_flag); /* These methods are used to jump to next or previous entry in the index scan. There are also methods to jump to first and last entry. --===============3547483902921227407== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # x6srbt2k8lvy8hu5 # target_branch: file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ # testament_sha1: ba72f8d411553dbb596779bc97b627aab5bbb4b7 # timestamp: 2010-07-09 14:13:10 +0200 # source_branch: file:///Users/mattiasj/mysql-bzr/b49161-51-bugteam/ # base_revision_id: davi.arnaut@stripped\ # q3g9zrsud5gurjf9 # # Begin bundle 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 +LuSKcKEgzgcxKA= --===============3547483902921227407==--