From e174b13465055bdaa03929ffd2a5a5d266570f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicen=C8=9Biu=20Ciorbaru?= Date: Wed, 7 Sep 2016 22:32:48 +0300 Subject: [PATCH] Add a method to disable the automatic adding of values from cursors 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. --- sql/sql_window.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sql/sql_window.cc b/sql/sql_window.cc index c970b13f069..6a7084eebdb 100644 --- a/sql/sql_window.cc +++ b/sql/sql_window.cc @@ -748,6 +748,8 @@ private: 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) @@ -783,9 +785,22 @@ public: 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 it(sum_functions); Item_sum *item_sum; while ((item_sum= it++)) @@ -793,8 +808,12 @@ protected: item_sum->add(); } } + inline void remove_value_from_items() { + if (perform_no_action) + return; + List_iterator_fast it(sum_functions); Item_sum *item_sum; while ((item_sum= it++)) @@ -805,6 +824,9 @@ protected: /* Sum functions that this cursor handles. */ List sum_functions; + +private: + bool perform_no_action; }; /*