Fix THERE_IS_NO_COLUMN error in case move to PREWHERE applied to storage merge inside another table function

This commit is contained in:
vdimir 2024-06-06 08:13:51 +00:00
parent 2cba91f555
commit ac22904ff2
No known key found for this signature in database
GPG Key ID: 6EE4CE2BEDC51862
3 changed files with 56 additions and 0 deletions

View File

@ -405,6 +405,11 @@ ReadFromMerge::ReadFromMerge(
void ReadFromMerge::updatePrewhereInfo(const PrewhereInfoPtr & prewhere_info_value) void ReadFromMerge::updatePrewhereInfo(const PrewhereInfoPtr & prewhere_info_value)
{ {
SourceStepWithFilter::updatePrewhereInfo(prewhere_info_value); SourceStepWithFilter::updatePrewhereInfo(prewhere_info_value);
/// Rebuild children plans to apply new prewhere info
child_plans.reset();
filterTablesAndCreateChildrenPlans();
common_header = applyPrewhereActions(common_header, prewhere_info); common_header = applyPrewhereActions(common_header, prewhere_info);
} }
@ -879,6 +884,9 @@ SelectQueryInfo ReadFromMerge::getModifiedQueryInfo(const ContextMutablePtr & mo
if (modified_query_info.optimized_prewhere_info && !modified_query_info.prewhere_info) if (modified_query_info.optimized_prewhere_info && !modified_query_info.prewhere_info)
modified_query_info.prewhere_info = modified_query_info.optimized_prewhere_info; modified_query_info.prewhere_info = modified_query_info.optimized_prewhere_info;
if (prewhere_info && !modified_query_info.prewhere_info)
modified_query_info.prewhere_info = prewhere_info;
if (modified_query_info.planner_context) if (modified_query_info.planner_context)
modified_query_info.planner_context = std::make_shared<PlannerContext>(modified_context, modified_query_info.planner_context); modified_query_info.planner_context = std::make_shared<PlannerContext>(modified_context, modified_query_info.planner_context);

View File

@ -0,0 +1,7 @@
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever
a1451105-722e-4fe7-bfaa-65ad2ae249c2 whatever

View File

@ -0,0 +1,41 @@
-- Tags: distributed
DROP TABLE IF EXISTS ids;
DROP TABLE IF EXISTS data;
DROP TABLE IF EXISTS data2;
CREATE TABLE ids (id UUID, whatever String) Engine=MergeTree ORDER BY tuple();
INSERT INTO ids VALUES ('a1451105-722e-4fe7-bfaa-65ad2ae249c2', 'whatever');
CREATE TABLE data (id UUID, event_time DateTime, status String) Engine=MergeTree ORDER BY tuple();
INSERT INTO data VALUES ('a1451105-722e-4fe7-bfaa-65ad2ae249c2', '2000-01-01', 'CREATED');
CREATE TABLE data2 (id UUID, event_time DateTime, status String) Engine=MergeTree ORDER BY tuple();
INSERT INTO data2 VALUES ('a1451105-722e-4fe7-bfaa-65ad2ae249c2', '2000-01-02', 'CREATED');
SELECT
id,
whatever
FROM ids AS l
INNER JOIN merge(currentDatabase(), 'data*') AS s ON l.id = s.id
WHERE (status IN ['CREATED', 'CREATING'])
ORDER BY event_time DESC
;
SELECT
id,
whatever
FROM ids AS l
INNER JOIN clusterAllReplicas(test_cluster_two_shards, merge(currentDatabase(), 'data*')) AS s ON l.id = s.id
WHERE (status IN ['CREATED', 'CREATING'])
ORDER BY event_time DESC
;
SELECT
id,
whatever
FROM ids AS l
INNER JOIN view(SELECT * FROM merge(currentDatabase(), 'data*')) AS s ON l.id = s.id
WHERE (status IN ['CREATED', 'CREATING'])
ORDER BY event_time DESC
;