[fix](function) the bucket number arg of width_bucket should be a positive integer value (#37892) (#38295)
## Proposed changes pick #37892
This commit is contained in:
@ -28,6 +28,7 @@
|
||||
#include "vec/columns/column.h"
|
||||
#include "vec/columns/column_vector.h"
|
||||
#include "vec/columns/columns_number.h"
|
||||
#include "vec/common/assert_cast.h"
|
||||
#include "vec/core/block.h"
|
||||
#include "vec/core/column_numbers.h"
|
||||
#include "vec/core/column_with_type_and_name.h"
|
||||
@ -71,6 +72,12 @@ public:
|
||||
block.get_by_position(arguments[3]).column->convert_to_full_column_if_const();
|
||||
int64_t num_buckets = num_buckets_ptr->get_int(0);
|
||||
|
||||
if (num_buckets <= 0) {
|
||||
return Status::InternalError(
|
||||
"The desired number({}) of buckets must be a positive integer value.",
|
||||
num_buckets);
|
||||
}
|
||||
|
||||
auto nested_column_ptr = ColumnInt64::create(input_rows_count, 0);
|
||||
DataTypePtr expr_type = block.get_by_position(arguments[0]).type;
|
||||
|
||||
@ -86,12 +93,10 @@ private:
|
||||
void _execute(const IColumn& expr_column, const IColumn& min_value_column,
|
||||
const IColumn& max_value_column, const int64_t num_buckets,
|
||||
IColumn& nested_column) const {
|
||||
const ColumnType& expr_column_concrete = reinterpret_cast<const ColumnType&>(expr_column);
|
||||
const ColumnType& min_value_column_concrete =
|
||||
reinterpret_cast<const ColumnType&>(min_value_column);
|
||||
const ColumnType& max_value_column_concrete =
|
||||
reinterpret_cast<const ColumnType&>(max_value_column);
|
||||
ColumnInt64& nested_column_concrete = reinterpret_cast<ColumnInt64&>(nested_column);
|
||||
const auto& expr_column_concrete = assert_cast<const ColumnType&>(expr_column);
|
||||
const auto& min_value_column_concrete = assert_cast<const ColumnType&>(min_value_column);
|
||||
const auto& max_value_column_concrete = assert_cast<const ColumnType&>(max_value_column);
|
||||
auto& nested_column_concrete = assert_cast<ColumnInt64&>(nested_column);
|
||||
|
||||
size_t input_rows_count = expr_column.size();
|
||||
|
||||
|
||||
@ -89,4 +89,9 @@ suite("test_width_bucket_function", "arrow_flight_sql") {
|
||||
qt_select_width_bucket_3 "select width_bucket(10.0,0,11,10);"
|
||||
qt_select_width_bucket_4 "select width_bucket(10,0,10.1,10);"
|
||||
qt_select_width_bucket_5 "select width_bucket(10,0,10.10,10);"
|
||||
|
||||
test {
|
||||
sql "select width_bucket(4, 0, 8, 0)"
|
||||
exception "buckets must be a positive integer value"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user