summaryrefslogtreecommitdiff
path: root/sql/item_windowfunc.h
diff options
context:
space:
mode:
authorVicențiu Ciorbaru <vicentiu@mariadb.org>2016-04-13 10:39:06 +0200
committerVicențiu Ciorbaru <vicentiu@mariadb.org>2016-04-13 10:39:06 +0200
commit3dd08a11de23455182f88c524c2e0b0eb862cc60 (patch)
tree19fea22ff565fd7f1c874ce8ec2aa0383e4946e2 /sql/item_windowfunc.h
parentb532be9f8ce4872be4a3f1ef2fa296a1de347859 (diff)
downloadmariadb-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.h6
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;