From 0771110266ff5c04216af4bf1243c65f8c67ccf4 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 30 Jan 2025 10:25:18 +0100 Subject: [PATCH] MDEV-33658 1/2 FULLTEXT and SPATIAL keys are not "too long" max_key_length applies only to PRIMARY/UNIQUE/MULTIPLE keys, but not to FULLTEXT/SPATIAL/VECTOR keys. this fixes main.partition_geometries test followup for ecaedbe299fe --- sql/sql_table.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index b119ba0dfd9..81438d4583a 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2944,7 +2944,7 @@ my_bool init_key_part_spec(THD *thd, Alter_info *alter_info, my_error(ER_WRONG_KEY_COLUMN, MYF(0), file->table_type(), field_name.str); DBUG_RETURN(TRUE); } - if (key_part_length > max_key_part_length && key.type != Key::FULLTEXT) + if (key_part_length > max_key_part_length) { if (key.type == Key::MULTIPLE) { @@ -2956,7 +2956,7 @@ my_bool init_key_part_spec(THD *thd, Alter_info *alter_info, /* Align key length to multibyte char boundary */ key_part_length-= key_part_length % column->charset->mbmaxlen; } - else if (key.type != Key::UNIQUE) + else if (key.type == Key::PRIMARY) { key_part_length= MY_MIN(max_key_length, max_key_part_length); my_error(ER_TOO_LONG_KEY, MYF(0), key_part_length); @@ -3023,14 +3023,15 @@ my_bool init_key_info(THD *thd, Alter_info *alter_info, DBUG_RETURN(TRUE); key.length+= kp.length; - if (key.length > max_key_length && key.type == Key::UNIQUE) - is_hash_field_needed= true; // for case "a BLOB UNIQUE" - - if (key.length > max_key_length && key.type != Key::FULLTEXT && - !is_hash_field_needed) + if (key.length > max_key_length) { - my_error(ER_TOO_LONG_KEY, MYF(0), max_key_length); - DBUG_RETURN(TRUE); + if (key.type == Key::UNIQUE) + is_hash_field_needed= true; // for case "a BLOB UNIQUE" + else if (key.type <= Key::MULTIPLE) + { + my_error(ER_TOO_LONG_KEY, MYF(0), max_key_length); + DBUG_RETURN(TRUE); + } } KEY_CREATE_INFO *key_cinfo= &key.key_create_info;