diff options
author | Jorgen Loland <jorgen.loland@oracle.com> | 2010-12-17 13:52:39 +0100 |
---|---|---|
committer | Jorgen Loland <jorgen.loland@oracle.com> | 2010-12-17 13:52:39 +0100 |
commit | 883a36340b1ffad3c35f914243a209ba118b7702 (patch) | |
tree | e5a777732d34ed659c419abe89f5f393b0822314 /sql/opt_range.h | |
parent | a3b0aefd19b97554940e24a49b85bdab91f5b683 (diff) | |
download | mariadb-git-883a36340b1ffad3c35f914243a209ba118b7702.tar.gz |
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.
Diffstat (limited to 'sql/opt_range.h')
-rw-r--r-- | sql/opt_range.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/sql/opt_range.h b/sql/opt_range.h index 6da4d1c2776..caff3c622b8 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -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<QUICK_RANGE_SELECT> 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_RANGE_SELECT> quick_selects; + virtual bool is_valid() + { + List_iterator_fast<QUICK_RANGE_SELECT> 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_SELECT_I> quick_selects; /* Merged quick selects */ + virtual bool is_valid() + { + List_iterator_fast<QUICK_SELECT_I> 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. */ |