From cf0374854b09e9e634964efef91325d2e61f3938 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 14 Jun 2006 11:08:36 +0200 Subject: [PATCH] Added flag to detect renaming of fields (not supported as fast alter table for ndbcluster) --- include/mysql_com.h | 1 + sql/ha_ndbcluster.cc | 4 ++-- sql/sql_table.cc | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/mysql_com.h b/include/mysql_com.h index 623aaf43783..c65f5944747 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -99,6 +99,7 @@ enum enum_server_command #define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ #define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ #define FIELD_IN_ADD_INDEX (1<< 20) /* Intern: Field used in ADD INDEX */ +#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ #define REFRESH_GRANT 1 /* Refresh grant tables */ #define REFRESH_LOG 2 /* Start on new log file */ diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index b3ff91cb823..e07c696d46e 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -9833,8 +9833,8 @@ bool ha_ndbcluster::check_if_incompatible_data(HA_CREATE_INFO *info, for (i= 0; i < table->s->fields; i++) { Field *field= table->field[i]; - const NDBCOL *col= tab->getColumn(field->field_name); - if (!col) + const NDBCOL *col= tab->getColumn(i); + if (field->flags & FIELD_IS_RENAMED) { DBUG_PRINT("info", ("Field has been renamed, copy table")); DBUG_RETURN(COMPATIBLE_DATA_NO); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index e9c89b4983d..c0db7120b86 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4744,6 +4744,11 @@ static uint compare_tables(TABLE *table, List *create_list, create_info->row_type != ROW_TYPE_FIXED) create_info->table_options|= HA_OPTION_PACK_RECORD; + /* Check if field was renamed */ + if (my_strcasecmp(system_charset_info, + field->field_name, + new_field->field_name)) + field->flags|= FIELD_IS_RENAMED; /* Evaluate changes bitmap and send to check_if_incompatible_data() */ if (!(tmp= field->is_equal(new_field))) DBUG_RETURN(ALTER_TABLE_DATA_CHANGED);