~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/optimizer/quick_range_select.cc

Refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include <drizzled/optimizer/quick_range_select.h>
25
25
#include <drizzled/internal/m_string.h>
26
26
#include <drizzled/current_session.h>
 
27
#include <drizzled/key.h>
 
28
#include <drizzled/table.h>
 
29
#include <drizzled/util/test.h>
27
30
 
28
31
#include <fcntl.h>
29
32
 
216
219
 
217
220
bool optimizer::QuickRangeSelect::unique_key_range() const
218
221
{
219
 
  if (ranges.elements == 1)
 
222
  if (ranges.size() == 1)
220
223
  {
221
224
    optimizer::QuickRange *tmp= *((optimizer::QuickRange**)ranges.buffer);
222
225
    if ((tmp->flag & (EQ_RANGE | NULL_RANGE)) == EQ_RANGE)
258
261
  };
259
262
  error= cursor->multi_range_read_init(&seq_funcs,
260
263
                                       (void*) this,
261
 
                                       ranges.elements,
 
264
                                       ranges.size(),
262
265
                                       mrr_flags);
263
266
  return error;
264
267
}
307
310
        return result;
308
311
    }
309
312
 
310
 
    uint32_t count= ranges.elements - (cur_range - (optimizer::QuickRange**) ranges.buffer);
 
313
    uint32_t count= ranges.size() - (cur_range - (optimizer::QuickRange**) ranges.buffer);
311
314
    if (count == 0)
312
315
    {
313
316
      /* Ranges have already been used up before. None is left for read. */
350
353
{
351
354
  optimizer::QuickRange *res= NULL;
352
355
  uint32_t min= 0;
353
 
  uint32_t max= ranges.elements - 1;
 
356
  uint32_t max= ranges.size() - 1;
354
357
  uint32_t mid= (max + min) / 2;
355
358
 
356
359
  while (min != max)
357
360
  {
358
 
    if (cmp_next(*(optimizer::QuickRange**)dynamic_array_ptr(&ranges, mid)))
 
361
    if (cmp_next(reinterpret_cast<optimizer::QuickRange**>(ranges.buffer)[mid]))
359
362
    {
360
363
      /* current row value > mid->max */
361
364
      min= mid + 1;
364
367
      max= mid;
365
368
    mid= (min + max) / 2;
366
369
  }
367
 
  res= *(optimizer::QuickRange**)dynamic_array_ptr(&ranges, mid);
368
 
  return (! cmp_next(res) && ! cmp_prev(res));
 
370
  res= reinterpret_cast<optimizer::QuickRange**>(ranges.buffer)[mid];
 
371
  return not cmp_next(res) && not cmp_prev(res);
369
372
}
370
373
 
371
374
 
452
455
    optimizer::QuickRangeSelect(*q)
453
456
{
454
457
  optimizer::QuickRange **pr= (optimizer::QuickRange**) ranges.buffer;
455
 
  optimizer::QuickRange **end_range= pr + ranges.elements;
 
458
  optimizer::QuickRange **end_range= pr + ranges.size();
456
459
  for (; pr != end_range; pr++)
457
460
  {
458
461
    rev_ranges.push_back(*pr);