diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-11-20 14:11:54 +0800 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-11-20 14:11:54 +0800 |
commit | 1c9240633792ecce562358d86cd8d2c18b94ae32 (patch) | |
tree | 0940c908260775decbabb3db78acfeef0fbe53ed | |
parent | 589a1235b64866c7bbe85da2a6f6bf19ee8282fe (diff) | |
parent | aa3d28ac34322940c2ac59f74e50b450d2cff531 (diff) | |
download | mariadb-git-1c9240633792ecce562358d86cd8d2c18b94ae32.tar.gz |
Merge 10.3 into 10.4
-rw-r--r-- | mysql-test/main/partition_pruning.result | 10 | ||||
-rw-r--r-- | mysql-test/main/partition_pruning.test | 13 | ||||
-rw-r--r-- | sql/ha_partition.cc | 5 | ||||
-rw-r--r-- | storage/innobase/handler/handler0alter.cc | 8 |
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); - } } |