~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/myisam/mi_write.cc

Merge Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include "drizzled/internal/m_string.h"
21
21
#include <drizzled/util/test.h>
22
22
 
 
23
using namespace drizzled;
23
24
 
24
25
#define MAX_POINTER_LENGTH 8
25
26
 
27
28
 
28
29
static int w_search(MI_INFO *info,MI_KEYDEF *keyinfo,
29
30
                    uint32_t comp_flag, unsigned char *key,
30
 
                    uint32_t key_length, my_off_t pos, unsigned char *father_buff,
31
 
                    unsigned char *father_keypos, my_off_t father_page,
 
31
                    uint32_t key_length, internal::my_off_t pos, unsigned char *father_buff,
 
32
                    unsigned char *father_keypos, internal::my_off_t father_page,
32
33
                    bool insert_last);
33
34
static int _mi_balance_page(MI_INFO *info,MI_KEYDEF *keyinfo,unsigned char *key,
34
35
                            unsigned char *curr_buff,unsigned char *father_buff,
35
 
                            unsigned char *father_keypos,my_off_t father_page);
 
36
                            unsigned char *father_keypos,internal::my_off_t father_page);
36
37
static unsigned char *_mi_find_last_pos(MI_KEYDEF *keyinfo, unsigned char *page,
37
38
                                unsigned char *key, uint32_t *return_key_length,
38
39
                                unsigned char **after_key);
48
49
  MYISAM_SHARE *share=info->s;
49
50
  uint32_t i;
50
51
  int save_errno;
51
 
  my_off_t filepos;
 
52
  internal::my_off_t filepos;
52
53
  unsigned char *buff;
53
54
  bool lock_tree= share->concurrent_insert;
54
55
 
223
224
  uint32_t error;
224
225
  uint32_t comp_flag;
225
226
  MI_KEYDEF *keyinfo=info->s->keyinfo+keynr;
226
 
  my_off_t  *root=&info->s->state.key_root[keynr];
 
227
  internal::my_off_t  *root=&info->s->state.key_root[keynr];
227
228
 
228
229
  if (keyinfo->flag & HA_SORT_ALLOWS_SAME)
229
230
    comp_flag=SEARCH_BIGGER;                    /* Put after same key */
242
243
} /* _mi_ck_write_btree */
243
244
 
244
245
int _mi_ck_real_write_btree(MI_INFO *info, MI_KEYDEF *keyinfo,
245
 
    unsigned char *key, uint32_t key_length, my_off_t *root, uint32_t comp_flag)
 
246
    unsigned char *key, uint32_t key_length, internal::my_off_t *root, uint32_t comp_flag)
246
247
{
247
248
  int error;
248
249
  /* key_length parameter is used only if comp_flag is SEARCH_FIND */
249
250
  if (*root == HA_OFFSET_ERROR ||
250
251
      (error=w_search(info, keyinfo, comp_flag, key, key_length,
251
252
                      *root, (unsigned char *) 0, (unsigned char*) 0,
252
 
                      (my_off_t) 0, 1)) > 0)
 
253
                      (internal::my_off_t) 0, 1)) > 0)
253
254
    error=_mi_enlarge_root(info,keyinfo,key,root);
254
255
  return(error);
255
256
} /* _mi_ck_real_write_btree */
258
259
        /* Make a new root with key as only pointer */
259
260
 
260
261
int _mi_enlarge_root(MI_INFO *info, MI_KEYDEF *keyinfo, unsigned char *key,
261
 
                     my_off_t *root)
 
262
                     internal::my_off_t *root)
262
263
{
263
264
  uint32_t t_length,nod_flag;
264
265
  MI_KEY_PARAM s_temp;
286
287
        */
287
288
 
288
289
static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
289
 
                    uint32_t comp_flag, unsigned char *key, uint32_t key_length, my_off_t page,
 
290
                    uint32_t comp_flag, unsigned char *key, uint32_t key_length, internal::my_off_t page,
290
291
                    unsigned char *father_buff, unsigned char *father_keypos,
291
 
                    my_off_t father_page, bool insert_last)
 
