~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/statement/create_table.cc

  • Committer: Monty Taylor
  • Date: 2010-12-24 07:15:43 UTC
  • mto: This revision was merged to the branch mainline in revision 2029.
  • Revision ID: mordred@inaugust.com-20101224071543-ab082y5circku6v5
Renamed things prefixed mysql_ or mysqld_

Show diffs side-by-side

added added

removed removed

Lines of Context:
77
77
    }
78
78
  }
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;
82
82
 
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());
84
84
 
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());
88
88
 
89
89
  if (not check(new_table_identifier))
90
90
  {
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);
93
93
    return true;
94
94
  }
95
95
 
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;
98
98
 
99
99
  /*
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)))
113
113
  {
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);
116
116
    return true;
117
117
  }
118
118
 
125
125
 
126
126
    if (not lex_identified_temp_table)
127
127
    {
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);
130
130
    }
131
131
 
132
132
    if (not (res= session->openTablesLock(session->lex->query_tables)))
138
138
      if (not lex_identified_temp_table)
139
139
      {
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)))
143
143
        {
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);
145
145
          /*
146
146
             Release the protection against the global read lock and wake
147
147
             everyone, who might want to set a global read lock.
148
148
           */
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);
152
152
 
153
153
          return true;
154
154
        }
158
158
         select_create is currently not re-execution friendly and
159
159
         needs to be created for every execution of a PS/SP.
160
160
       */
161
 
      if ((result= new select_create(create_table,
 
161
      if ((result= new select_create(create_table_list,
162
162
                                     is_if_not_exists,
163
163
                                     &create_info,
164
164
                                     create_table_message,
179
179
    }
180
180
    else if (not lex_identified_temp_table)
181
181
    {
182
 
      create_table= session->lex->unlink_first_table(&link_to_local);
 
182
      create_table_list= session->lex->unlink_first_table(&link_to_local);
183
183
    }
184
184
  }
185
185
  else
187
187
    /* regular create */
188
188
    if (is_create_table_like)
189
189
    {
190
 
      res= mysql_create_like_table(session, 
 
190
      res= create_like_table(session, 
191
191
                                   new_table_identifier,
192
 
                                   create_table, 
 
192
                                   create_table_list, 
193
193
                                   select_tables,
194
194
                                   create_table_message,
195
195
                                   is_if_not_exists,
205
205
        *field= alter_info.alter_proto.added_field(x);
206
206
      }
207
207
 
208
 
      res= mysql_create_table(session, 
 
208
      res= create_table(session, 
209
209
                              new_table_identifier,
210
210
                              &create_info,
211
211
                              create_table_message,