~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/myisam/sort.cc

  • Committer: Mark Atwood
  • Date: 2011-06-19 18:31:57 UTC
  • mfrom: (2318.6.8 refactor12)
  • Revision ID: me@mark.atwood.name-20110619183157-jg8823cpkobu7n6d
Tags: 2011.06.20
mergeĀ lp:~olafvdspek/drizzle/refactor12

Show diffs side-by-side

added added

removed removed

Lines of Context:
103
103
int _create_index_by_sort(MI_SORT_PARAM *info,bool no_messages,
104
104
                          size_t sortbuff_size)
105
105
{
106
 
  int error;
107
 
  size_t maxbuffer, skr;
108
 
  uint32_t memavl,old_memavl,keys,sort_length;
 
106
  size_t skr;
 
107
  uint32_t memavl,keys;
109
108
  DYNAMIC_ARRAY buffpek;
110
 
  ha_rows records;
111
 
  unsigned char **sort_keys;
112
109
  internal::io_cache_st tempfile, tempfile_for_exceptions;
113
110
 
114
111
  if (info->keyinfo->flag & HA_VAR_LENGTH_KEY)
127
124
  my_b_clear(&tempfile);
128
125
  my_b_clear(&tempfile_for_exceptions);
129
126
  memset(&buffpek, 0, sizeof(buffpek));
130
 
  sort_keys= (unsigned char **) NULL; error= 1;
131
 
  maxbuffer=1;
 
127
  unsigned char** sort_keys= (unsigned char **) NULL; 
 
128
  int error= 1;
 
129
  size_t maxbuffer=1;
132
130
 
133
131
  memavl=max(sortbuff_size,(size_t)MIN_SORT_MEMORY);
134
 
  records=      info->sort_info->max_records;
135
 
  sort_length=  info->key_length;
 
132
  ha_rows records= info->sort_info->max_records;
 
133
  uint32_t sort_length= info->key_length;
136
134
 
137
135
  while (memavl >= MIN_SORT_MEMORY)
138
136
  {
143
141
    else
144
142
      do
145
143
      {
146
 
        skr=maxbuffer;
147
 
        if (memavl < sizeof(BUFFPEK)* maxbuffer ||
148
 
            (keys=(memavl-sizeof(BUFFPEK)* maxbuffer)/
149
 
             (sort_length+sizeof(char*))) <= 1 ||
150
 
            keys < maxbuffer)
151
 
        {
152
 
          mi_check_print_error(info->sort_info->param,
153
 
                               "myisam_sort_buffer_size is too small");
154
 
          goto err;
155
 
        }
 
144
        skr=maxbuffer;
 
145
        if (memavl < sizeof(BUFFPEK)* maxbuffer ||
 
146
          (keys=(memavl-sizeof(BUFFPEK)* maxbuffer) / (sort_length+sizeof(char*))) <= 1 ||
 
147
          keys < maxbuffer)
 
148
        {
 
149
          mi_check_print_error(info->sort_info->param,
 
150
            "myisam_sort_buffer_size is too small");
 
151
          goto err;
 
152
        }
156
153
      }
157
154
      while ((maxbuffer= (size_t)(records/(keys-1)+1)) != skr);
158
155
 
159
156
    sort_keys=(unsigned char **)malloc(keys*(sort_length+sizeof(char*)));
160
157
    my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer, maxbuffer/2);
161
158
    break;
162
 
    old_memavl=memavl; // todo: remove dead code
163
 
    if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY)
164
 
      memavl=MIN_SORT_MEMORY;
165
159
  }
166
160
  if (memavl < MIN_SORT_MEMORY)
167
161
  {