Skip to content

Commit

Permalink
planner: fix nil pointer at expression.(*CorrelatedColumn).Eval (#42789)
Browse files Browse the repository at this point in the history
close #42739
  • Loading branch information
CbcWestwolf authored Nov 28, 2023
1 parent 4309c0f commit 37afb03
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
2 changes: 2 additions & 0 deletions pkg/planner/core/logical_plan_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]]
Expand All @@ -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),
}
}
}
Expand Down
21 changes: 21 additions & 0 deletions tests/integrationtest/r/planner/core/tests/prepare/issue.result
Original file line number Diff line number Diff line change
Expand Up @@ -561,3 +561,24 @@ select @@last_plan_from_cache;
@@last_plan_from_cache
1
set tidb_enable_prepared_plan_cache=DEFAULT;
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
21 changes: 21 additions & 0 deletions tests/integrationtest/t/planner/core/tests/prepare/issue.test
Original file line number Diff line number Diff line change
Expand Up @@ -405,3 +405,24 @@ select @@last_plan_from_cache;

set tidb_enable_prepared_plan_cache=DEFAULT;

# 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;

0 comments on commit 37afb03

Please sign in to comment.