~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/archive/ha_archive.cc

  • Committer: Stewart Smith
  • Date: 2009-06-25 05:56:01 UTC
  • mto: (1089.11.1 basic-discovery)
  • mto: This revision was merged to the branch mainline in revision 1102.
  • Revision ID: stewart@flamingspork.com-20090625055601-x0mt0l1yo22xb77w
make ARCHIVE engine write table proto into 'frm' part of ARZ header. i.e. table proto now in .ARZ like the FRM was in MySQL (except cleaner, as we're not reading it off disk, we just deal with the data structure directly).

Show diffs side-by-side

added added

removed removed

Lines of Context:
510
510
int ArchiveEngine::createTableImpl(Session *session, const char *table_name,
511
511
                                   Table *table_arg,
512
512
                                   HA_CREATE_INFO *create_info,
513
 
                                   drizzled::message::Table *)
 
513
                                   drizzled::message::Table *proto)
514
514
{
515
515
  char name_buff[FN_REFLEN];
516
516
  char linkname[FN_REFLEN];
517
517
  int error= 0;
518
518
  azio_stream create_stream;            /* Archive file we are working with */
519
 
  FILE *frm_file;                   /* File handler for readers */
520
 
  struct stat file_stat;
521
 
  unsigned char *frm_ptr;
522
519
  int r;
523
520
  uint64_t auto_increment_value;
 
521
  string serialized_proto;
524
522
 
525
523
  auto_increment_value= create_info->auto_increment_value;
526
524
 
563
561
    There is a chance that the file was "discovered". In this case
564
562
    just use whatever file is there.
565
563
  */
 
564
  struct stat file_stat;
566
565
  r= stat(name_buff, &file_stat);
567
 
  if (r == -1 && errno!=ENOENT)
568
 
  {
569
 
    return errno;
570
 
  }
571
566
  if (!r)
572
567
    return HA_ERR_TABLE_EXIST;
573
568
 
581
576
 
582
577
  if (linkname[0])
583
578
    my_symlink(name_buff, linkname, MYF(0));
584
 
  fn_format(name_buff, table_name, "", ".frm",
585
 
            MY_REPLACE_EXT | MY_UNPACK_FILENAME);
586
 
 
587
 
  /*
588
 
    Here is where we open up the frm and pass it to archive to store
589
 
  */
590
 
  if ((frm_file= fopen(name_buff, "r")) > 0)
591
 
  {
592
 
    if (fstat(fileno(frm_file), &file_stat))
593
 
    {
594
 
      if ((uint64_t)file_stat.st_size > SIZE_MAX)
595
 
      {
596
 
        error= ENOMEM;
597
 
        goto error2;
598
 
      }
599
 
      frm_ptr= (unsigned char *)malloc((size_t)file_stat.st_size);
600
 
      if (frm_ptr)
601
 
      {
602
 
        size_t length_io;
603
 
        length_io= read(fileno(frm_file), frm_ptr, (size_t)file_stat.st_size);
604
 
 
605
 
        if (length_io != (size_t)file_stat.st_size)
606
 
        {
607
 
          free(frm_ptr);
608
 
          goto error2;
609
 
        }
610
 
 
611
 
        length_io= azwrite_frm(&create_stream, (char *)frm_ptr, (size_t)file_stat.st_size);
612
 
 
613
 
        if (length_io != (size_t)file_stat.st_size)
614
 
        {
615
 
          free(frm_ptr);
616
 
          goto error2;
617
 
        }
618
 
 
619
 
        free(frm_ptr);
620
 
      }
621
 
    }
622
 
    fclose(frm_file);
623
 
  }
 
579
 
 
580
  proto->SerializeToString(&serialized_proto);
 
581
 
 
582
  if(azwrite_frm(&create_stream, serialized_proto.c_str(),
 
583
                 serialized_proto.length()))
 
584
    goto error2;
624
585
 
625
586
  if (create_info->comment.str)
626
587
  {