From 5128edd548991f4ee507ebeef1d78b2b58222f9c Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Fri, 12 Jan 2024 18:21:33 +0800 Subject: [PATCH] planner: fix nil pointer at expression.(*CorrelatedColumn).Eval (#42789) (#48978) close pingcap/tidb#42739 --- pkg/planner/core/logical_plan_builder.go | 2 ++ .../r/planner/core/tests/prepare/issue.result | 21 +++++++++++++++++++ .../t/planner/core/tests/prepare/issue.test | 21 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/pkg/planner/core/logical_plan_builder.go b/pkg/planner/core/logical_plan_builder.go index 24e946ae3efc8..6cf9cd0a8d5f7 100644 --- a/pkg/planner/core/logical_plan_builder.go +++ b/pkg/planner/core/logical_plan_builder.go @@ -413,6 +413,7 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu if _, ok = b.correlatedAggMapper[aggFuncList[j]]; !ok { b.correlatedAggMapper[aggFuncList[j]] = &expression.CorrelatedColumn{ Column: *schema4Agg.Columns[aggIndexMap[j]], + Data: new(types.Datum), } } b.correlatedAggMapper[aggFunc] = b.correlatedAggMapper[aggFuncList[j]] @@ -434,6 +435,7 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu if _, ok := correlatedAggMap[aggFunc]; ok { b.correlatedAggMapper[aggFunc] = &expression.CorrelatedColumn{ Column: column, + Data: new(types.Datum), } } } diff --git a/tests/integrationtest/r/planner/core/tests/prepare/issue.result b/tests/integrationtest/r/planner/core/tests/prepare/issue.result index 34c3af078411e..8eb801d055922 100644 --- a/tests/integrationtest/r/planner/core/tests/prepare/issue.result +++ b/tests/integrationtest/r/planner/core/tests/prepare/issue.result @@ -425,3 +425,24 @@ execute st1 using @t; select count(*) from t4; count(*) 2 +use test; +drop table if exists t0; +CREATE TABLE t0 (c1 double, c2 double); +select +exists ( +select +subq_2.c0 as c8 +from +(select +ref_153.c1 as c0 +from +t0 as ref_153 +group by ref_153.c1 having 0 <> ( +select 1 +from +t0 as ref_173 +where count(ref_153.c2) = avg(ref_153.c2) +order by c1 desc limit 1)) as subq_2 +) as c10; +c10 +0 diff --git a/tests/integrationtest/t/planner/core/tests/prepare/issue.test b/tests/integrationtest/t/planner/core/tests/prepare/issue.test index e15e95ca30385..c74c5692c8dd1 100644 --- a/tests/integrationtest/t/planner/core/tests/prepare/issue.test +++ b/tests/integrationtest/t/planner/core/tests/prepare/issue.test @@ -287,3 +287,24 @@ set @t='2022-01-01 00:00:00.000000'; execute st1 using @t; select count(*) from t4; +# TestIssue42739 + +use test; +drop table if exists t0; +CREATE TABLE t0 (c1 double, c2 double); +select + exists ( + select + subq_2.c0 as c8 + from + (select + ref_153.c1 as c0 + from + t0 as ref_153 + group by ref_153.c1 having 0 <> ( + select 1 + from + t0 as ref_173 + where count(ref_153.c2) = avg(ref_153.c2) + order by c1 desc limit 1)) as subq_2 + ) as c10;