23
23
#include <drizzled/optimizer/sel_arg.h>
24
24
#include <drizzled/util/test.h>
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)
84
84
new_max= arg->max_value;
85
85
flag_max= arg->max_flag;
87
return (new SEL_ARG(field,
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));
97
91
/* min <= X , arg->min */
98
92
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_first(optimizer::SEL_ARG *arg)
100
return (new SEL_ARG(field,part,
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);
109
98
/* min <= X <= key_max */
110
99
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_last(optimizer::SEL_ARG *arg)
112
return (new SEL_ARG(field,
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);
330
313
left= right= &optimizer::null_element;
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)
337
318
optimizer::SEL_ARG *tmp= NULL;
394
375
optimizer::SEL_ARG *optimizer::SEL_ARG::clone_tree(RangeParameter *param)
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);
402
383
next_arg->next= 0; // Fix last link
403
384
tmp_link.next->prev= 0; // Fix first link