This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 998e0705c83 [fix](bug) fix intersections/differences bug #34675
(#34697)
998e0705c83 is described below
commit 998e0705c83d76bb7af7e1acf61a85697b1e073a
Author: HappenLee <[email protected]>
AuthorDate: Sat May 11 16:33:36 2024 +0800
[fix](bug) fix intersections/differences bug #34675 (#34697)
---
be/src/vec/exec/vset_operation_node.cpp | 29 ++++++----------------
.../data/correctness_p0/test_set_operation.out | 2 ++
.../correctness_p0/test_set_operation.groovy | 2 ++
3 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/be/src/vec/exec/vset_operation_node.cpp
b/be/src/vec/exec/vset_operation_node.cpp
index 40343b96f87..801d07b2bdd 100644
--- a/be/src/vec/exec/vset_operation_node.cpp
+++ b/be/src/vec/exec/vset_operation_node.cpp
@@ -287,7 +287,7 @@ Status
VSetOperationNode<is_intersect>::prepare(RuntimeState* state) {
}
for (int i = 0; i < _child_expr_lists[0].size(); ++i) {
const auto& ctx = _child_expr_lists[0][i];
- _build_not_ignore_null.push_back(ctx->root()->is_nullable());
+ _build_not_ignore_null.push_back(nullable_flags[i]);
_left_table_data_types.push_back(nullable_flags[i] ?
make_nullable(ctx->root()->data_type())
:
ctx->root()->data_type());
}
@@ -340,8 +340,7 @@ void VSetOperationNode<is_intersect>::hash_table_init() {
_build_key_sz.resize(_child_expr_lists[0].size());
_probe_key_sz.resize(_child_expr_lists[0].size());
for (int i = 0; i < _child_expr_lists[0].size(); ++i) {
- const auto vexpr = _child_expr_lists[0][i]->root();
- const auto& data_type = vexpr->data_type();
+ const auto& data_type = _left_table_data_types[i];
if (!data_type->have_maximum_size_of_value()) {
use_fixed_key = false;
@@ -504,14 +503,7 @@ void
VSetOperationNode<is_intersect>::add_result_columns(RowRefListWithFlags& va
auto it = value.begin();
for (auto idx = _build_col_idx.begin(); idx != _build_col_idx.end();
++idx) {
auto& column =
*_build_blocks[it->block_offset].get_by_position(idx->first).column;
- if (_mutable_cols[idx->second]->is_nullable() xor
column.is_nullable()) {
- DCHECK(_mutable_cols[idx->second]->is_nullable());
- ((ColumnNullable*)(_mutable_cols[idx->second].get()))
- ->insert_from_not_nullable(column, it->row_num);
-
- } else {
- _mutable_cols[idx->second]->insert_from(column, it->row_num);
- }
+ _mutable_cols[idx->second]->insert_from(column, it->row_num);
}
block_size++;
}
@@ -592,18 +584,11 @@ Status
VSetOperationNode<is_intersect>::extract_build_column(Block& block,
block.get_by_position(result_col_id).column =
block.get_by_position(result_col_id).column->convert_to_full_column_if_const();
- auto column = block.get_by_position(result_col_id).column.get();
-
- if (auto* nullable = check_and_get_column<ColumnNullable>(*column)) {
- auto& col_nested = nullable->get_nested_column();
- if (_build_not_ignore_null[i])
- raw_ptrs[i] = nullable;
- else
- raw_ptrs[i] = &col_nested;
-
- } else {
- raw_ptrs[i] = column;
+ if (_build_not_ignore_null[i]) {
+ block.get_by_position(result_col_id).column =
+ make_nullable(block.get_by_position(result_col_id).column);
}
+ raw_ptrs[i] = block.get_by_position(result_col_id).column.get();
DCHECK_GE(result_col_id, 0);
_build_col_idx.insert({result_col_id, i});
}
diff --git a/regression-test/data/correctness_p0/test_set_operation.out
b/regression-test/data/correctness_p0/test_set_operation.out
index 095c7b20356..52643282266 100644
--- a/regression-test/data/correctness_p0/test_set_operation.out
+++ b/regression-test/data/correctness_p0/test_set_operation.out
@@ -2,3 +2,5 @@
-- !sql --
1
+-- !select1 --
+
diff --git a/regression-test/suites/correctness_p0/test_set_operation.groovy
b/regression-test/suites/correctness_p0/test_set_operation.groovy
index cd366f4d2bf..639794c0608 100644
--- a/regression-test/suites/correctness_p0/test_set_operation.groovy
+++ b/regression-test/suites/correctness_p0/test_set_operation.groovy
@@ -67,4 +67,6 @@ suite("test_set_operation") {
WHERE a = 3 ) ) ) ) c
ORDER BY one_uid;
"""
+
+ qt_select1 """ (select 0) intersect (select null); """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]