diff options
author | Vicențiu Ciorbaru <vicentiu@mariadb.org> | 2016-04-13 10:39:06 +0200 |
---|---|---|
committer | Vicențiu Ciorbaru <vicentiu@mariadb.org> | 2016-04-13 10:39:06 +0200 |
commit | 3dd08a11de23455182f88c524c2e0b0eb862cc60 (patch) | |
tree | 19fea22ff565fd7f1c874ce8ec2aa0383e4946e2 /sql/item_windowfunc.h | |
parent | b532be9f8ce4872be4a3f1ef2fa296a1de347859 (diff) | |
download | mariadb-git-3dd08a11de23455182f88c524c2e0b0eb862cc60.tar.gz |
Fix another bug in dense_rank.
When ordering by a column and partitioning by another, we must reset the
peer_tracker for dense_rank, regardless if the value for the order
column changes or not.
Example:
select a, b, dense_rank() over (partition by b order by a)
a | b | dense_rank
----------------------
1 | p1 | 1
2 | p1 | 2
2 | p2 | 1 // Here, without this fix we returned 0.
2 | p2 | 2 // And 1 here.
Diffstat (limited to 'sql/item_windowfunc.h')
-rw-r--r-- | sql/item_windowfunc.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sql/item_windowfunc.h b/sql/item_windowfunc.h index 35fff511e5a..8da98b93c72 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; |