summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/partition.result8
-rw-r--r--mysql-test/t/partition.test9
-rw-r--r--sql/ha_partition.cc3
3 files changed, 19 insertions, 1 deletions
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result
index 47ee2be6f51..95f55a25166 100644
--- a/mysql-test/r/partition.result
+++ b/mysql-test/r/partition.result
@@ -1057,4 +1057,12 @@ alter table t1 add partition (partition p2 values in (3));
alter table t1 drop partition p2;
use test;
drop database db99;
+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 7ef5f66cd9e..ed0ec57d30f 100644
--- a/mysql-test/t/partition.test
+++ b/mysql-test/t/partition.test
@@ -1223,4 +1223,13 @@ alter table t1 drop partition p2;
use test;
drop database db99;
+#
+# 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);
}