summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-11-20 13:03:34 +0800
committerMarko Mäkelä <marko.makela@mariadb.com>2019-11-20 07:06:32 +0200
commit89f487f2e26ecff3f304ec7862445064c3640c17 (patch)
tree876e5c8f5c7c77aa0ebd1ab8539a1896aa3b9996
parent7b5654f3e987dcbaa8cb0fdfd3486ffb3fc4f8e3 (diff)
downloadmariadb-git-89f487f2e26ecff3f304ec7862445064c3640c17.tar.gz
MDEV-21088 Table cannot be loaded after instant ADD/DROP COLUMN
In MariaDB Server 10.4, btr_cur_instant_init_low() assumes that all PRIMARY KEY columns that are internally variable-length will be encoded in 0 bytes in the metadata record. Sometimes, CHAR columns can be encoded as variable-length. We should not unnecessarily reserve space for a dummy string value in the metadata record.
-rw-r--r--storage/innobase/handler/handler0alter.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index bd1bd8fbb9c..ab50c327e28 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -4278,10 +4278,17 @@ innobase_add_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
+ || !dict_table_is_comp(user_table)) {
+ goto variable_length;
+ }
+ /* fall through */
default:
/* For fixed-length NOT NULL 'core' columns,
get a dummy default value from SQL. Note that