[fix](set) incorrect result of set operator (#35607)

If there are duplicated expressions in the select list, the result will
be incorrect.

## Proposed changes

Issue Number: close #28438

<!--Describe your changes.-->
This commit is contained in:
Jerry Hu
2024-05-30 10:33:13 +08:00
committed by yiguolei
parent 9cd9207304
commit fb9363f042
7 changed files with 30 additions and 10 deletions

View File

@ -335,8 +335,8 @@ void VSetOperationNode<is_intersect>::add_result_columns(RowRefListWithFlags& va
int& block_size) {
auto it = value.begin();
for (auto idx = _build_col_idx.begin(); idx != _build_col_idx.end(); ++idx) {
const auto& column = *_build_block.get_by_position(idx->first).column;
_mutable_cols[idx->second]->insert_from(column, it->row_num);
const auto& column = *_build_block.get_by_position(idx->second).column;
_mutable_cols[idx->first]->insert_from(column, it->row_num);
}
block_size++;
}
@ -426,7 +426,7 @@ Status VSetOperationNode<is_intersect>::extract_build_column(Block& block,
const auto* column = block.get_by_position(result_col_id).column.get();
raw_ptrs[i] = column;
DCHECK_GE(result_col_id, 0);
_build_col_idx.insert({result_col_id, i});
_build_col_idx.insert({i, result_col_id});
}
return Status::OK();
}