79
79
/* Skip first table, which is the table we are creating */
80
TableList *create_table= session->lex->unlink_first_table(&link_to_local);
80
TableList *create_table_list= session->lex->unlink_first_table(&link_to_local);
81
81
TableList *select_tables= session->lex->query_tables;
83
drizzled::message::init(create_table_message, create_table_message.name(), create_table->getSchemaName(), create_info.db_type->getName());
83
drizzled::message::init(create_table_message, create_table_message.name(), create_table_list->getSchemaName(), create_info.db_type->getName());
85
TableIdentifier new_table_identifier(create_table->getSchemaName(),
86
create_table->getTableName(),
85
TableIdentifier new_table_identifier(create_table_list->getSchemaName(),
86
create_table_list->getTableName(),
87
87
create_table_message.type());
89
89
if (not check(new_table_identifier))
91
91
/* put tables back for PS rexecuting */
92
session->lex->link_first_table_back(create_table, link_to_local);
92
session->lex->link_first_table_back(create_table_list, link_to_local);
96
96
/* Might have been updated in create_table_precheck */
97
create_info.alias= create_table->alias;
97
create_info.alias= create_table_list->alias;
100
100
The create-select command will open and read-lock the select table
112
112
if (! (need_start_waiting= not session->wait_if_global_read_lock(0, 1)))
114
114
/* put tables back for PS rexecuting */
115
session->lex->link_first_table_back(create_table, link_to_local);
115
session->lex->link_first_table_back(create_table_list, link_to_local);
126
126
if (not lex_identified_temp_table)
128
session->lex->link_first_table_back(create_table, link_to_local);
129
create_table->setCreate(true);
128
session->lex->link_first_table_back(create_table_list, link_to_local);
129
create_table_list->setCreate(true);
132
132
if (not (res= session->openTablesLock(session->lex->query_tables)))
138
138
if (not lex_identified_temp_table)
140
140
TableList *duplicate= NULL;
141
create_table= session->lex->unlink_first_table(&link_to_local);
142
if ((duplicate= unique_table(create_table, select_tables)))
141
create_table_list= session->lex->unlink_first_table(&link_to_local);
142
if ((duplicate= unique_table(create_table_list, select_tables)))
144
my_error(ER_UPDATE_TABLE_USED, MYF(0), create_table->alias);
144
my_error(ER_UPDATE_TABLE_USED, MYF(0), create_table_list->alias);
146
146
Release the protection against the global read lock and wake
147
147
everyone, who might want to set a global read lock.
149
149
session->startWaitingGlobalReadLock();
150
150
/* put tables back for PS rexecuting */
151
session->lex->link_first_table_back(create_table, link_to_local);
151
session->lex->link_first_table_back(create_table_list, link_to_local);
158
158
select_create is currently not re-execution friendly and
159
159
needs to be created for every execution of a PS/SP.
161
if ((result= new select_create(create_table,
161
if ((result= new select_create(create_table_list,
162
162
is_if_not_exists,
164
164
create_table_message,