Skip to content

Commit

Permalink
Add a method to disable the automatic adding of values from cursors
Browse files Browse the repository at this point in the history
Currently cursors automatically add values to the sum functions they
manage. There are use cases when we just want to figure out the frame
boundaries, without actually adding/removing values from them.
  • Loading branch information
cvicentiu committed Sep 9, 2016
1 parent 3ba867b commit e174b13
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions sql/sql_window.cc
Original file line number Diff line number Diff line change
Expand Up @@ -748,6 +748,8 @@ class Partition_read_cursor : public Table_read_cursor
class Frame_cursor : public Sql_alloc
{
public:
Frame_cursor() : sum_functions(), perform_no_action(false) {}

virtual void init(READ_RECORD *info) {};

bool add_sum_func(Item_sum* item)
Expand Down Expand Up @@ -783,18 +785,35 @@ class Frame_cursor : public Sql_alloc

virtual ~Frame_cursor() {}

/*
Regular frame cursors add or remove values from the sum functions they
manage. By calling this method, they will only perform the required
movement within the table, but no adding/removing will happen.
*/
void set_no_action()
{
perform_no_action= true;
}

protected:
inline void add_value_to_items()
{
if (perform_no_action)
return;

List_iterator_fast<Item_sum> it(sum_functions);
Item_sum *item_sum;
while ((item_sum= it++))
{
item_sum->add();
}
}

inline void remove_value_from_items()
{
if (perform_no_action)
return;

List_iterator_fast<Item_sum> it(sum_functions);
Item_sum *item_sum;
while ((item_sum= it++))
Expand All @@ -805,6 +824,9 @@ class Frame_cursor : public Sql_alloc

/* Sum functions that this cursor handles. */
List<Item_sum> sum_functions;

private:
bool perform_no_action;
};

/*
Expand Down

0 comments on commit e174b13

Please sign in to comment.