diff options
author | Igor Babaev <igor@askmonty.org> | 2016-04-14 01:08:54 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2016-04-14 01:08:54 -0700 |
commit | bc6df8d6e0b3568a2cb15c37c6d5330a0d5254fa (patch) | |
tree | 9b6a9e516049b3902edece54432ff2edacf86cff | |
parent | 5ff4b21e02dee1879436ebb4a484f0d2e756acaf (diff) | |
parent | 31fb045c1296aba5b7ed95cf96843ddfb5b91ef9 (diff) | |
download | mariadb-git-bc6df8d6e0b3568a2cb15c37c6d5330a0d5254fa.tar.gz |
Merge branch 'bb-10.2-mdev9543' of github.com:MariaDB/server into bb-10.2-mdev9543
-rw-r--r-- | mysql-test/r/win_rank.result | 10 | ||||
-rw-r--r-- | sql/item_windowfunc.cc | 5 | ||||
-rw-r--r-- | sql/item_windowfunc.h | 22 |
3 files changed, 15 insertions, 22 deletions
diff --git a/mysql-test/r/win_rank.result b/mysql-test/r/win_rank.result index 54f70147b1a..725683d3869 100644 --- a/mysql-test/r/win_rank.result +++ b/mysql-test/r/win_rank.result @@ -40,11 +40,11 @@ pk a b rank dense_rank 3 1 10 3 2 4 1 10 3 2 8 2 10 5 3 -5 2 20 1 0 -6 2 20 1 0 -7 2 20 1 0 -9 4 20 4 1 -10 4 20 4 1 +5 2 20 1 1 +6 2 20 1 1 +7 2 20 1 1 +9 4 20 4 2 +10 4 20 4 2 drop table t1; # # Test with null values in the table. diff --git a/sql/item_windowfunc.cc b/sql/item_windowfunc.cc index c8f398577b5..d157d545dad 100644 --- a/sql/item_windowfunc.cc +++ b/sql/item_windowfunc.cc @@ -185,8 +185,11 @@ void Item_sum_dense_rank::setup_window_func(THD *thd, Window_spec *window_spec) bool Item_sum_dense_rank::add() { - if (peer_tracker.check_if_next_group()) + if (peer_tracker.check_if_next_group() || first_add) + { + first_add= false; dense_rank++; + } return false; } diff --git a/sql/item_windowfunc.h b/sql/item_windowfunc.h index 35fff511e5a..40f48cc7dc5 100644 --- a/sql/item_windowfunc.h +++ b/sql/item_windowfunc.h @@ -213,7 +213,9 @@ public: class Item_sum_dense_rank: public Item_sum_int { longlong dense_rank; + bool first_add; Group_bound_tracker peer_tracker; + public: /* XXX(cvicentiu) This class could potentially be implemented in the rank class, with a switch for the DENSE case. @@ -221,6 +223,7 @@ class Item_sum_dense_rank: public Item_sum_int void clear() { dense_rank= 0; + first_add= true; } bool add(); void update_field() {} @@ -229,9 +232,8 @@ class Item_sum_dense_rank: public Item_sum_int return dense_rank; } - public: Item_sum_dense_rank(THD *thd) - : Item_sum_int(thd), dense_rank(0) {} + : Item_sum_int(thd), dense_rank(0), first_add(true) {} enum Sumfunctype sum_func () const { return DENSE_RANK_FUNC; @@ -427,7 +429,6 @@ class Item_sum_ntile : public Item_sum_window_with_row_count public: Item_sum_ntile(THD* thd, Item* num_quantiles_expr) : Item_sum_window_with_row_count(thd, num_quantiles_expr), - num_quantiles_expr_(num_quantiles_expr), current_row_count_(0) {}; double val_real() @@ -443,7 +444,7 @@ class Item_sum_ntile : public Item_sum_window_with_row_count return 0; } - longlong num_quantiles= num_quantiles_expr_->val_int(); + longlong num_quantiles= get_num_quantiles(); if (num_quantiles <= 0) { my_error(ER_INVALID_NTILE_ARGUMENT, MYF(0)); @@ -487,19 +488,8 @@ class Item_sum_ntile : public Item_sum_window_with_row_count enum Item_result result_type () const { return INT_RESULT; } enum_field_types field_type() const { return MYSQL_TYPE_LONGLONG; } - bool fix_fields(THD *thd, Item **ref) - { - if (Item_sum_window_with_row_count::fix_fields(thd, ref)) - return true; - // TODO-cvicentiu is ref as a parameter here ok? - if (!num_quantiles_expr_->fixed) - num_quantiles_expr_->fix_fields(thd, ref); - - return false; - } - private: - Item* num_quantiles_expr_; + longlong get_num_quantiles() { return args[0]->val_int(); } ulong current_row_count_; }; |