~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/opt_range.cc

  • Committer: Eric Herman
  • Date: 2008-12-06 22:37:37 UTC
  • mfrom: (656.1.6 devel)
  • mto: (656.1.8 devel)
  • mto: This revision was merged to the branch mainline in revision 665.
  • Revision ID: eric@mysql.com-20081206223737-viem01l5uhm0w14r
mergedĀ fromĀ lp:drizzle/mordred

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
#include <drizzled/item/cmpfunc.h>
111
111
#include <drizzled/field/num.h>
112
112
 
 
113
#include <string>
113
114
#include CMATH_H
114
115
 
 
116
using namespace std;
115
117
#if defined(CMATH_NAMESPACE)
116
118
using namespace CMATH_NAMESPACE;
117
119
#endif
9448
9450
  QUICK_RANGE *cur_range;
9449
9451
  bool found_null= false;
9450
9452
  int result= HA_ERR_KEY_NOT_FOUND;
 
9453
  basic_string<unsigned char> max_key;
 
9454
  
 
9455
  max_key.reserve(real_prefix_len + min_max_arg_len);
9451
9456
 
9452
9457
  assert(min_max_ranges.elements > 0);
9453
9458
 
9521
9526
    if ( !(cur_range->flag & NO_MAX_RANGE) )
9522
9527
    {
9523
9528
      /* Compose the MAX key for the range. */
9524
 
      unsigned char *max_key= (unsigned char*) my_alloca(real_prefix_len + min_max_arg_len);
9525
 
      memcpy(max_key, group_prefix, real_prefix_len);
9526
 
      memcpy(max_key + real_prefix_len, cur_range->max_key,
9527
 
             cur_range->max_length);
 
9529
      max_key.clear();
 
9530
      max_key.append(group_prefix, real_prefix_len);
 
9531
      max_key.append(cur_range->max_key, cur_range->max_length);
9528
9532
      /* Compare the found key with max_key. */
9529
 
      int cmp_res= key_cmp(index_info->key_part, max_key,
 
9533
      int cmp_res= key_cmp(index_info->key_part,
 
9534
                           max_key.data(),
9530
9535
                           real_prefix_len + min_max_arg_len);
9531
9536
      if ((!((cur_range->flag & NEAR_MAX) && (cmp_res == -1)) || (cmp_res <= 0)))
9532
9537
      {
9579
9584
  key_part_map keypart_map;
9580
9585
  QUICK_RANGE *cur_range;
9581
9586
  int result;
 
9587
  basic_string<unsigned char> min_key;
 
9588
  min_key.reserve(real_prefix_len + min_max_arg_len);
9582
9589
 
9583
9590
  assert(min_max_ranges.elements > 0);
9584
9591
 
9638
9645
    if ( !(cur_range->flag & NO_MIN_RANGE) )
9639
9646
    {
9640
9647
      /* Compose the MIN key for the range. */
9641
 
      unsigned char *min_key= (unsigned char*) my_alloca(real_prefix_len + min_max_arg_len);
9642
 
      memcpy(min_key, group_prefix, real_prefix_len);
9643
 
      memcpy(min_key + real_prefix_len, cur_range->min_key,
9644
 
             cur_range->min_length);
 
9648
      min_key.clear();
 
9649
      min_key.append(group_prefix, real_prefix_len);
 
9650
      min_key.append(cur_range->min_key, cur_range->min_length);
 
9651
 
9645
9652
      /* Compare the found key with min_key. */
9646
 
      int cmp_res= key_cmp(index_info->key_part, min_key,
 
9653
      int cmp_res= key_cmp(index_info->key_part,
 
9654
                           min_key.data(),
9647
9655
                           real_prefix_len + min_max_arg_len);
9648
9656
      if ((!((cur_range->flag & NEAR_MIN) && (cmp_res == 1)) ||
9649
9657
            (cmp_res >= 0)))