mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 09:32:06 +00:00
Merge pull request #57196 from amosbird/fix-57194
Fix incorrect JOIN plan optimization with partially materialized normal projection
This commit is contained in:
commit
4c2de5219d
@ -268,7 +268,7 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto & main_stream = iter->node->children.front()->step->getOutputStream();
|
||||
const auto & main_stream = iter->node->children[iter->next_child - 1]->step->getOutputStream();
|
||||
const auto * proj_stream = &next_node->step->getOutputStream();
|
||||
|
||||
if (auto materializing = makeMaterializingDAG(proj_stream->header, main_stream.header))
|
||||
@ -284,7 +284,7 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
|
||||
auto & union_node = nodes.emplace_back();
|
||||
DataStreams input_streams = {main_stream, *proj_stream};
|
||||
union_node.step = std::make_unique<UnionStep>(std::move(input_streams));
|
||||
union_node.children = {iter->node->children.front(), next_node};
|
||||
union_node.children = {iter->node->children[iter->next_child - 1], next_node};
|
||||
iter->node->children[iter->next_child - 1] = &union_node;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,13 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
|
||||
CREATE TABLE t1 (id UInt32, s String) Engine = MergeTree ORDER BY id;
|
||||
CREATE TABLE t2 (id1 UInt32, id2 UInt32) Engine = MergeTree ORDER BY id1 SETTINGS index_granularity = 1;
|
||||
INSERT INTO t2 SELECT number, number from numbers(100);
|
||||
ALTER TABLE t2 ADD PROJECTION proj (SELECT id2 ORDER BY id2);
|
||||
INSERT INTO t2 SELECT number, number from numbers(100);
|
||||
|
||||
SELECT s FROM t1 as lhs LEFT JOIN (SELECT * FROM t2 WHERE id2 = 2) as rhs ON lhs.id = rhs.id2;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
Loading…
Reference in New Issue
Block a user