From: Mattias Jonsson Date: July 9 2010 12:59pm Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3475) List-Archive: http://lists.mysql.com/commits/113255 Message-Id: <201007091301.o69CHAqI010514@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7478650284981837753==" --===============7478650284981837753== 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 3475 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. --===============7478650284981837753== 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\ # xgan11um91pgpgmq # target_branch: file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ # testament_sha1: a9e8b6eab95f5778b2d96056302d5e69f56db276 # timestamp: 2010-07-09 14:59:55 +0200 # source_branch: file:///Users/mattiasj/mysql-bzr/b49161-51-bugteam/ # base_revision_id: davi.arnaut@stripped\ # 875eay5x9exlzpk5 # # Begin bundle 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 3KjFnvDPH/8XckU4UJDtdU9R --===============7478650284981837753==--