From 7b5654f3e987dcbaa8cb0fdfd3486ffb3fc4f8e3 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Wed, 20 Nov 2019 00:33:32 +0400 Subject: [PATCH] MDEV-14667 Assertion `used_parts > 0' failed in ha_partition::init_record_priority_queue. Do not fail fi all the partitions were pruned out. --- mysql-test/main/partition_pruning.result | 10 ++++++++++ mysql-test/main/partition_pruning.test | 13 +++++++++++++ sql/ha_partition.cc | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/partition_pruning.result b/mysql-test/main/partition_pruning.result index 00bd24101d6..6a97541f2db 100644 --- a/mysql-test/main/partition_pruning.result +++ b/mysql-test/main/partition_pruning.result @@ -3485,6 +3485,16 @@ a b c d 1 a b 1 drop table t1; # +# MDEV-14667 Assertion `used_parts > 0' failed in ha_partition::init_record_priority_queue. +# +create table t1 (a int); +insert into t1 values (1),(2); +create table t2 (b int, c int, key(c,b)) partition by hash(b) partitions 2; +insert into t2 values (3,4),(5,6); +select straight_join * from t1, t2 where b != NULL; +a b c +drop table t1, t2; +# # MDEV-17493: Partition pruning doesn't work for nested outer joins # create table t0(a int); diff --git a/mysql-test/main/partition_pruning.test b/mysql-test/main/partition_pruning.test index 1770f028f31..6b861621e0d 100644 --- a/mysql-test/main/partition_pruning.test +++ b/mysql-test/main/partition_pruning.test @@ -1536,6 +1536,19 @@ select * from t1 where (a = 1 AND b < 'd' AND (c = 'b' OR (c = 'c' AND d = 1)) O (a = 1 AND b >= 'a' AND (c = 'c' OR (c = 'd' AND d = 2)))); drop table t1; +--echo # +--echo # MDEV-14667 Assertion `used_parts > 0' failed in ha_partition::init_record_priority_queue. +--echo # + +create table t1 (a int); +insert into t1 values (1),(2); + +create table t2 (b int, c int, key(c,b)) partition by hash(b) partitions 2; +insert into t2 values (3,4),(5,6); + +select straight_join * from t1, t2 where b != NULL; +drop table t1, t2; + --echo # --echo # MDEV-17493: Partition pruning doesn't work for nested outer joins --echo # diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 09664deb458..232111d5a98 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -5265,7 +5265,10 @@ bool ha_partition::init_record_priority_queue() { size_t alloc_len; uint used_parts= bitmap_bits_set(&m_part_info->read_partitions); - DBUG_ASSERT(used_parts > 0); + + if (used_parts == 0) /* Do nothing since no records expected. */ + DBUG_RETURN(false); + /* Allocate record buffer for each used partition. */ m_priority_queue_rec_len= m_rec_length + PARTITION_BYTES_IN_POS; if (!m_using_extended_keys)