diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-11-20 13:03:34 +0800 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-11-20 07:06:32 +0200 |
commit | 89f487f2e26ecff3f304ec7862445064c3640c17 (patch) | |
tree | 876e5c8f5c7c77aa0ebd1ab8539a1896aa3b9996 | |
parent | 7b5654f3e987dcbaa8cb0fdfd3486ffb3fc4f8e3 (diff) | |
download | mariadb-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.cc | 7 |
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 |