151
146
void doGetTableNames(CachedDirectory &, string& , set<string>&) { };
153
148
int doDropTable(Session&, const string table_path);
149
TinaShare *findOpenTable(const string table_name);
150
void addOpenTable(const string &table_name, TinaShare *);
151
void deleteOpenTable(const string &table_name);
155
154
uint32_t max_keys() const { return 0; }
156
155
uint32_t max_key_parts() const { return 0; }
191
TinaShare *Tina::findOpenTable(const string table_name)
193
TinaMap::iterator find_iter=
194
tina_open_tables.find(table_name);
196
if (find_iter != tina_open_tables.end())
197
return (*find_iter).second;
202
void Tina::addOpenTable(const string &table_name, TinaShare *share)
204
tina_open_tables[table_name]= share;
207
void Tina::deleteOpenTable(const string &table_name)
209
tina_open_tables.erase(table_name);
192
213
int Tina::doGetTableDefinition(Session&,
193
214
const char* path,
223
244
registry.add(tina_engine);
225
246
pthread_mutex_init(&tina_mutex,MY_MUTEX_INIT_FAST);
226
(void) hash_init(&tina_open_tables,system_charset_info,32,0,0,
227
(hash_get_key) tina_get_key,0,0);
233
252
registry.remove(tina_engine);
234
253
delete tina_engine;
236
hash_free(&tina_open_tables);
237
255
pthread_mutex_destroy(&tina_mutex);
261
TinaShare::TinaShare(const char *table_name_arg)
262
: table_name(table_name_arg), use_count(0), saved_data_file_length(0),
263
update_file_opened(false), tina_write_opened(false),
264
crashed(false), rows_recorded(0), data_file_version(0)
266
thr_lock_init(&lock);
267
fn_format(data_file_name, table_name_arg, "", CSV_EXT,
268
MY_REPLACE_EXT|MY_UNPACK_FILENAME);
271
TinaShare::~TinaShare()
273
thr_lock_delete(&lock);
274
pthread_mutex_destroy(&mutex);
244
278
Simple lock controls.
246
static TINA_SHARE *get_share(const char *table_name, Table *)
280
TinaShare *ha_tina::get_share(const char *table_name)
282
pthread_mutex_lock(&tina_mutex);
284
Tina *a_tina= static_cast<Tina *>(engine);
285
share= a_tina->findOpenTable(table_name);
249
287
char meta_file_name[FN_REFLEN];
250
288
struct stat file_stat;
254
pthread_mutex_lock(&tina_mutex);
255
length=(uint) strlen(table_name);
258
291
If share is not present in the hash, create a new share and
259
292
initialize its members.
261
if (!(share=(TINA_SHARE*) hash_search(&tina_open_tables,
262
(unsigned char*) table_name,
265
if (!drizzled::memory::multi_malloc(true,
266
&share, sizeof(*share),
296
share= new TinaShare(table_name);
270
300
pthread_mutex_unlock(&tina_mutex);
275
share->table_name_length= length;
276
share->table_name= tmp_name;
277
share->crashed= false;
278
share->rows_recorded= 0;
279
share->update_file_opened= false;
280
share->tina_write_opened= false;
281
share->data_file_version= 0;
282
strcpy(share->table_name, table_name);
283
fn_format(share->data_file_name, table_name, "", CSV_EXT,
284
MY_REPLACE_EXT|MY_UNPACK_FILENAME);
285
304
fn_format(meta_file_name, table_name, "", CSM_EXT,
286
305
MY_REPLACE_EXT|MY_UNPACK_FILENAME);
288
307
if (stat(share->data_file_name, &file_stat))
309
pthread_mutex_unlock(&tina_mutex);
290
314
share->saved_data_file_length= file_stat.st_size;
292
if (my_hash_insert(&tina_open_tables, (unsigned char*) share))
294
thr_lock_init(&share->lock);
316
a_tina->addOpenTable(share->table_name, share);
295
318
pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST);
466
483
share->tina_write_opened= false;
469
hash_delete(&tina_open_tables, (unsigned char*) share);
470
thr_lock_delete(&share->lock);
471
pthread_mutex_destroy(&share->mutex);
472
free((unsigned char*) share);
486
Tina *a_tina= static_cast<Tina *>(engine);
487
a_tina->deleteOpenTable(share->table_name);
474
490
pthread_mutex_unlock(&tina_mutex);
951
967
if (!share->update_file_opened)
953
969
if ((update_temp_file=
954
my_create(fn_format(updated_fname, share->table_name,
970
my_create(fn_format(updated_fname, share->table_name.c_str(),
956
972
MY_REPLACE_EXT | MY_UNPACK_FILENAME),
957
973
0, O_RDWR | O_TRUNC, MYF(MY_WME))) < 0)
1292
1308
of the old datafile.
1294
1310
if (my_close(data_file, MYF(0)) ||
1295
my_rename(fn_format(updated_fname, share->table_name, "", CSN_EXT,
1311
my_rename(fn_format(updated_fname, share->table_name.c_str(),
1296
1313
MY_REPLACE_EXT | MY_UNPACK_FILENAME),
1297
1314
share->data_file_name, MYF(0)))