summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/maria/partition.result4
-rw-r--r--mysql-test/suite/maria/partition.test11
-rw-r--r--sql/ha_partition.cc4
3 files changed, 18 insertions, 1 deletions
diff --git a/mysql-test/suite/maria/partition.result b/mysql-test/suite/maria/partition.result
new file mode 100644
index 00000000000..929c6bab22e
--- /dev/null
+++ b/mysql-test/suite/maria/partition.result
@@ -0,0 +1,4 @@
+CREATE TABLE t (a INT, KEY(a)) ENGINE=Aria PARTITION BY KEY(a) PARTITIONS 2;
+SELECT * FROM t PARTITION (p1);
+a
+DROP TABLE t;
diff --git a/mysql-test/suite/maria/partition.test b/mysql-test/suite/maria/partition.test
new file mode 100644
index 00000000000..86f976a05e7
--- /dev/null
+++ b/mysql-test/suite/maria/partition.test
@@ -0,0 +1,11 @@
+--source include/have_partition.inc
+
+#
+# MDEV-19254
+# Server crashes in maria_status / ha_maria::info upon SELECT with partition
+# pruning
+#
+
+CREATE TABLE t (a INT, KEY(a)) ENGINE=Aria PARTITION BY KEY(a) PARTITIONS 2;
+SELECT * FROM t PARTITION (p1);
+DROP TABLE t;
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index aa630e83ba0..5a78249644d 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -8304,6 +8304,7 @@ int ha_partition::info(uint flag)
ulonglong max_records= 0;
uint32 i= 0;
uint32 handler_instance= 0;
+ bool handler_instance_set= 0;
file_array= m_file;
do
@@ -8316,8 +8317,9 @@ int ha_partition::info(uint flag)
!bitmap_is_set(&(m_part_info->read_partitions),
(uint) (file_array - m_file)))
file->info(HA_STATUS_VARIABLE | no_lock_flag | extra_var_flag);
- if (file->stats.records > max_records)
+ if (file->stats.records > max_records || !handler_instance_set)
{
+ handler_instance_set= 1;
max_records= file->stats.records;
handler_instance= i;
}