mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Merge branch 'bb-10.2-mdev9543' of github.com:MariaDB/server into bb-10.2-mdev9543
This commit is contained in:
commit
bc6df8d6e0
3 changed files with 15 additions and 22 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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_;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue