diff options
-rw-r--r-- | mysql-test/suite/maria/partition.result | 4 | ||||
-rw-r--r-- | mysql-test/suite/maria/partition.test | 11 | ||||
-rw-r--r-- | sql/ha_partition.cc | 4 |
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; } |