HappenLee commented on code in PR #17970:
URL: https://github.com/apache/doris/pull/17970#discussion_r1148771251
##########
be/src/vec/functions/array/function_array_set.h:
##########
@@ -150,35 +150,86 @@ struct ArraySetImpl {
}
static Status execute(ColumnPtr& res_ptr, const ColumnArrayExecutionData&
left_data,
- const ColumnArrayExecutionData& right_data) {
+ const ColumnArrayExecutionData& right_data, bool
left_const,
+ bool right_const) {
ColumnArrayMutableData dst;
if (left_data.nested_nullmap_data || right_data.nested_nullmap_data) {
dst = create_mutable_data(left_data.nested_col, true);
} else {
dst = create_mutable_data(left_data.nested_col, false);
}
ColumnPtr res_column;
- if (_execute_internal<ColumnString>(dst, left_data, right_data) ||
- _execute_internal<ColumnDate>(dst, left_data, right_data) ||
- _execute_internal<ColumnDateTime>(dst, left_data, right_data) ||
- _execute_internal<ColumnDateV2>(dst, left_data, right_data) ||
- _execute_internal<ColumnDateTimeV2>(dst, left_data, right_data) ||
- _execute_internal<ColumnUInt8>(dst, left_data, right_data) ||
- _execute_internal<ColumnInt8>(dst, left_data, right_data) ||
- _execute_internal<ColumnInt16>(dst, left_data, right_data) ||
- _execute_internal<ColumnInt32>(dst, left_data, right_data) ||
- _execute_internal<ColumnInt64>(dst, left_data, right_data) ||
- _execute_internal<ColumnInt128>(dst, left_data, right_data) ||
- _execute_internal<ColumnFloat32>(dst, left_data, right_data) ||
- _execute_internal<ColumnFloat64>(dst, left_data, right_data) ||
- _execute_internal<ColumnDecimal32>(dst, left_data, right_data) ||
- _execute_internal<ColumnDecimal64>(dst, left_data, right_data) ||
- _execute_internal<ColumnDecimal128I>(dst, left_data, right_data) ||
- _execute_internal<ColumnDecimal128>(dst, left_data, right_data)) {
- res_column = assemble_column_array(dst);
- if (res_column) {
- res_ptr = std::move(res_column);
- return Status::OK();
+ if (left_const) {
+ if (_execute_internal_lconst<ColumnString>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDate>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDateTime>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDateV2>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDateTimeV2>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnUInt8>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnInt8>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnInt16>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnInt32>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnInt64>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnInt128>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnFloat32>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnFloat64>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDecimal32>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDecimal64>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDecimal128I>(dst, left_data,
right_data) ||
+ _execute_internal_lconst<ColumnDecimal128>(dst, left_data,
right_data)) {
+ res_column = assemble_column_array(dst);
+ if (res_column) {
+ res_ptr = std::move(res_column);
+ return Status::OK();
+ }
+ }
+ } else if (right_const) {
+ if (_execute_internal_rconst<ColumnString>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDate>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDateTime>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDateV2>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDateTimeV2>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnUInt8>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnInt8>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnInt16>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnInt32>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnInt64>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnInt128>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnFloat32>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnFloat64>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDecimal32>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDecimal64>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDecimal128I>(dst, left_data,
right_data) ||
+ _execute_internal_rconst<ColumnDecimal128>(dst, left_data,
right_data)) {
+ res_column = assemble_column_array(dst);
+ if (res_column) {
Review Comment:
```
res_column = assemble_column_array(dst);
if (res_column) {
res_ptr = std::move(res_column);
return Status::OK();
}
```
the code seems should out of the if / else if / else, be execed in the end
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]