diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 03f91dc76f6..8bb895386bf 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -1074,4 +1074,12 @@ end// call mysqltest_1()// drop table t1; drop procedure mysqltest_1; +create table t1 (a int, index(a)) +partition by hash(a); +insert into t1 values (1),(2); +select * from t1 ORDER BY a DESC; +a +2 +1 +drop table t1; End of 5.1 tests diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 16ca22d9edb..04519800ff6 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -1252,4 +1252,13 @@ delimiter ;// drop table t1; drop procedure mysqltest_1; +# +# Bug 20583 Partitions: Crash using index_last +# +create table t1 (a int, index(a)) +partition by hash(a); +insert into t1 values (1),(2); +select * from t1 ORDER BY a DESC; +drop table t1; + --echo End of 5.1 tests diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 7929257d608..c0257e08537 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -3400,7 +3400,8 @@ int ha_partition::common_first_last(byte *buf) if ((error= partition_scan_set_up(buf, FALSE))) return error; - if (!m_ordered_scan_ongoing) + if (!m_ordered_scan_ongoing && + m_index_scan_type != partition_index_last) return handle_unordered_scan_next_partition(buf); return handle_ordered_index_scan(buf); }