summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorDan Solodko <dan@mariadb.org>2020-06-18 11:02:19 +0300
committerAnel <an3l@users.noreply.github.com>2020-07-28 06:35:32 +0200
commit459b87f6b4ae9633f831e245e6a345bbab55cf27 (patch)
tree0ffc7cb0dc601af688820ca9316b38b3bed18fb9 /sql
parentcae4b3f8113f266b7b6636e222e9cd9df6080327 (diff)
downloadmariadb-git-459b87f6b4ae9633f831e245e6a345bbab55cf27.tar.gz
MDEV-9911: NTILE must return an error when parameter is not stable
Diffstat (limited to 'sql')
-rw-r--r--sql/item_windowfunc.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/sql/item_windowfunc.h b/sql/item_windowfunc.h
index 85957949053..36b0d087f12 100644
--- a/sql/item_windowfunc.h
+++ b/sql/item_windowfunc.h
@@ -618,7 +618,8 @@ 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),
- current_row_count_(0) {};
+ current_row_count_(0),
+ n_old_val_(0) {};
double val_real()
{
@@ -635,11 +636,13 @@ class Item_sum_ntile : public Item_sum_window_with_row_count
longlong num_quantiles= get_num_quantiles();
- if (num_quantiles <= 0) {
+ if (num_quantiles <= 0 ||
+ (static_cast<ulonglong>(num_quantiles) != n_old_val_ && n_old_val_ > 0))
+ {
my_error(ER_INVALID_NTILE_ARGUMENT, MYF(0));
return true;
}
-
+ n_old_val_= static_cast<ulonglong>(num_quantiles);
null_value= false;
ulonglong quantile_size = get_row_count() / num_quantiles;
ulonglong extra_rows = get_row_count() - quantile_size * num_quantiles;
@@ -665,6 +668,7 @@ class Item_sum_ntile : public Item_sum_window_with_row_count
{
current_row_count_= 0;
set_row_count(0);
+ n_old_val_= 0;
}
const char*func_name() const
@@ -683,6 +687,7 @@ class Item_sum_ntile : public Item_sum_window_with_row_count
private:
longlong get_num_quantiles() { return args[0]->val_int(); }
ulong current_row_count_;
+ ulonglong n_old_val_;
};