mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-11 17:02:25 +00:00
Merge pull request #62984 from ClickHouse/backport/24.3/62916
Backport #62916 to 24.3: Fix PREWHERE for StorageBuffer with different source table column types.
This commit is contained in:
commit
7b775b608d
@ -299,8 +299,35 @@ void StorageBuffer::read(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
auto src_table_query_info = query_info;
|
||||||
|
if (src_table_query_info.prewhere_info)
|
||||||
|
{
|
||||||
|
auto actions_dag = ActionsDAG::makeConvertingActions(
|
||||||
|
header_after_adding_defaults.getColumnsWithTypeAndName(),
|
||||||
|
header.getColumnsWithTypeAndName(),
|
||||||
|
ActionsDAG::MatchColumnsMode::Name);
|
||||||
|
|
||||||
|
if (src_table_query_info.prewhere_info->row_level_filter)
|
||||||
|
{
|
||||||
|
src_table_query_info.prewhere_info->row_level_filter = ActionsDAG::merge(
|
||||||
|
std::move(*actions_dag->clone()),
|
||||||
|
std::move(*src_table_query_info.prewhere_info->row_level_filter));
|
||||||
|
|
||||||
|
src_table_query_info.prewhere_info->row_level_filter->removeUnusedActions();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src_table_query_info.prewhere_info->prewhere_actions)
|
||||||
|
{
|
||||||
|
src_table_query_info.prewhere_info->prewhere_actions = ActionsDAG::merge(
|
||||||
|
std::move(*actions_dag->clone()),
|
||||||
|
std::move(*src_table_query_info.prewhere_info->prewhere_actions));
|
||||||
|
|
||||||
|
src_table_query_info.prewhere_info->prewhere_actions->removeUnusedActions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
destination->read(
|
destination->read(
|
||||||
query_plan, columns_intersection, destination_snapshot, query_info,
|
query_plan, columns_intersection, destination_snapshot, src_table_query_info,
|
||||||
local_context, processed_stage, max_block_size, num_streams);
|
local_context, processed_stage, max_block_size, num_streams);
|
||||||
|
|
||||||
if (query_plan.isInitialized())
|
if (query_plan.isInitialized())
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
1
|
||||||
|
1
|
@ -0,0 +1,15 @@
|
|||||||
|
DROP TABLE IF EXISTS buffer_table1__fuzz_28;
|
||||||
|
DROP TABLE IF EXISTS merge_tree_table1;
|
||||||
|
|
||||||
|
CREATE TABLE merge_tree_table1 (`x` UInt32) ENGINE = MergeTree ORDER BY x;
|
||||||
|
INSERT INTO merge_tree_table1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||||
|
|
||||||
|
SET send_logs_level='error';
|
||||||
|
|
||||||
|
CREATE TABLE buffer_table1__fuzz_28 (`x` Nullable(UInt32)) ENGINE = Buffer(currentDatabase(), 'merge_tree_table1', 16, 10, 60, 10, 1000, 1048576, 2097152);
|
||||||
|
|
||||||
|
SELECT * FROM buffer_table1__fuzz_28 PREWHERE x = toLowCardinality(1);
|
||||||
|
|
||||||
|
CREATE ROW POLICY rp ON buffer_table1__fuzz_28 FOR SELECT USING x = toLowCardinality(1) TO default;
|
||||||
|
|
||||||
|
SELECT * FROM buffer_table1__fuzz_28;
|
Loading…
Reference in New Issue
Block a user