diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/handler.cc | 5 | ||||
-rw-r--r-- | sql/sql_table.cc | 19 | ||||
-rw-r--r-- | sql/table.cc | 8 |
3 files changed, 15 insertions, 17 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 47cf6aab19f..beff80795fd 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -6495,9 +6495,8 @@ static int check_duplicate_long_entry_key(TABLE *table, handler *h, uchar *new_r int result, error= 0; KEY *key_info= table->key_info + key_no; hash_field= key_info->key_part->field; - DBUG_ASSERT((key_info->flags & HA_NULL_PART_KEY && - key_info->key_length == HA_HASH_KEY_LENGTH_WITH_NULL) - || key_info->key_length == HA_HASH_KEY_LENGTH_WITHOUT_NULL); + DBUG_ASSERT(key_info->flags & HA_NULL_PART_KEY && + key_info->key_length == HA_HASH_KEY_LENGTH_WITH_NULL); uchar ptr[HA_HASH_KEY_LENGTH_WITH_NULL]; if (hash_field->is_real_null()) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 5cb836f6bd0..96bb7b20f57 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4187,13 +4187,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, hash_fld->offset= record_offset; hash_fld->charset= create_info->default_table_charset; record_offset+= hash_fld->pack_length; - if (key_info->flags & HA_NULL_PART_KEY) - null_fields++; - else - { - hash_fld->flags|= NOT_NULL_FLAG; - hash_fld->pack_flag&= ~FIELDFLAG_MAYBE_NULL; - } + key_info->flags|= HA_NULL_PART_KEY; + null_fields++; } if (validate_comment_length(thd, &key->key_create_info.comment, INDEX_COMMENT_MAXLEN, @@ -9197,6 +9192,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db, uint order_num, ORDER *order, bool ignore) { DBUG_ENTER("mysql_alter_table"); + bool long_unique_table= false; /* Check if we attempt to alter mysql.slow_log or @@ -9804,8 +9800,15 @@ do_continue:; /* Remember that we have not created table in storage engine yet. */ bool no_ha_table= true; + for(uint i= 0; i < key_count; i++) + if (key_info[i].algorithm == HA_KEY_ALG_LONG_HASH) + { + long_unique_table= true; + break; + } - if (alter_info->requested_algorithm != Alter_info::ALTER_TABLE_ALGORITHM_COPY) + if (alter_info->requested_algorithm != Alter_info::ALTER_TABLE_ALGORITHM_COPY && + !long_unique_table) { Alter_inplace_info ha_alter_info(create_info, alter_info, key_info, key_count, diff --git a/sql/table.cc b/sql/table.cc index 13f4e200e2f..ad640553bcb 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -824,7 +824,7 @@ static bool create_key_infos(const uchar *strpos, const uchar *frm_image_end, } if (keyinfo->algorithm == HA_KEY_ALG_LONG_HASH) { - keyinfo->key_length= HA_HASH_KEY_LENGTH_WITHOUT_NULL; + keyinfo->key_length= HA_HASH_KEY_LENGTH_WITH_NULL; //Storing key hash key_part++; } @@ -1218,11 +1218,7 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, field->vcol_info->expr= hash_item; key->user_defined_key_parts= key->ext_key_parts= key->usable_key_parts= 1; key->key_part+= parts; - - if (key->flags & HA_NULL_PART_KEY) - key->key_length= HA_HASH_KEY_LENGTH_WITH_NULL; - else - key->key_length= HA_HASH_KEY_LENGTH_WITHOUT_NULL; + key->key_length= HA_HASH_KEY_LENGTH_WITH_NULL; *(vfield_ptr++)= *field_ptr; } |