From 5465a1489946d428fd0133db3343d956fd4fc217 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 10:24:06 +0100 Subject: [PATCH] Fix for Bug#17888 DD: ADD INDEX causes error 756 'Index on disk column is not supported --- mysql-test/r/ndb_dd_ddl.result | 2 +- mysql-test/t/ndb_dd_ddl.test | 2 +- sql/sql_table.cc | 24 ++++++++++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/ndb_dd_ddl.result b/mysql-test/r/ndb_dd_ddl.result index cdead642134..30986526e2c 100644 --- a/mysql-test/r/ndb_dd_ddl.result +++ b/mysql-test/r/ndb_dd_ddl.result @@ -175,7 +175,7 @@ CREATE TABLE t1 (pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL) TABLESPACE ts1 STORAGE DISK ENGINE NDB; -CREATE INDEX c on t1(c); +CREATE INDEX c on t1(b, c); DROP TABLE t1; ALTER TABLESPACE ts1 DROP DATAFILE 'datafile2.dat' diff --git a/mysql-test/t/ndb_dd_ddl.test b/mysql-test/t/ndb_dd_ddl.test index dde65d4b52b..b6aa9e13936 100644 --- a/mysql-test/t/ndb_dd_ddl.test +++ b/mysql-test/t/ndb_dd_ddl.test @@ -263,7 +263,7 @@ CREATE TABLE t1 TABLESPACE ts1 STORAGE DISK ENGINE NDB; -CREATE INDEX c on t1(c); +CREATE INDEX c on t1(b, c); DROP TABLE t1; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 757321b5ccf..9513f7ba48f 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3706,6 +3706,8 @@ static uint compare_tables(TABLE *table, List *create_list, uint changes= 0, tmp; List_iterator_fast new_field_it(*create_list); create_field *new_field; + KEY_PART_INFO *key_part; + KEY_PART_INFO *end; DBUG_ENTER("compare_tables"); /* @@ -3833,9 +3835,14 @@ static uint compare_tables(TABLE *table, List *create_list, /* Key modified. Add the offset of the key to both buffers. */ index_drop_buffer[(*index_drop_count)++]= table_key - table->key_info; index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer; - field= table->field[new_key->key_part->fieldnr]; - // Mark field to be part of new key - field->add_index= 1; + 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 + field= table->field[key_part->fieldnr]; + field->add_index= 1; + } DBUG_PRINT("info", ("index changed: '%s'", table_key->name)); } /*end of for (; table_key < table_key_end;) */ @@ -3855,9 +3862,14 @@ static uint compare_tables(TABLE *table, List *create_list, { /* Key not found. Add the offset of the key to the add buffer. */ index_add_buffer[(*index_add_count)++]= new_key - key_info_buffer; - field= table->field[new_key->key_part->fieldnr]; - // Mark field to be part of new key - field->add_index= 1; + 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 + field= table->field[key_part->fieldnr]; + field->add_index= 1; + } DBUG_PRINT("info", ("index added: '%s'", new_key->name)); } }