summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/handler.cc5
-rw-r--r--sql/sql_table.cc19
-rw-r--r--sql/table.cc8
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;
}