summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-11-20 14:11:54 +0800
committerMarko Mäkelä <marko.makela@mariadb.com>2019-11-20 14:11:54 +0800
commit1c9240633792ecce562358d86cd8d2c18b94ae32 (patch)
tree0940c908260775decbabb3db78acfeef0fbe53ed
parent589a1235b64866c7bbe85da2a6f6bf19ee8282fe (diff)
parentaa3d28ac34322940c2ac59f74e50b450d2cff531 (diff)
downloadmariadb-git-1c9240633792ecce562358d86cd8d2c18b94ae32.tar.gz
Merge 10.3 into 10.4
-rw-r--r--mysql-test/main/partition_pruning.result10
-rw-r--r--mysql-test/main/partition_pruning.test13
-rw-r--r--sql/ha_partition.cc5
-rw-r--r--storage/innobase/handler/handler0alter.cc8
4 files changed, 34 insertions, 2 deletions
diff --git a/mysql-test/main/partition_pruning.result b/mysql-test/main/partition_pruning.result
index 15767556f37..f8ae65fbcea 100644
--- a/mysql-test/main/partition_pruning.result
+++ b/mysql-test/main/partition_pruning.result
@@ -3487,6 +3487,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 aea61a941f7..d59f52be313 100644
--- a/mysql-test/main/partition_pruning.test
+++ b/mysql-test/main/partition_pruning.test
@@ -1539,6 +1539,19 @@ select * from t1 where (a = 1 AND b < 'd' AND (c = 'b' OR (c = 'c' AND d = 1)) O
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 93c6bf1af5b..9ca6408007e 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -5267,7 +5267,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)
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index 93fb60ba530..7bb226b9a2e 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -5671,10 +5671,17 @@ static bool innobase_instant_try(
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_LONG_BLOB:
+ variable_length:
/* Store the empty string for 'core'
variable-length NOT NULL columns. */
dfield_set_data(d, field_ref_zero, 0);
break;
+ case MYSQL_TYPE_STRING:
+ if (col->mbminlen != col->mbmaxlen
+ && user_table->not_redundant()) {
+ goto variable_length;
+ }
+ /* fall through */
default:
/* For fixed-length NOT NULL 'core' columns,
get a dummy default value from SQL. Note that
@@ -5691,7 +5698,6 @@ static bool innobase_instant_try(
: NULL, true, (*af)->ptr, len,
dict_table_is_comp(user_table));
ut_ad(new_field->field->pack_length() == len);
-
}
}