~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to storage/myisam/mi_write.c

MergedĀ fromĀ Mats.

Show diffs side-by-side

added added

removed removed

Lines of Context:
411
411
      my_errno=HA_ERR_CRASHED;
412
412
      return(-1);
413
413
    }
414
 
    memcpy(key_pos,key_pos-t_length,(uint) (endpos-key_pos)+t_length);
 
414
    memcpy(key_pos, key_pos - t_length, endpos - key_pos + t_length);
415
415
  }
416
416
  (*keyinfo->store_key)(keyinfo,key_pos,&s_temp);
417
417
  a_length+=t_length;
463
463
  if (nod_flag)
464
464
  {
465
465
    pos=key_pos-nod_flag;
466
 
    memcpy((uchar*) info->buff+2,(uchar*) pos,(size_t) nod_flag);
 
466
    memcpy(info->buff + 2, pos, nod_flag);
467
467
  }
468
468
 
469
469
        /* Move middle item to key and pointer to new page */
479
479
                                (uchar*) 0, (uchar*) 0,
480
480
                                key_buff, &s_temp);
481
481
  length=(uint) ((buff+a_length)-key_pos);
482
 
  memcpy((uchar*) info->buff+key_ref_length+t_length,(uchar*) key_pos,
483
 
         (size_t) length);
 
482
  memcpy(info->buff+key_ref_length+t_length, key_pos, length);
484
483
  (*keyinfo->store_key)(keyinfo,info->buff+key_ref_length,&s_temp);
485
484
  mi_putint(info->buff,length+t_length+key_ref_length,nod_flag);
486
485
 
649
648
    if (left_length < new_left_length)
650
649
    {                                           /* Move keys buff -> leaf */
651
650
      pos=curr_buff+left_length;
652
 
      memcpy((uchar*) pos,(uchar*) father_key_pos, (size_t) k_length);
653
 
      memcpy((uchar*) pos+k_length, (uchar*) buff+2,
654
 
             (size_t) (length=new_left_length - left_length - k_length));
 
651
      memcpy(pos, father_key_pos, k_length);
 
652
      length= new_left_length - left_length - k_length;
 
653
      memcpy(pos+k_length, buff+2, length);
655
654
      pos=buff+2+length;
656
 
      memcpy((uchar*) father_key_pos,(uchar*) pos,(size_t) k_length);
657
 
      memcpy((uchar*) buff+2,(uchar*) pos+k_length,new_right_length);
 
655
      memcpy(father_key_pos, pos, k_length);
 
656
      memcpy(buff+2, pos+k_length, new_right_length);
658
657
    }
659
658
    else
660
659
    {                                           /* Move keys -> buff */
662
661
      bmove_upp((uchar*) buff+new_right_length,(uchar*) buff+right_length,
663
662
                right_length-2);
664
663
      length=new_right_length-right_length-k_length;
665
 
      memcpy((uchar*) buff+2+length,father_key_pos,(size_t) k_length);
 
664
      memcpy(buff+2+length,father_key_pos, k_length);
666
665
      pos=curr_buff+new_left_length;
667
 
      memcpy((uchar*) father_key_pos,(uchar*) pos,(size_t) k_length);
668
 
      memcpy((uchar*) buff+2,(uchar*) pos+k_length,(size_t) length);
 
666
      memcpy(father_key_pos, pos, k_length);
 
667
      memcpy(buff+2, pos+k_length, length);
669
668
    }
670
669
 
671
670
    if (_mi_write_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,info->buff) ||
688
687
 
689
688
  /* move first largest keys to new page  */
690
689
  pos=buff+right_length-extra_length;
691
 
  memcpy((uchar*) extra_buff+2,pos,(size_t) extra_length);
 
690
  memcpy(extra_buff+2, pos, extra_length);
692
691
  /* Save new parting key */
693
692
  memcpy(tmp_part_key, pos-k_length,k_length);
694
693
  /* Make place for new keys */
696
695
            right_length-extra_length-k_length-2);
697
696
  /* Copy keys from left page */
698
697
  pos= curr_buff+new_left_length;
699
 
  memcpy((uchar*) buff+2,(uchar*) pos+k_length,
700
 
         (size_t) (length=left_length-new_left_length-k_length));
 
698
  length= left_length - new_left_length - k_length;
 
699
  memcpy(buff+2, pos+k_length, length);
701
700
  /* Copy old parting key */
702
 
  memcpy((uchar*) buff+2+length,father_key_pos,(size_t) k_length);
 
701
  memcpy(buff+2+length, father_key_pos, k_length);
703
702
 
704
703
  /* Move new parting keys up to caller */
705
 
  memcpy((uchar*) (right ? key : father_key_pos),pos,(size_t) k_length);
706
 
  memcpy((uchar*) (right ? father_key_pos : key),tmp_part_key, k_length);
 
704
  memcpy((right ? key : father_key_pos), pos, k_length);
 
705
  memcpy((right ? father_key_pos : key), tmp_part_key, k_length);
707
706
 
708
707
  if ((new_pos=_mi_new(info,keyinfo,DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
709
708
    goto err;