[BUGFIX] wrong answer with with as + two phase agg (#10303)
This commit is contained in:
@ -27,6 +27,7 @@
|
||||
#include "vec/data_types/data_type_string.h"
|
||||
#include "vec/exprs/vexpr.h"
|
||||
#include "vec/exprs/vexpr_context.h"
|
||||
#include "vec/exprs/vslot_ref.h"
|
||||
#include "vec/utils/util.hpp"
|
||||
|
||||
namespace doris::vectorized {
|
||||
@ -531,8 +532,12 @@ Status AggregationNode::_merge_without_key(Block* block) {
|
||||
std::unique_ptr<char[]> deserialize_buffer(new char[_total_size_of_aggregate_states]);
|
||||
int rows = block->rows();
|
||||
for (int i = 0; i < _aggregate_evaluators.size(); ++i) {
|
||||
DCHECK(_aggregate_evaluators[i]->input_exprs_ctxs().size() == 1 &&
|
||||
_aggregate_evaluators[i]->input_exprs_ctxs()[0]->root()->is_slot_ref());
|
||||
int col_id =
|
||||
((VSlotRef*)_aggregate_evaluators[i]->input_exprs_ctxs()[0]->root())->column_id();
|
||||
if (_aggregate_evaluators[i]->is_merge()) {
|
||||
auto column = block->get_by_position(i).column;
|
||||
auto column = block->get_by_position(col_id).column;
|
||||
if (column->is_nullable()) {
|
||||
column = ((ColumnNullable*)column.get())->get_nested_column_ptr();
|
||||
}
|
||||
@ -1052,8 +1057,12 @@ Status AggregationNode::_merge_with_serialized_key(Block* block) {
|
||||
std::unique_ptr<char[]> deserialize_buffer(new char[_total_size_of_aggregate_states]);
|
||||
|
||||
for (int i = 0; i < _aggregate_evaluators.size(); ++i) {
|
||||
DCHECK(_aggregate_evaluators[i]->input_exprs_ctxs().size() == 1 &&
|
||||
_aggregate_evaluators[i]->input_exprs_ctxs()[0]->root()->is_slot_ref());
|
||||
int col_id =
|
||||
((VSlotRef*)_aggregate_evaluators[i]->input_exprs_ctxs()[0]->root())->column_id();
|
||||
if (_aggregate_evaluators[i]->is_merge()) {
|
||||
auto column = block->get_by_position(i + key_size).column;
|
||||
auto column = block->get_by_position(col_id).column;
|
||||
if (column->is_nullable()) {
|
||||
column = ((ColumnNullable*)column.get())->get_nested_column_ptr();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user