~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/statement/alter_table.cc

  • Committer: Brian Aker
  • Date: 2011-01-22 18:52:16 UTC
  • mfrom: (2098.4.1 catalogs)
  • Revision ID: brian@tangent.org-20110122185216-18and6vncipd7x72
Session encapsulation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
89
89
 
90
90
bool statement::AlterTable::execute()
91
91
{
92
 
  TableList *first_table= (TableList *) session->lex->select_lex.table_list.first;
93
 
  TableList *all_tables= session->lex->query_tables;
 
92
  TableList *first_table= (TableList *) getSession()->lex->select_lex.table_list.first;
 
93
  TableList *all_tables= getSession()->lex->query_tables;
94
94
  assert(first_table == all_tables && first_table != 0);
95
 
  Select_Lex *select_lex= &session->lex->select_lex;
 
95
  Select_Lex *select_lex= &getSession()->lex->select_lex;
96
96
  bool need_start_waiting= false;
97
97
 
98
98
  is_engine_set= not createTableMessage().engine().name().empty();
100
100
  if (is_engine_set)
101
101
  {
102
102
    create_info().db_type= 
103
 
      plugin::StorageEngine::findByName(*session, createTableMessage().engine().name());
 
103
      plugin::StorageEngine::findByName(*getSession(), createTableMessage().engine().name());
104
104
 
105
105
    if (create_info().db_type == NULL)
106
106
    {
117
117
  message::table::shared_ptr original_table_message;
118
118
  {
119
119
    identifier::Table identifier(first_table->getSchemaName(), first_table->getTableName());
120
 
    if (plugin::StorageEngine::getTableDefinition(*session, identifier, original_table_message) != EEXIST)
 
120
    if (plugin::StorageEngine::getTableDefinition(*getSession(), identifier, original_table_message) != EEXIST)
121
121
    {
122
122
      my_error(ER_BAD_TABLE_ERROR, identifier);
123
123
      return true;
126
126
    if (not  create_info().db_type)
127
127
    {
128
128
      create_info().db_type= 
129
 
        plugin::StorageEngine::findByName(*session, original_table_message->engine().name());
 
129
        plugin::StorageEngine::findByName(*getSession(), original_table_message->engine().name());
130
130
 
131
131
      if (not create_info().db_type)
132
132
      {
139
139
  if (not validateCreateTableOption())
140
140
    return true;
141
141
 
142
 
  if (session->inTransaction())
 
142
  if (getSession()->inTransaction())
143
143
  {
144
144
    my_error(ER_TRANSACTIONAL_DDL_NOT_SUPPORTED, MYF(0));
145
145
    return true;
146
146
  }
147
147
 
148
 
  if (not (need_start_waiting= not session->wait_if_global_read_lock(0, 1)))
 
148
  if (not (need_start_waiting= not getSession()->wait_if_global_read_lock(0, 1)))
149
149
    return true;
150
150
 
151
151
  bool res;
153
153
  {
154
154
    identifier::Table identifier(first_table->getSchemaName(), first_table->getTableName());
155
155
    identifier::Table new_identifier(select_lex->db ? select_lex->db : first_table->getSchemaName(),
156
 
                                   session->lex->name.str ? session->lex->name.str : first_table->getTableName());
 
156
                                   getSession()->lex->name.str ? getSession()->lex->name.str : first_table->getTableName());
157
157
 
158
 
    res= alter_table(session, 
 
158
    res= alter_table(getSession(), 
159
159
                     identifier,
160
160
                     new_identifier,
161
161
                     &create_info(),
165
165
                     &alter_info,
166
166
                     select_lex->order_list.elements,
167
167
                     (Order *) select_lex->order_list.first,
168
 
                     session->lex->ignore);
 
168
                     getSession()->lex->ignore);
169
169
  }
170
170
  else
171
171
  {
172
172
    identifier::Table catch22(first_table->getSchemaName(), first_table->getTableName());
173
 
    Table *table= session->find_temporary_table(catch22);
 
173
    Table *table= getSession()->find_temporary_table(catch22);
174
174
    assert(table);
175
175
    {
176
176
      identifier::Table identifier(first_table->getSchemaName(), first_table->getTableName(), table->getMutableShare()->getPath());
177
177
      identifier::Table new_identifier(select_lex->db ? select_lex->db : first_table->getSchemaName(),
178
 
                                     session->lex->name.str ? session->lex->name.str : first_table->getTableName(),
179
 
                                     table->getMutableShare()->getPath());
 
178
                                       getSession()->lex->name.str ? getSession()->lex->name.str : first_table->getTableName(),
 
179
                                       table->getMutableShare()->getPath());
180
180
 
181
 
      res= alter_table(session, 
 
181
      res= alter_table(getSession(), 
182
182
                       identifier,
183
183
                       new_identifier,
184
184
                       &create_info(),
188
188
                       &alter_info,
189
189
                       select_lex->order_list.elements,
190
190
                       (Order *) select_lex->order_list.first,
191
 
                       session->lex->ignore);
 
191
                       getSession()->lex->ignore);
192
192
    }
193
193
  }
194
194
 
196
196
     Release the protection against the global read lock and wake
197
197
     everyone, who might want to set a global read lock.
198
198
   */
199
 
  session->startWaitingGlobalReadLock();
 
199
  getSession()->startWaitingGlobalReadLock();
200
200
 
201
201
  return res;
202
202
}
243
243
  @retval false  success
244
244
*/
245
245
static bool prepare_alter_table(Session *session,
246
 
                                      Table *table,
247
 
                                      HA_CREATE_INFO *create_info,
248
 
                                      const message::Table &original_proto,
249
 
                                      message::Table &table_message,
250
 
                                      AlterInfo *alter_info)
 
246
                                Table *table,
 
247
                                HA_CREATE_INFO *create_info,
 
248
                                const message::Table &original_proto,
 
249
                                message::Table &table_message,
 
250
                                AlterInfo *alter_info)
251
251
{
252
252
  /* New column definitions are added here */
253
253
  List<CreateField> new_create_list;