From: Jorgen Loland Date: December 17 2010 10:40am Subject: bzr commit into mysql-5.5-bugteam branch (jorgen.loland:3209) Bug#58985 List-Archive: http://lists.mysql.com/commits/127167 X-Bug: 58985 Message-Id: <20101217104036.0D76F76B@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1518245122021769264==" --===============1518245122021769264== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/jl208045/mysql/mysql-5.5-bugteam/ based on revid:jorgen.loland@stripped 3209 Jorgen Loland 2010-12-17 BUG#58985: Assertion tab->quick->index != 64 failed in make_join_select() in sql_select.cc Follow-up patch. Add sanity check for quick select when it is decided that it should be used. @ sql/opt_range.h Add is_valid() to QUICK_SELECT* @ sql/sql_select.cc Add sanity check for quick select when it is decided that it should be used. modified: sql/opt_range.h sql/sql_select.cc === modified file 'sql/opt_range.h' --- a/sql/opt_range.h 2010-11-23 10:47:35 +0000 +++ b/sql/opt_range.h 2010-12-17 10:40:33 +0000 @@ -336,6 +336,13 @@ public: */ virtual bool is_keys_used(const MY_BITMAP *fields); + /** + Simple sanity check that the quick select has been set up + correctly. Function is overridden by quick selects that merge + indices. + */ + virtual bool is_valid() { return index != MAX_KEY; }; + /* rowid of last row retrieved by this quick select. This is used only when doing ROR-index_merge selects @@ -556,6 +563,22 @@ public: bool clustered_pk_range() { return test(pk_quick_select); } + virtual bool is_valid() + { + List_iterator_fast it(quick_selects); + QUICK_RANGE_SELECT *quick; + bool valid= true; + while ((quick= it++)) + { + if (!quick->is_valid()) + { + valid= false; + break; + } + } + return valid; + } + /* used to get rows collected in Unique */ READ_RECORD read_record; }; @@ -608,6 +631,22 @@ public: */ List quick_selects; + virtual bool is_valid() + { + List_iterator_fast it(quick_selects); + QUICK_RANGE_SELECT *quick; + bool valid= true; + while ((quick= it++)) + { + if (!quick->is_valid()) + { + valid= false; + break; + } + } + return valid; + } + /* Merged quick select that uses Clustered PK, if there is one. This quick select is not used for row retrieval, it is used for row retrieval. @@ -658,6 +697,22 @@ public: List quick_selects; /* Merged quick selects */ + virtual bool is_valid() + { + List_iterator_fast it(quick_selects); + QUICK_SELECT_I *quick; + bool valid= true; + while ((quick= it++)) + { + if (!quick->is_valid()) + { + valid= false; + break; + } + } + return valid; + } + QUEUE queue; /* Priority queue for merge operation */ MEM_ROOT alloc; /* Memory pool for this and merged quick selects data. */ === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-12-17 09:02:24 +0000 +++ b/sql/sql_select.cc 2010-12-17 10:40:33 +0000 @@ -6504,6 +6504,7 @@ make_join_select(JOIN *join,SQL_SELECT * ((tab->type != JT_CONST && tab->type != JT_REF) || (uint)tab->ref.key == tab->quick->index)) { + DBUG_ASSERT(tab->quick->is_valid()); sel->quick=tab->quick; // Use value from get_quick_... sel->quick_keys.clear_all(); sel->needed_reg.clear_all(); --===============1518245122021769264== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jorgen.loland@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jorgen.loland@stripped\ # x5rzkr1sfyh9qhjd # target_branch: file:///export/home/jl208045/mysql/mysql-5.5-bugteam/ # testament_sha1: c1315c49f04cf0f0bfb266740e34fd6b32bfd483 # timestamp: 2010-12-17 11:40:36 +0100 # base_revision_id: jorgen.loland@stripped\ # bw6y486ip401upg3 # # Begin bundle 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 3BXg --===============1518245122021769264==--