|
19 | 19 |
|
20 | 20 | #include "common/status.h" |
21 | 21 | #include "vec/core/block.h" |
| 22 | +#include "vec/core/column_with_type_and_name.h" |
22 | 23 | #include "vec/functions/complex_hash_map_dictionary.h" |
23 | 24 | #include "vec/functions/dictionary_factory.h" |
24 | 25 | #include "vec/functions/dictionary_util.h" |
@@ -53,20 +54,21 @@ Status DictSinkLocalState::load_dict(RuntimeState* state) { |
53 | 54 |
|
54 | 55 | for (long key_expr_id : p._key_output_expr_slots) { |
55 | 56 | auto key_expr_ctx = _output_vexpr_ctxs[key_expr_id]; |
56 | | - int key_column_id = -1; |
57 | | - RETURN_IF_ERROR(key_expr_ctx->execute(&input_block, &key_column_id)); |
58 | | - key_data.push_back(input_block.get_by_position(key_column_id)); |
| 57 | + vectorized::ColumnWithTypeAndName key_exec_data; |
| 58 | + RETURN_IF_ERROR(key_expr_ctx->execute(&input_block, key_exec_data)); |
| 59 | + |
| 60 | + key_data.push_back(key_exec_data); |
59 | 61 | } |
60 | 62 |
|
61 | 63 | for (size_t i = 0; i < p._value_output_expr_slots.size(); i++) { |
62 | 64 | auto value_expr_id = p._value_output_expr_slots[i]; |
63 | 65 | auto value_name = p._value_names[i]; |
64 | 66 | auto value_expr_ctx = _output_vexpr_ctxs[value_expr_id]; |
65 | | - int value_column_id = -1; |
66 | | - RETURN_IF_ERROR(value_expr_ctx->execute(&input_block, &value_column_id)); |
67 | | - auto att_data = input_block.get_by_position(value_column_id); |
68 | | - att_data.name = value_name; |
69 | | - value_data.push_back(att_data); |
| 67 | + |
| 68 | + vectorized::ColumnPtr value_column; |
| 69 | + RETURN_IF_ERROR(value_expr_ctx->execute(&input_block, value_column)); |
| 70 | + auto value_type = value_expr_ctx->execute_type(&input_block); |
| 71 | + value_data.push_back({value_column, value_type, value_name}); |
70 | 72 | } |
71 | 73 |
|
72 | 74 | RETURN_IF_ERROR(check_dict_input_data(key_data, value_data, p._skip_null_key)); |
|
0 commit comments