~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/unireg.cc

  • Committer: Brian Aker
  • Date: 2008-11-21 23:53:09 UTC
  • mfrom: (590.1.8 drizzle-nofrm)
  • Revision ID: brian@tangent.org-20081121235309-77pu95n2pboadtos
Merge in Stewart's work

Show diffs side-by-side

added added

removed removed

Lines of Context:
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,
 
369
                             uint32_t keys,
 
370
                             KEY *key_info)
369
371
{
370
372
  Create_field *field_arg;
371
373
  List_iterator<Create_field> it(create_fields);
504
506
 
505
507
  if (create_info->block_size)
506
508
    table_options->set_block_size(create_info->block_size);
 
509
 
 
510
  for (unsigned int i= 0; i < keys; i++)
 
511
  {
 
512
    drizzle::Table::Index *idx;
 
513
 
 
514
    idx= table_proto->add_index();
 
515
 
 
516
    assert(test(key_info[i].flags & HA_USES_COMMENT) ==
 
517
           (key_info[i].comment.length > 0));
 
518
 
 
519
    idx->set_name(key_info[i].name);
 
520
 
 
521
    if(is_primary_key_name(key_info[i].name))
 
522
      idx->set_is_primary(true);
 
523
    else
 
524
      idx->set_is_primary(false);
 
525
 
 
526
    switch(key_info[i].algorithm)
 
527
    {
 
528
    case HA_KEY_ALG_HASH:
 
529
      idx->set_type(drizzle::Table::Index::HASH);
 
530
      break;
 
531
 
 
532
    case HA_KEY_ALG_BTREE:
 
533
      idx->set_type(drizzle::Table::Index::BTREE);
 
534
      break;
 
535
 
 
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);
 
540
      break;
 
541
 
 
542
    default:
 
543
      abort(); /* Somebody's brain broke. haven't added index type to proto */
 
544
      break;
 
545
    }
 
546
 
 
547
    if (key_info[i].flags & HA_NOSAME)
 
548
      idx->set_is_unique(true);
 
549
    else
 
550
      idx->set_is_unique(false);
 
551
 
 
552
    /* FIXME: block_size ? */
 
553
 
 
554
    for(unsigned int j=0; j< key_info[i].key_parts; j++)
 
555
    {
 
556
      drizzle::Table::Index::IndexPart *idxpart;
 
557
      drizzle::Table::Field *field;
 
558
 
 
559
      idxpart= idx->add_index_part();
 
560
 
 
561
      field= idxpart->mutable_field();
 
562
      *field= table_proto->field(key_info[i].key_part[j].fieldnr);
 
563
 
 
564
      idxpart->set_compare_length(key_info[i].key_part[j].length);
 
565
    }
 
566
 
 
567
    if (key_info[i].flags & HA_USES_COMMENT)
 
568
      idx->set_comment(key_info[i].comment.str);
 
569
  }
507
570
}
508
571
 
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)),
 
597
                            uint32_t keys,
535
598
                            KEY *key_info)
536
599
{
537
600
  (void)key_info;
540
603
  string new_path(file_name);
541
604
  string file_ext = ".tabledefinition";
542
605
 
543
 
  fill_table_proto(&table_proto, table_name, create_fields, create_info);
 
606
  fill_table_proto(&table_proto, table_name, create_fields, create_info,
 
607
                   keys, key_info);
544
608
 
545
609
  new_path.replace(new_path.find(".frm"), file_ext.length(), file_ext );
546
610
 
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,
602
666
                                                create_info,0))
603
667
    goto err_handler;
604
668
  return(0);