@@ -287,7 +287,7 @@ Status VSetOperationNode<is_intersect>::prepare(RuntimeState* state) {
287287 }
288288 for (int i = 0 ; i < _child_expr_lists[0 ].size (); ++i) {
289289 const auto & ctx = _child_expr_lists[0 ][i];
290- _build_not_ignore_null.push_back (ctx-> root ()-> is_nullable () );
290+ _build_not_ignore_null.push_back (nullable_flags[i] );
291291 _left_table_data_types.push_back (nullable_flags[i] ? make_nullable (ctx->root ()->data_type ())
292292 : ctx->root ()->data_type ());
293293 }
@@ -340,8 +340,7 @@ void VSetOperationNode<is_intersect>::hash_table_init() {
340340 _build_key_sz.resize (_child_expr_lists[0 ].size ());
341341 _probe_key_sz.resize (_child_expr_lists[0 ].size ());
342342 for (int i = 0 ; i < _child_expr_lists[0 ].size (); ++i) {
343- const auto vexpr = _child_expr_lists[0 ][i]->root ();
344- const auto & data_type = vexpr->data_type ();
343+ const auto & data_type = _left_table_data_types[i];
345344
346345 if (!data_type->have_maximum_size_of_value ()) {
347346 use_fixed_key = false ;
@@ -504,14 +503,7 @@ void VSetOperationNode<is_intersect>::add_result_columns(RowRefListWithFlags& va
504503 auto it = value.begin ();
505504 for (auto idx = _build_col_idx.begin (); idx != _build_col_idx.end (); ++idx) {
506505 auto & column = *_build_blocks[it->block_offset ].get_by_position (idx->first ).column ;
507- if (_mutable_cols[idx->second ]->is_nullable () xor column.is_nullable ()) {
508- DCHECK (_mutable_cols[idx->second ]->is_nullable ());
509- ((ColumnNullable*)(_mutable_cols[idx->second ].get ()))
510- ->insert_from_not_nullable (column, it->row_num );
511-
512- } else {
513- _mutable_cols[idx->second ]->insert_from (column, it->row_num );
514- }
506+ _mutable_cols[idx->second ]->insert_from (column, it->row_num );
515507 }
516508 block_size++;
517509}
@@ -592,18 +584,11 @@ Status VSetOperationNode<is_intersect>::extract_build_column(Block& block,
592584
593585 block.get_by_position (result_col_id).column =
594586 block.get_by_position (result_col_id).column ->convert_to_full_column_if_const ();
595- auto column = block.get_by_position (result_col_id).column .get ();
596-
597- if (auto * nullable = check_and_get_column<ColumnNullable>(*column)) {
598- auto & col_nested = nullable->get_nested_column ();
599- if (_build_not_ignore_null[i])
600- raw_ptrs[i] = nullable;
601- else
602- raw_ptrs[i] = &col_nested;
603-
604- } else {
605- raw_ptrs[i] = column;
587+ if (_build_not_ignore_null[i]) {
588+ block.get_by_position (result_col_id).column =
589+ make_nullable (block.get_by_position (result_col_id).column );
606590 }
591+ raw_ptrs[i] = block.get_by_position (result_col_id).column .get ();
607592 DCHECK_GE (result_col_id, 0 );
608593 _build_col_idx.insert ({result_col_id, i});
609594 }
0 commit comments