From: Mattias Jonsson Date: July 9 2010 1:03pm Subject: bzr commit into mysql-trunk branch (mattias.jonsson:3109) List-Archive: http://lists.mysql.com/commits/113257 Message-Id: <201007091305.o69BIC87016486@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4392336909541769705==" --===============4392336909541769705== 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-trunk-merge/ based on revid:georgi.kodinov@stripped 3109 Mattias Jonsson 2010-07-09 [merge] merge modified: config/ac-macros/maintainer.m4 sql/ha_partition.cc sql/ha_partition.h sql/handler.h === modified file 'config/ac-macros/maintainer.m4' --- a/config/ac-macros/maintainer.m4 2010-07-09 11:37:51 +0000 +++ b/config/ac-macros/maintainer.m4 2010-07-09 12:51:21 +0000 @@ -27,7 +27,6 @@ AC_DEFUN([MY_MAINTAINER_MODE_WARNINGS], AC_MSG_CHECKING([whether to use C warning options ${C_WARNINGS}]) AC_LANG_PUSH(C) CFLAGS="$CFLAGS ${C_WARNINGS}" - AC_LANG_WERROR AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [myac_c_warning_flags=yes], [myac_c_warning_flags=no]) AC_LANG_POP() @@ -41,7 +40,6 @@ AC_DEFUN([MY_MAINTAINER_MODE_WARNINGS], AC_MSG_CHECKING([whether to use C++ warning options ${CXX_WARNINGS}]) AC_LANG_PUSH(C++) CXXFLAGS="$CXXFLAGS ${CXX_WARNINGS}" - AC_LANG_WERROR AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [myac_cxx_warning_flags=yes], [myac_cxx_warning_flags=no]) AC_LANG_POP() === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2010-06-17 13:31:51 +0000 +++ b/sql/ha_partition.cc 2010-07-09 13:02:27 +0000 @@ -4371,6 +4371,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 2010-05-24 12:51:59 +0000 +++ b/sql/ha_partition.h 2010-07-09 13:02:27 +0000 @@ -36,8 +36,7 @@ enum partition_keywords HA_CAN_FULLTEXT | \ HA_DUPLICATE_POS | \ HA_CAN_SQL_HANDLER | \ - HA_CAN_INSERT_DELAYED | \ - HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) + HA_CAN_INSERT_DELAYED) class ha_partition :public handler { private: @@ -431,6 +430,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. @@ -749,9 +757,6 @@ public: HA_PRIMARY_KEY_REQUIRED_FOR_POSITION: Does the storage engine need a PK for position? - Used with hidden primary key in InnoDB. - Hidden primary keys cannot be supported by partitioning, since the - partitioning expressions columns must be a part of the primary key. (InnoDB) HA_FILE_BASED is always set for partition handler since we use a === modified file 'sql/handler.h' --- a/sql/handler.h 2010-06-11 01:30:49 +0000 +++ b/sql/handler.h 2010-07-09 13:02:27 +0000 @@ -100,7 +100,10 @@ #define HA_PRIMARY_KEY_IN_READ_INDEX (1 << 15) /* If HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is set, it means that to position() - uses a primary key. Without primary key, we can't call position(). + uses a primary key given by the record argument. + Without primary key, we can't call position(). + If not set, the position is returned as the current rows position + regardless of what argument is given. */ #define HA_PRIMARY_KEY_REQUIRED_FOR_POSITION (1 << 16) #define HA_CAN_RTREEKEYS (1 << 17) @@ -1537,10 +1540,9 @@ public: virtual int rnd_next(uchar *buf)=0; virtual int rnd_pos(uchar * buf, uchar *pos)=0; /** - One has to use this method when to find - random position by record as the plain - position() call doesn't work for some - handlers for random position. + This function only works for handlers having + HA_PRIMARY_KEY_REQUIRED_FOR_POSITION set. + It will return the row with the PK given in the record argument. */ virtual int rnd_pos_by_record(uchar *record) { @@ -1558,6 +1560,12 @@ public: { return HA_ERR_WRONG_COMMAND; } virtual ha_rows records_in_range(uint inx, key_range *min_key, key_range *max_key) { return (ha_rows) 10; } + /* + If HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is set, then it sets ref + (reference to the row, aka position, with the primary key given in + the record). + Otherwise it set ref to the current row. + */ virtual void position(const uchar *record)=0; virtual int info(uint)=0; // see my_base.h for full description virtual void get_dynamic_partition_info(PARTITION_STATS *stat_info, --===============4392336909541769705== 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\ # sacfqdhjep840za2 # target_branch: file:///Users/mattiasj/mysql-bzr/topush-trunk-merge/ # testament_sha1: 691cb8a72cff2aebe9186220081c47efa6bee5b8 # timestamp: 2010-07-09 15:04:02 +0200 # source_branch: file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ # base_revision_id: georgi.kodinov@stripped\ # z0rx8z077p1jn7t5 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWW7LvEcADZV/gFVQAAJ9//// ///+6r////pgFijcTrpW0+b2vndXXcAbYD0HoGh6HdenD2+773z7vdbOu9u53j1a7Gqp7LNm21sC rWxlleTqQkkmg1NNNTaam0noNMkMpk1P1CPFMjQZGhoB6jQaASSABNCGQhETTNEZT0QDIDRgjQyD I2k9QNAI0SKep7UammgADQeoGjINAaAAAeoARJCag1JslPASntMUnqNPJD1D1PUNAZAxADT1BpoI pI0aITyT0mlPyanoyKemij8oPUG1J6mCYQzUBkaYmEUhTCZNR6CYqfqehMTNRtEp+qfqT8ojIA0B oAA2pKIPYMIP+3BD3aBsML8Nl2528UL3bKNkSUfPi8PDkcONP2mRlHU+A/9RXfrVpjjDH+uf/uev bg/W6RP6YzPWgNxbx6XfGEns74ffRqxk7eZ3h4Z2b99e2+2162trg9XDMg9tu/GXeKPJOhN2krLs 2GEqsQafZ13Os9wrsXk9zYsBNGmZ+FSIgsE0bNpT7quDGUgrisHWMNZ1g8YyPmxrumeT/Xx/T5+f o6/EEXyApFISCH+yg+LQrxd/Lpf2+erBH7YngBzJmElDIMkJJCBIjCGn0I9nR5ezkybBhtkjGSVn qqbM6N9kdUVuLYKnEgRBpKLs0URSlKvK0pLO8VUVrCoZKZBTZ4V6yrqynZINQKmknJtRLEdjg4mq lYxHK57nDYyhGgdhNlNO3vWKayDzpshNcj5fa/J+/J5z8498G1aZ5b589AxtdxqrSgN0omLfyyGy OFgy2jKt4S7ZNEeYCL8sXMyjF2mPDOjT7PtFvWbz9TrV7Eba6VfTvviFyy4GoQk55q3BMyxSuiqn CUxuyymBrmFFcK3A0hkpT6qA0ztAhsXzWBmMTjI5rwk18qRK6pFwQ05TfXqWuYZ+LR0udN2fOWXq cLtTw0NQCVGJFWI8uhZo+0OgkAg65JzSlDW77CB1QYumc3a1Kg9aJtEXFQds7RYpX4nksIQmniKs c2OdBf4unf17+px1VHaFC632bmBmOfpQai+q+pzRoOf7tW38Z6uI/N8okYrjHXSQL8jCQazR3M9l FZ4XO+COkbnZQe745ZZTzert6oZ8kL9GXM/Hwl2McO7ysiutl3MGaefh43OW+tz+vJ2dg+Y6lFc8 mbTjJB5Pv5Ox6/cfDOvD2JITyATiQKlerwR5kOsSLu+0uQs/1xwaJ7rmxPBGiMnmFNI6x3HlmXAe dj6LCPQWqCWpn4JbJo66t2d7fH73P8nY3xfTZ/1bz2z1cIDFODAMCMjEIKHHjbzG2j7JJIsAxqQA mFoxNxajuH3e3tYUy2ZsA1UpQlKiqkoqqe3yndWtSs9c5zorxtfkFcQkXEZA2QJwga9q+i5bp2Xt lF4S/9ejKU1ZIiQSgshqr2aKxRL1mhGY3FTGkoJcxbaY3FFqRNFJSk5oxg/SkoxLDH4elVEEdaSp a9nTWCuptoqIqRQhXkPk1GWYBUZImTRqIAHAvRQw5KRlv6ZxEiqmhYKOTzQz0HkH6X0MkQgMDFIr v+xncj24tKn5OpxExLquWUXmtG+MMJOmKaEcRqJWlbN2NqEPihlGdOzHrHPRqKJbC68Mxrosa+SP 3nODzXmfGw0G4dE5q211KzZ4K5N45h3rZ6bNaFSN8CQ5DLHoy5c+7abdWieUeYawhgVPEVlJFUk2 leJRHyeM+B0u6xLpcSIKzQRkY/ALgXfTqbAxTV2XIT6ppabN3IWyVKdi+77zwVsnw4Bzj0yknTT3 mh2PmpzkkY9Up7kumBaJMLuI2LeCcmXcRR52swxxIgesxI2KYivWK20PCUNkpk/BvekOXug53jQj EiVjUHqDlwtEBZDCQj2pCr3Kw+RXMCYi2FMepmkVG01MR1ODX1S2dBC9p7wLRKp2zcBtqyB7MOTk wyW0SCFZQkac6Y6IV7dBFTbgeRwyiJmi6kzQ3jub9JUozbke8JDK8PR2FRySJUyPiETjp1xZ5Cpu MdU6YGYDWmKNNCPov3deFlyHyE5pasJcjs16cYnfXWjRihddWj0wJ7UIE6I3rLoRhwhRvMuoxMDp MXeqOcYY9OEKeEKTltWl+9R8CVHndnwfrkaBV/nY9oWRHJOzrvaKQ836YPM62LPwaampfraBdA+x 6FIxOVq89Y7bve7Qyxgyg9UGlbpG/V3Vt643HPhs6HX8KaiTHy1cApiMUqOLcE6c+O0tdanpOCxh OllZfbRx2UeBFrEaGE5eUfJGkEwW1HTUPLy03jmfatFmQ0F1lG+pqSfsmeyrp3KikhhR6HxN2AIx 5C7sdTX3QIJid+bOUIFyDXppkZY0PXFaxENxlIQdZyO0Nle6KNzo4nUtQ1HRLw71sqd7JJvK4OS5 NNcK1Qa6J1pOWpC4r7YID1SfrplM3n/JznaIVjCiSIZM38HKDJmm9WtGkm1tSCnYf2X4E7IdTal2 zjB1juzR22uLYf1H0PZpdzfDnyTR+Rvus892mnbd90uiUKP2i8OVMkPHwkdDt06ong0ZBE5tLkif BLf3IPqR1338u69uraWObVlpzlrAG0maj5N1G7Buz4ei171Ndd9beJ4079SRb3WkbT2eYc47sb1u 7SHfYcWPjLImwlTGpns/Us6xG71iZUdKb7ll7Ci9gClT0O1Dpli2mjrKZzze+pQn2tvk+hHzFUJ6 FygmhZxV5vCGzD8thnTjJHVUENKKXECqEg8bTL0nTcvKqSyPLqXzoiPIW3QZTiquDaKZryxVQlHx V7VeP1KoMk5NXjkodsZe3Qy/dauultbg7MP6ONTQIi0bexw5lfJIJEBxpZ0CIxDyutWD6a7CBExH GRI/OhfDyvTZeC0nrohS4K408t6Og9zdtuO0RFm1CRImOs00lCl+MFikDYuhSJEbHUiNkd84jNTI Qq71jUYltlkXd86Cg+GNq+vmZmIuiSJQXYTbP1POpxSG5xtMnvwbdMrSvldNT213bTd17Rgz4Pmw UhZFxhTHmgvEL4c8KF0KlUFDgtnijWKFI7FKamUuTYpSetFkjLZOSd1IluCU6tVJqQNiJrAjpbTH SRFsjci6/Rq8UehM83IXOxuVNx+nTdi445tAbfugtP1PjPhbzXG4nCU/exHJfaaPSMaFbUE8oJnJ MOHhwKgnCgn+wWE5rVcqlLkTABMjBTQKHaMoA0uZ22N0SSHRvE4UY3kFdbv38I+9iM2nEAZH2mf0 HHFFPjrH8Ny+D0sCEYHb5qsJViQhCRgJyPwD5Cfj3J5yl/wdrmEesYRD34JlepkJ+jyet/5/nBPq K7r/5Uz7eIecJGJAIJIMhoG71G73Z+gP0aT/nUamyaaJDTb3T4zh8jy/NScNSk0+Wz9IXp+cRgP4 bfaGv/bxdWDX7LIfXRFUYRT/qR08weju1RHfzDdyKIcjRsEvFCY99ykfWV2C2yMI6jh8c6Oaoh+g sxgWQwrInSMwMoeqIhpjYaCJEfsmtVAloi0aGxr/iH2ogY88T2j1lcMsYQyXr9z/0yXVTm7zNshK jRIrMiaYJzStZpYdfv4r5GAcJE5RKQutfei2AcfqsRIkjiTNyJ6VBMzkXqYbaWggCoRaNwy8O33d 8lXfuAAPF6yAt5Xp3uZK3H5Pzn+GIH5SRsXPD4fl1PEanXBeJSY2/dKo2fzDkal6bEJZc+eusbPj 06T2ONNRlqLS0nKSYRVJ60gDv3zsNu+DcBu1HKTccHcby38tDQVlpdBqB5tImSp1X1uTdhV/W/7e EqW8BIYtGk+qOxZOZ0DOpAurEJB0abdvLWKFHR8wNSmhYQggBL3FPlzHWiyAHK4uXlDprv7yWC47 vDbRPkS6AFairEsZ4ycFRlQdtd27nIzAvjHc1KulOgcVItknVB8mKkWGHmPlhp8p1Pvc+/oIpSHz DPy+numur+s0GlHSGMvQv1P39dNqxtH8v4W6KH9iRUEN5f5AibketHIYHG2R43bk+vb3+CjjiXA4 se8REk6EpRoHUEmLQTWnUuyUmYkGNpnS5Rq5DrSvlHUqYqMDSdiPaOo2BkazqtrpHNhQ2Yiau7QM snOGDPdgULRlIEDPqUU1mcYn9++r7q2mAX9lgbFJ6H3CBmDpVSN+7TTvExp0nbk6u95+8d5jU3yo WDcVm4378DqMGq6ovpoJmrW2F+itOmNNCTkgTfOu+5n4od2bgSHmthSOnNCx9eRCmlwkxHnNjfxM X9x2ESCwy5iCCJE8ShPTbhp1nZruspvaU0IHP7BOUAr6htevrSivDYk8kaaRulJf3pPE9s973+S3 h6qAwpPXDjnjb4OBe3v+N9LrIbtOffpaFcI9bQZCQcRPJdbz895Y7n3I1K/d8uIW5v2hiGI6dO75 GlD2MLb3xH56DdCpZCoVPRXL1+FoYmWNxHcR3ym4vlDAyCFk7FZ4ql3IdhpX5or0krA36UOwzRoV tyMKMCweceWZUeXC+I1R6n16oWudtwLbYVEjzQNBPzlvW8YaoY1qcawWam+nddtlFep9nMbkEhYb sirkoZ3fhWJ9VXTVbLiyizFslsTxNE6KKT3CeIs6ekNOOPRBGqdVe4tr4G4mhBAkBYIRIU7/z8E2 i7hFCkGhiOhkjUqeiMT7+CpDpy+/zFfq9+KQgLkuiMRnmE08khpYOXzysLSAXjkgeHFDMI+lB6IX MMsA/Tt4TgmSkSpLb5J4invvzHeVQVL4dSPpnTMhlcZjv5dVpTQjBBcHgVnueBmLWzAz0anyRUV9 IiMyhAp/GI42g250NO6e6tgDTA3tX63/P5zqLC4A9yHejJ5/tEsPQT6pBsU4wJOISCPLchlRtD4H hWGXgyW4dgks6zG8md1Ev7xL9DCdrIYlKHoSRJ09S7ZcmQQIDAcfiJ3o1jbdiGxdbvQksIzxRzOI UufOm5DSjZnEuXvNkJuWUIHEkMV0ScwA6DFPWQSEkSyCyxk1M1nU1h09300neje1A1wDqva52sEd yM7aFfeJ7K8uS5deXqBOvIhq7WaO4eM1mlDoqFAzde+86bOkY2j2Ctchkum0tvG/9vlseLsANeEZ bdkkQ5uld3wWxrQLh2wOst7FSFmh2x0+kEorwefZtMdm41bpaGY327yUXPV3PpHgORz0p0yQCDBG DGAESQ6DhymF5eR79lgLNZL7Ly8ggAIjl4jzhokTEg12b88sBNyOE3tQA5hLvU9R0e/IeCG495fJ G21tiHWH5TWvLGDK4Fvx/kvg90K9XOmVSw+HYu7lE2pspjHfBkEiFkA7gWYyHSjAPAgPPnB292j1 vnym/qLRIYIsUAkg2T3hq1cwBustvbTnu0TWCNGPaMh9qqTzDZzpxybl8ULqECiczS7LJw+17qKl dlSoejr9nsnQ57QDjwbo6GjDrGFMKGFUFFMKGFBGvhSBwTypXijuo7AlU+ECVA7a8gzD7/Qh6bEP RCrTeXDmAL3yyQ8HFYDzJ73KtPlam7AiEgvz1RDJNalFFRvImtGjesQCa0BESKll5r/wpoRlZ2tT vLERLkc4mqQuBVhAGATlXKFbkQKVljGShswgscHMNGTNNtBsGLDIGiFiKFU0iIRLZMhSIVLIJCm+ mLwXHMbw+yCId02kH4pB8yHuq9RxrCxGDhilOO3QkTzgg6DFMJCWQqM0AIWkz5xkUaFGE+5NyAGQ sXI8rIzjZIOhQCipU3Zh9bADxqELJB9satmtMI3V6vjFBwP6ZBnEG9Gg6AA+t6SnsqdIk2HNf2jI SBSOMRBB8flJtWEoQCwERkD+RgAYLRzj5odq9y86614oXBpNl6d1aEnkGPZoH4e1sMQIA2IcSTM9 okpo9QlEDvTBDn4ifUeuD0pqZMolBEQAYMDsR4SrRU4DDZEb1118Uabw8ZeZw4FCxth2D8I0AaPJ A3jlrf55crrRrLLIANiG6iP3Ewar0K+O67MOkfRZh6QmhG5xQjxMBAmMKBjO61TJ0uQamAeY7yWT FfVbb6IcLBUnhPHWjbMW9d7bzfrZAC2mQ7hNwnk2j7MGx4+9HzQrqIFO67JIEiwlxOhxvhObaCzl TQTyBxiSEgyEjPStooHk2+oT1EGiQSCRJkyuTOeImCF4TDJTkjWKBGYkSG5c5Kdipf4okjTTVfqi JXnbzW3ZwTpYF8TBa2db3MVJfBf26G5hZZPS9vbkC8bUZVCQoV/AEknAoGe9WTZX8ZWDG8MkjMRv G1EzjnWgV0VOqHR4RKr3oVjS0UDiPDPUD9cNuz0NVUqRkAkEcqBy7MXsD88BzZWpUziEYIyydHAT XTNApcOAoETydHBJhHFYb1Eg8nLQZ/08VxUa9qLkm9oyNVhIXa8fNyi0JxelWi9YJZtiETBqHWGM MnFvW2Tcm5DTIXBPESENib3S869No7rb9/m+3mGu4iLeoLxC1jzLhc0UqBfC5dnXNrc6OYCpHXbB bIxY2iQVxKAMhLfM7RKCcHNR+lDnWa+vXLOvmJJDoTZsuEoIwvdiJpEwHIc8nfO2k6ogYisYWB6d /Sm9CYHQViaklGtHnmt68Q59S+34u49btdydYmnzHAhHMJzN4mA4IbG6F9EbjX7Th4dhEyf/xdyR ThQkG7LvEcA= --===============4392336909541769705==--