1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Bug#56862 Execution of a query that uses index merge returns a wrong result

In case of low memory sort buffer QUICK_INDEX_MERGE_SELECT creates
temporary file where is stores row ids which meet QUICK_SELECT ranges
except of clustered pk range, clustered range is processed separately.
In init_read_record we check if temporary file is used and choose
appropriate record access method. It does not take into account that
temporary file contains partial result in case of QUICK_INDEX_MERGE_SELECT
with clustered pk range.
The fix is always to use rr_quick if QUICK_INDEX_MERGE_SELECT
with clustered pk range is used.


mysql-test/suite/innodb/r/innodb_mysql.result:
  test case
mysql-test/suite/innodb/t/innodb_mysql.test:
  test case
mysql-test/suite/innodb_plugin/r/innodb_mysql.result:
  test case
mysql-test/suite/innodb_plugin/t/innodb_mysql.test:
  test case
sql/opt_range.h:
  added new method
sql/records.cc:
  The fix is always to use rr_quick if QUICK_INDEX_MERGE_SELECT
  with clustered pk range is used.
This commit is contained in:
Sergey Glukhov
2010-11-23 13:18:47 +03:00
parent 412f11418a
commit cf0cc723aa
6 changed files with 175 additions and 0 deletions

View File

@ -265,6 +265,7 @@ public:
virtual bool reverse_sorted() = 0;
virtual bool unique_key_range() { return false; }
virtual bool clustered_pk_range() { return false; }
enum {
QS_TYPE_RANGE = 0,
@ -533,6 +534,8 @@ public:
THD *thd;
int read_keys_and_merge();
bool clustered_pk_range() { return test(pk_quick_select); }
/* used to get rows collected in Unique */
READ_RECORD read_record;
};