24 #include <drizzled/session.h>
25 #include <drizzled/statement/create_index.h>
26 #include <drizzled/statement/alter_table.h>
27 #include <drizzled/plugin/storage_engine.h>
28 #include <drizzled/open_tables_state.h>
29 #include <drizzled/catalog/instance.h>
37 CreateIndex::CreateIndex(Session *in_session) :
38 CreateTable(in_session)
40 set_command(SQLCOM_CREATE_INDEX);
41 alter_info.flags.set(ALTER_ADD_INDEX);
42 lex().col_list.clear();
48 TableList *all_tables= lex().query_tables;
51 message::table::shared_ptr original_table_message;
54 first_table->getSchemaName(),
55 first_table->getTableName());
56 if (not (original_table_message= plugin::StorageEngine::getTableMessage(session(), identifier)))
58 my_error(ER_BAD_TABLE_ERROR, identifier);
72 assert(first_table == all_tables && first_table != 0);
73 if (session().inTransaction())
75 my_error(ER_TRANSACTIONAL_DDL_NOT_SUPPORTED, MYF(0));
80 if (original_table_message->type() == message::Table::STANDARD )
83 first_table->getSchemaName(),
84 first_table->getTableName());
85 create_info().default_table_charset= plugin::StorageEngine::getSchemaCollation(identifier);
87 res= alter_table(&session(),
91 *original_table_message,
100 first_table->getSchemaName(),
101 first_table->getTableName());
102 Table *table= session().open_tables.find_temporary_table(catch22);
106 first_table->getSchemaName(),
107 first_table->getTableName(),
108 table->getMutableShare()->getPath());
109 create_info().default_table_charset= plugin::StorageEngine::getSchemaCollation(identifier);
111 res= alter_table(&session(),
115 *original_table_message,
116 createTableMessage(),