Commit 6ad9ac21 authored by Sergei Petrunia's avatar Sergei Petrunia

Encapsulate use of List<Cached_item> in a Group_bound_tracker.

parent c7a60de7
......@@ -164,12 +164,7 @@ void Item_window_func::split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array,
void Item_window_func::setup_partition_border_check(THD *thd)
{
for (ORDER *curr= window_spec->partition_list->first; curr; curr=curr->next)
{
//curr->item_ptr->fix_fields(thd, curr->item);
Cached_item *tmp= new_Cached_item(thd, curr->item[0], TRUE);
partition_fields.push_back(tmp);
}
partition_tracker.init(thd, window_spec->partition_list);
window_func()->setup_window_func(thd, window_spec);
}
......@@ -208,16 +203,14 @@ bool Item_sum_rank::add()
return false;
}
int Item_window_func::check_partition_bound()
bool Item_window_func::check_if_partition_changed()
{
return test_if_group_changed(partition_fields);
return partition_tracker.check_if_next_group();
}
void Item_window_func::advance_window()
{
int changed= check_partition_bound();
if (changed > -1)
if (check_if_partition_changed())
{
/* Next partition */
window_func()->clear();
......
......@@ -485,7 +485,7 @@ public:
advance_window() uses this to tell when we've left one partition and
entered another
*/
List<Cached_item> partition_fields;
Group_bound_tracker partition_tracker;
public:
Item_window_func(THD *thd, Item_sum *win_func, LEX_STRING *win_name)
: Item_func_or_sum(thd, (Item *) win_func),
......@@ -537,7 +537,7 @@ public:
void setup_partition_border_check(THD *thd);
void advance_window();
int check_partition_bound();
bool check_if_partition_changed();
enum_field_types field_type() const
{
......
......@@ -1281,8 +1281,8 @@ bool compute_window_func_with_frames(Item_window_func *item_win,
{
break; /* End of file */
}
bool partition_changed= (item_win->check_partition_bound() > -1)? true:
false;
bool partition_changed= item_win->check_if_partition_changed();
tbl->file->position(tbl->record[0]);
memcpy(rowid_buf, tbl->file->ref, tbl->file->ref_length);
......@@ -1382,8 +1382,7 @@ bool compute_two_pass_window_functions(Item_window_func *item_win,
done = true;
}
bool partition_changed= (done || item_win->check_partition_bound() > -1) ?
true : false;
bool partition_changed= done || item_win->check_if_partition_changed();
// The first time we always have a partition changed. Ignore it.
if (first_row)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment