365
365
static void fill_table_proto(drizzle::Table *table_proto,
366
366
const char *table_name,
367
367
List<Create_field> &create_fields,
368
HA_CREATE_INFO *create_info)
368
HA_CREATE_INFO *create_info,
370
372
Create_field *field_arg;
371
373
List_iterator<Create_field> it(create_fields);
505
507
if (create_info->block_size)
506
508
table_options->set_block_size(create_info->block_size);
510
for (unsigned int i= 0; i < keys; i++)
512
drizzle::Table::Index *idx;
514
idx= table_proto->add_index();
516
assert(test(key_info[i].flags & HA_USES_COMMENT) ==
517
(key_info[i].comment.length > 0));
519
idx->set_name(key_info[i].name);
521
if(is_primary_key_name(key_info[i].name))
522
idx->set_is_primary(true);
524
idx->set_is_primary(false);
526
switch(key_info[i].algorithm)
528
case HA_KEY_ALG_HASH:
529
idx->set_type(drizzle::Table::Index::HASH);
532
case HA_KEY_ALG_BTREE:
533
idx->set_type(drizzle::Table::Index::BTREE);
536
case HA_KEY_ALG_RTREE:
537
case HA_KEY_ALG_FULLTEXT:
538
case HA_KEY_ALG_UNDEF:
539
idx->set_type(drizzle::Table::Index::UNKNOWN_INDEX);
543
abort(); /* Somebody's brain broke. haven't added index type to proto */
547
if (key_info[i].flags & HA_NOSAME)
548
idx->set_is_unique(true);
550
idx->set_is_unique(false);
552
/* FIXME: block_size ? */
554
for(unsigned int j=0; j< key_info[i].key_parts; j++)
556
drizzle::Table::Index::IndexPart *idxpart;
557
drizzle::Table::Field *field;
559
idxpart= idx->add_index_part();
561
field= idxpart->mutable_field();
562
*field= table_proto->field(key_info[i].key_part[j].fieldnr);
564
idxpart->set_compare_length(key_info[i].key_part[j].length);
567
if (key_info[i].flags & HA_USES_COMMENT)
568
idx->set_comment(key_info[i].comment.str);
509
572
int rename_table_proto_file(const char *from, const char* to)
531
594
const char *table_name,
532
595
HA_CREATE_INFO *create_info,
533
596
List<Create_field> &create_fields,
534
uint32_t keys __attribute__((unused)),
540
603
string new_path(file_name);
541
604
string file_ext = ".tabledefinition";
543
fill_table_proto(&table_proto, table_name, create_fields, create_info);
606
fill_table_proto(&table_proto, table_name, create_fields, create_info,
545
609
new_path.replace(new_path.find(".frm"), file_ext.length(), file_ext );
598
662
create_info->options|= HA_CREATE_KEEP_FILES;
599
663
if (file->ha_create_handler_files(path, NULL, CHF_CREATE_FLAG, create_info))
600
664
goto err_handler;
601
if (!create_info->frm_only && ha_create_table(session, path, db, table_name,
665
if ( ha_create_table(session, path, db, table_name,
603
667
goto err_handler;