Skip to content

Commit 998e070

Browse files
authored
[fix](bug) fix intersections/differences bug #34675 (#34697)
1 parent 836a974 commit 998e070

File tree

3 files changed

+11
-22
lines changed

3 files changed

+11
-22
lines changed

be/src/vec/exec/vset_operation_node.cpp

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

regression-test/data/correctness_p0/test_set_operation.out

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
-- !sql --
33
1
44

5+
-- !select1 --
6+

regression-test/suites/correctness_p0/test_set_operation.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,6 @@ suite("test_set_operation") {
6767
WHERE a = 3 ) ) ) ) c
6868
ORDER BY one_uid;
6969
"""
70+
71+
qt_select1 """ (select 0) intersect (select null); """
7072
}

0 commit comments

Comments
 (0)