292
                    internal::my_off_t father_page, bool insert_last)
292
293
{
293
294
  int error,flag;
294
295
  uint32_t nod_flag, search_key_length;
295
296
  unsigned char *temp_buff,*keypos;
296
297
  unsigned char keybuff[MI_MAX_KEY_BUFF];
297
298
  bool was_last_key;
298
 
  my_off_t next_page, dupp_key_pos;
 
299
  internal::my_off_t next_page, dupp_key_pos;
299
300
 
300
301
  search_key_length= (comp_flag & SEARCH_FIND) ? key_length : USE_WHOLE_KEY;
301
302
  if (!(temp_buff= (unsigned char*) malloc(keyinfo->block_length+
373
374
 
374
375
int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
375
376
               unsigned char *key, unsigned char *anc_buff, unsigned char *key_pos, unsigned char *key_buff,
376
 
               unsigned char *father_buff, unsigned char *father_key_pos, my_off_t father_page,
 
377
               unsigned char *father_buff, unsigned char *father_key_pos, internal::my_off_t father_page,
377
378
               bool insert_last)
378
379
{
379
380
  uint32_t a_length,nod_flag;
398
399
      errno=HA_ERR_CRASHED;
399
400
      return(-1);
400
401
    }
401
 
    bmove_upp((unsigned char*) endpos+t_length,(unsigned char*) endpos,(uint) (endpos-key_pos));
 
402
    internal::bmove_upp((unsigned char*) endpos+t_length,(unsigned char*) endpos,(uint) (endpos-key_pos));
402
403
  }
403
404
  else
404
405
  {
436
437
{
437
438
  uint32_t length,a_length,key_ref_length,t_length,nod_flag,key_length;
438
439
  unsigned char *key_pos,*pos, *after_key= NULL;
439
 
  my_off_t new_pos;
 
440
  internal::my_off_t new_pos;
440
441
  MI_KEY_PARAM s_temp;
441
442
 
442
443
  if (info->s->keyinfo+info->lastinx == keyinfo)
590
591
 
591
592
static int _mi_balance_page(register MI_INFO *info, MI_KEYDEF *keyinfo,
592
593
                            unsigned char *key, unsigned char *curr_buff, unsigned char *father_buff,
593
 
                            unsigned char *father_key_pos, my_off_t father_page)
 
594
                            unsigned char *father_key_pos, internal::my_off_t father_page)
594
595
{
595
596
  bool right;
596
597
  uint32_t k_length,father_length,father_keylength,nod_flag,curr_keylength,
597
598
       right_length,left_length,new_right_length,new_left_length,extra_length,
598
599
       length,keys;
599
600
  unsigned char *pos,*buff,*extra_buff;
600
 
  my_off_t next_page,new_pos;
 
601
  internal::my_off_t next_page,new_pos;
601
602
  unsigned char tmp_part_key[MI_MAX_KEY_BUFF];
602
603
 
603
604
  k_length=keyinfo->keylength;
655
656
    else
656
657
    {                                           /* Move keys -> buff */
657
658
 
658
 
      bmove_upp((unsigned char*) buff+new_right_length,(unsigned char*) buff+right_length,
 
659
      internal::bmove_upp((unsigned char*) buff+new_right_length,(unsigned char*) buff+right_length,
659
660
                right_length-2);
660
661
      length=new_right_length-right_length-k_length;
661
662
      memcpy(buff+2+length,father_key_pos, k_length);
688
689
  /* Save new parting key */
689
690
  memcpy(tmp_part_key, pos-k_length,k_length);
690
691
  /* Make place for new keys */
691
 
  bmove_upp((unsigned char*) buff+new_right_length,(unsigned char*) pos-k_length,
 
692
  internal::bmove_upp((unsigned char*) buff+new_right_length,(unsigned char*) pos-k_length,
692
693
            right_length-extra_length-k_length-2);
693
694
  /* Copy keys from left page */
694
695
  pos= curr_buff+new_left_length;