Commit 7380a4dd authored by mskold@mysql.com's avatar mskold@mysql.com

Fix for Bug#17888 DD: ADD INDEX causes error 756 'Index on disk column is not supported

parent dd24ab56
...@@ -175,7 +175,7 @@ CREATE TABLE t1 ...@@ -175,7 +175,7 @@ CREATE TABLE t1
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL) (pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
TABLESPACE ts1 STORAGE DISK TABLESPACE ts1 STORAGE DISK
ENGINE NDB; ENGINE NDB;
CREATE INDEX c on t1(c); CREATE INDEX c on t1(b, c);
DROP TABLE t1; DROP TABLE t1;
ALTER TABLESPACE ts1 ALTER TABLESPACE ts1
DROP DATAFILE 'datafile2.dat' DROP DATAFILE 'datafile2.dat'
......
...@@ -263,7 +263,7 @@ CREATE TABLE t1 ...@@ -263,7 +263,7 @@ CREATE TABLE t1
TABLESPACE ts1 STORAGE DISK TABLESPACE ts1 STORAGE DISK
ENGINE NDB; ENGINE NDB;
CREATE INDEX c on t1(c); CREATE INDEX c on t1(b, c);
DROP TABLE t1; DROP TABLE t1;
......
...@@ -3706,6 +3706,8 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list, ...@@ -3706,6 +3706,8 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list,
uint changes= 0, tmp; uint changes= 0, tmp;
List_iterator_fast<create_field> new_field_it(*create_list); List_iterator_fast<create_field> new_field_it(*create_list);
create_field *new_field; create_field *new_field;
KEY_PART_INFO *key_part;
KEY_PART_INFO *end;
DBUG_ENTER("compare_tables"); DBUG_ENTER("compare_tables");
/* /*
...@@ -3833,9 +3835,14 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list, ...@@ -3833,9 +3835,14 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list,
/* Key modified. Add the offset of the key to both buffers. */ /* Key modified. Add the offset of the key to both buffers. */
index_drop_buffer[(*index_drop_count)++]= table_key - table->key_info; index_drop_buffer[(*index_drop_count)++]= table_key - table->key_info;
index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer; index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer;
field= table->field[new_key->key_part->fieldnr]; key_part= new_key->key_part;
end= key_part + new_key->key_parts;
for(; key_part != end; key_part++)
{
// Mark field to be part of new key // Mark field to be part of new key
field= table->field[key_part->fieldnr];
field->add_index= 1; field->add_index= 1;
}
DBUG_PRINT("info", ("index changed: '%s'", table_key->name)); DBUG_PRINT("info", ("index changed: '%s'", table_key->name));
} }
/*end of for (; table_key < table_key_end;) */ /*end of for (; table_key < table_key_end;) */
...@@ -3855,9 +3862,14 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list, ...@@ -3855,9 +3862,14 @@ static uint compare_tables(TABLE *table, List<create_field> *create_list,
{ {
/* Key not found. Add the offset of the key to the add buffer. */ /* Key not found. Add the offset of the key to the add buffer. */
index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer; index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer;
field= table->field[new_key->key_part->fieldnr]; key_part= new_key->key_part;
end= key_part + new_key->key_parts;
for(; key_part != end; key_part++)
{
// Mark field to be part of new key // Mark field to be part of new key
field= table->field[key_part->fieldnr];
field->add_index= 1; field->add_index= 1;
}
DBUG_PRINT("info", ("index added: '%s'", new_key->name)); DBUG_PRINT("info", ("index added: '%s'", new_key->name));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment