119
if (select_lex->item_list.elements) // With select
121
select_result *result;
123
select_lex->options|= SELECT_NO_UNLOCK;
124
unit->set_limit(select_lex);
126
if (not lex_identified_temp_table)
128
session->lex->link_first_table_back(create_table_list, link_to_local);
129
create_table_list->setCreate(true);
132
if (not (res= session->openTablesLock(session->lex->query_tables)))
135
Is table which we are changing used somewhere in other parts
113
bool res= executeInner(new_table_identifier);
116
Release the protection against the global read lock and wake
117
everyone, who might want to set a global read lock.
119
session->startWaitingGlobalReadLock();
124
bool statement::CreateTable::executeInner(TableIdentifier::const_reference new_table_identifier)
127
Select_Lex *select_lex= &session->lex->select_lex;
128
TableList *select_tables= session->lex->query_tables;
131
if (select_lex->item_list.elements) // With select
133
Select_Lex_Unit *unit= &session->lex->unit;
134
select_result *result;
136
select_lex->options|= SELECT_NO_UNLOCK;
137
unit->set_limit(select_lex);
138
139
if (not lex_identified_temp_table)
140
TableList *duplicate= NULL;
141
session->lex->link_first_table_back(create_table_list, link_to_local);
142
create_table_list->setCreate(true);
145
if (not (res= session->openTablesLock(session->lex->query_tables)))
148
Is table which we are changing used somewhere in other parts
151
if (not lex_identified_temp_table)
153
TableList *duplicate= NULL;
154
create_table_list= session->lex->unlink_first_table(&link_to_local);
156
if ((duplicate= unique_table(create_table_list, select_tables)))
158
my_error(ER_UPDATE_TABLE_USED, MYF(0), create_table_list->alias);
159
/* put tables back for PS rexecuting */
160
session->lex->link_first_table_back(create_table_list, link_to_local);
168
select_create is currently not re-execution friendly and
169
needs to be created for every execution of a PS/SP.
171
if ((result= new select_create(create_table_list,
174
create_table_message,
176
select_lex->item_list,
177
session->lex->duplicates,
178
session->lex->ignore,
180
new_table_identifier)))
183
CREATE from SELECT give its Select_Lex for SELECT,
184
and item_list belong to SELECT
186
res= handle_select(session, session->lex, result, 0);
190
else if (not lex_identified_temp_table)
141
192
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_list->alias);
146
Release the protection against the global read lock and wake
147
everyone, who might want to set a global read lock.
149
session->startWaitingGlobalReadLock();
150
/* put tables back for PS rexecuting */
151
session->lex->link_first_table_back(create_table_list, link_to_local);
158
select_create is currently not re-execution friendly and
159
needs to be created for every execution of a PS/SP.
161
if ((result= new select_create(create_table_list,
164
create_table_message,
166
select_lex->item_list,
167
session->lex->duplicates,
168
session->lex->ignore,
170
new_table_identifier)))
173
CREATE from SELECT give its Select_Lex for SELECT,
174
and item_list belong to SELECT
176
res= handle_select(session, session->lex, result, 0);
180
else if (not lex_identified_temp_table)
182
create_table_list= session->lex->unlink_first_table(&link_to_local);
188
if (is_create_table_like)
190
res= create_like_table(session,
191
new_table_identifier,
194
create_table_message,
201
for (int32_t x= 0; x < alter_info.alter_proto.added_field_size(); x++)
203
message::Table::Field *field= create_table_message.add_field();
205
*field= alter_info.alter_proto.added_field(x);
208
res= create_table(session,
209
new_table_identifier,
211
create_table_message,
225
Release the protection against the global read lock and wake
226
everyone, who might want to set a global read lock.
228
session->startWaitingGlobalReadLock();
198
if (is_create_table_like)
200
res= create_like_table(session,
201
new_table_identifier,
204
create_table_message,
211
for (int32_t x= 0; x < alter_info.alter_proto.added_field_size(); x++)
213
message::Table::Field *field= create_table_message.add_field();
215
*field= alter_info.alter_proto.added_field(x);
218
res= create_table(session,
219
new_table_identifier,
221
create_table_message,