~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/table.cc

  • Committer: Brian Aker
  • Date: 2009-04-29 00:32:11 UTC
  • mto: This revision was merged to the branch mainline in revision 1001.
  • Revision ID: brian@gaz-20090429003211-nnomdlvzv4hb15jt
More refactoring back to TableShare object.

Show diffs side-by-side

added added

removed removed

Lines of Context:
166
166
}
167
167
 
168
168
 
169
 
/*
170
 
  Free table share and memory used by it
171
 
 
172
 
  SYNOPSIS
173
 
    free_table_share()
174
 
    share               Table share
175
 
 
176
 
  NOTES
177
 
    share->mutex must be locked when we come here if it's not a temp table
178
 
*/
179
 
 
180
 
void free_table_share(TableShare *share)
181
 
{
182
 
  MEM_ROOT mem_root;
183
 
  assert(share->ref_count == 0);
184
 
 
185
 
  /*
186
 
    If someone is waiting for this to be deleted, inform it about this.
187
 
    Don't do a delete until we know that no one is refering to this anymore.
188
 
  */
189
 
  if (share->tmp_table == NO_TMP_TABLE)
190
 
  {
191
 
    /* share->mutex is locked in release_table_share() */
192
 
    while (share->waiting_on_cond)
193
 
    {
194
 
      pthread_cond_broadcast(&share->cond);
195
 
      pthread_cond_wait(&share->cond, &share->mutex);
196
 
    }
197
 
    /* No thread refers to this anymore */
198
 
    pthread_mutex_unlock(&share->mutex);
199
 
    pthread_mutex_destroy(&share->mutex);
200
 
    pthread_cond_destroy(&share->cond);
201
 
  }
202
 
  hash_free(&share->name_hash);
203
 
 
204
 
  share->storage_engine= NULL;
205
 
 
206
 
  /* We must copy mem_root from share because share is allocated through it */
207
 
  memcpy(&mem_root, &share->mem_root, sizeof(mem_root));
208
 
  free_root(&mem_root, MYF(0));                 // Free's share
209
 
  return;
210
 
}
211
 
 
212
169
enum_field_types proto_field_type_to_drizzle_type(uint32_t proto_field_type)
213
170
{
214
171
  enum_field_types field_type;
1281
1238
  open_table_def()
1282
1239
  session               Thread handler
1283
1240
  share         Fill this with table definition
1284
 
  db_flags      Bit mask of the following flags: OPEN_VIEW
1285
1241
 
1286
1242
  NOTES
1287
1243
    This function is called when the table definition is not cached in
1299
1255
   6    Unknown .frm version
1300
1256
*/
1301
1257
 
1302
 
int open_table_def(Session *session, TableShare *share, uint32_t)
 
1258
int open_table_def(Session *session, TableShare *share)
1303
1259
{
1304
1260
  int error;
1305
1261
  bool error_given;
1640
1596
    if (s->tmp_table == NO_TMP_TABLE)
1641
1597
      release_table_share(s, RELEASE_NORMAL);
1642
1598
    else
1643
 
      free_table_share(s);
 
1599
      s->free_table_share();
1644
1600
  }
1645
1601
  free_root(&mem_root, MYF(0));
1646
1602
 
3413
3369
  table->keys_in_use_for_query.init();
3414
3370
 
3415
3371
  table->setShare(share);
3416
 
  share->init_tmp_table_share("", 0, tmpname, tmpname);
 
3372
  share->init(tmpname, tmpname);
3417
3373
  share->blob_field= blob_field;
3418
3374
  share->blob_ptr_size= portable_sizeof_char_ptr;
3419
3375
  share->db_low_byte_first=1;                // True for HEAP and MyISAM