[branch-2.1](fix) fix incorrect result of hash join with const column (#45630)

This commit is contained in:
Xujian Duan
2024-12-19 19:14:38 +08:00
committed by GitHub
parent f966088fd0
commit 4b7c2eaa7d
3 changed files with 85 additions and 1 deletions

View File

@ -43,7 +43,11 @@ Status Partitioner<HashValueType, ChannelIds>::do_partitioning(RuntimeState* sta
RETURN_IF_ERROR(_get_partition_column_result(block, result));
}
for (int j = 0; j < result_size; ++j) {
_do_hash(unpack_if_const(block->get_by_position(result[j]).column).first, hashes, j);
const auto& [col, is_const] = unpack_if_const(block->get_by_position(result[j]).column);
if (is_const) {
continue;
}
_do_hash(col, hashes, j);
}
for (int i = 0; i < rows; i++) {

View File

@ -0,0 +1,9 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !sql1 --
0 2024-10-31 1 \N \N \N
0 2024-11-01 1 0 2024-11-01 2
-- !sql1 --
0 2024-10-31 1 \N \N \N
0 2024-11-01 1 0 2024-11-01 2

View File

@ -0,0 +1,71 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
suite("test_join_with_const", "query,p0") {
def left_table = "left_table"
def right_table = "right_table"
sql " drop table if exists ${left_table}; ";
sql " drop table if exists ${right_table}; ";
sql """
create table ${left_table} (c1 datev2, c2 bigint sum)
aggregate key (c1)
DISTRIBUTED BY HASH(c1)
BUCKETS 3
properties ("replication_num" = "1");
"""
sql """
create table ${right_table} (c1 datev2, c2 bigint sum)
aggregate key (c1)
DISTRIBUTED BY HASH(c1)
BUCKETS 3
properties ("replication_num" = "1");
"""
sql """ insert into ${left_table} values ("2024-10-31", 1), ("2024-11-01", 1); """
sql """ insert into ${right_table} values ("2024-11-01", 2); """
def join_sql_str = """
select
*
from
(
select 0 z, c1, sum(c2) c2
from ${left_table}
group by 1, 2
) t1
FULL JOIN [shuffle]
(
select 0 z, c1, sum(c2) c2
from ${right_table}
group by 1, 2
) t2
on t1.z = t2.z
and t1.c1 = t2.c1
order by t1.c1
"""
sql "set enable_nereids_planner = false;"
qt_sql1 "${join_sql_str}"
sql "set enable_nereids_planner = true;"
qt_sql1 "${join_sql_str}"
sql "drop table ${left_table}"
sql "drop table ${right_table}"
}