~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/optimizer/sel_arg.cc

  • Committer: Olaf van der Spek
  • Date: 2011-06-27 15:10:59 UTC
  • mto: This revision was merged to the branch mainline in revision 2351.
  • Revision ID: olafvdspek@gmail.com-20110627151059-ubjo6jgjm6lcx5vr
Refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
#include <drizzled/optimizer/sel_arg.h>
24
24
#include <drizzled/util/test.h>
25
25
 
26
 
namespace drizzled
27
 
{
 
26
namespace drizzled {
28
27
 
29
28
/* Functions to fix up the tree after insert and delete */
30
29
static void left_rotate(optimizer::SEL_ARG **root, optimizer::SEL_ARG *leaf)
72
71
  }
73
72
  else
74
73
  {
75
 
    new_min=arg->min_value; flag_min=arg->min_flag;
 
74
    new_min=arg->min_value;
 
75
    flag_min=arg->min_flag;
76
76
  }
77
77
  if (cmp_max_to_max(arg) <= 0)
78
78
  {
84
84
    new_max= arg->max_value;
85
85
    flag_max= arg->max_flag;
86
86
  }
87
 
  return (new SEL_ARG(field,
88
 
                      part,
89
 
                      new_min,
90
 
                      new_max,
91
 
                      flag_min,
92
 
                      flag_max,
93
 
                      test(maybe_flag && arg->maybe_flag)));
 
87
  return new SEL_ARG(field, part, new_min, new_max, flag_min, flag_max, test(maybe_flag && arg->maybe_flag));
94
88
}
95
89
 
96
90
 
97
91
/* min <= X , arg->min */
98
92
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_first(optimizer::SEL_ARG *arg)
99
93
{
100
 
  return (new SEL_ARG(field,part,
101
 
                      min_value,
102
 
                      arg->min_value,
103
 
                      min_flag,
104
 
                      arg->min_flag & NEAR_MIN ? 0 : NEAR_MAX,
105
 
                                                     maybe_flag | arg->maybe_flag));
 
94
  return new SEL_ARG(field,part, min_value, arg->min_value, min_flag, arg->min_flag & NEAR_MIN ? 0 : NEAR_MAX, maybe_flag | arg->maybe_flag);
106
95
}
107
96
 
108
97
 
109
98
/* min <= X <= key_max */
110
99
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_last(optimizer::SEL_ARG *arg)
111
100
{
112
 
  return (new SEL_ARG(field,
113
 
                      part,
114
 
                      min_value,
115
 
                      arg->max_value,
116
 
                      min_flag,
117
 
                      arg->max_flag,
118
 
                      maybe_flag | arg->maybe_flag));
 
101
  return new SEL_ARG(field, part, min_value, arg->max_value, min_flag, arg->max_flag, maybe_flag | arg->maybe_flag);
119
102
}
120
103
 
121
104
 
330
313
  left= right= &optimizer::null_element;
331
314
}
332
315
 
333
 
optimizer::SEL_ARG *optimizer::SEL_ARG::clone(RangeParameter *param,
334
 
                                              optimizer::SEL_ARG *new_parent,
335
 
                                              optimizer::SEL_ARG **next_arg)
 
316
optimizer::SEL_ARG *optimizer::SEL_ARG::clone(RangeParameter *param, optimizer::SEL_ARG *new_parent, optimizer::SEL_ARG **next_arg)
336
317
{
337
318
  optimizer::SEL_ARG *tmp= NULL;
338
319
 
394
375
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_tree(RangeParameter *param)
395
376
{
396
377
  optimizer::SEL_ARG tmp_link;
397
 
  optimizer::SEL_ARG*next_arg= NULL;
398
 
  optimizer::SEL_ARG *root= NULL;
 
378
  optimizer::SEL_ARG* next_arg= NULL;
399
379
  next_arg= &tmp_link;
400
 
  if (! (root= clone(param, (SEL_ARG *) 0, &next_arg)))
 
380
  optimizer::SEL_ARG* root= clone(param, (SEL_ARG *) 0, &next_arg);
 
381
  if (not root)
401
382
    return 0;
402
383
  next_arg->next= 0; // Fix last link
403
384
  tmp_link.next->prev= 0; // Fix first link