Skip to content

Commit a52c366

Browse files
authored
planner: fix potential panic when generating hints in statement summary (pingcap#46312) (pingcap#46393)
close pingcap#46311
1 parent b19b65c commit a52c366

File tree

2 files changed

+2
-3
lines changed

2 files changed

+2
-3
lines changed

planner/core/logical_plan_builder.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,7 @@ func (b *PlanBuilder) buildResultSetNode(ctx context.Context, node ast.ResultSet
410410
}
411411
}
412412
// `TableName` is not a select block, so we do not need to handle it.
413-
if !isTableName && b.ctx.GetSessionVars().PlannerSelectBlockAsName.Load() != nil {
414-
plannerSelectBlockAsName := *(b.ctx.GetSessionVars().PlannerSelectBlockAsName.Load())
413+
if plannerSelectBlockAsName := *(b.ctx.GetSessionVars().PlannerSelectBlockAsName.Load()); len(plannerSelectBlockAsName) > 0 && !isTableName {
415414
plannerSelectBlockAsName[p.SelectBlockOffset()] = ast.HintTable{DBName: p.OutputNames()[0].DBName, TableName: p.OutputNames()[0].TblName}
416415
}
417416
// Duplicate column name in one table is not allowed.

planner/core/planbuilder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ func NewPlanBuilder(opts ...PlanBuilderOpt) *PlanBuilder {
756756
func (b *PlanBuilder) Init(sctx sessionctx.Context, is infoschema.InfoSchema, processor *hint.BlockHintProcessor) (*PlanBuilder, []ast.HintTable) {
757757
savedBlockNames := sctx.GetSessionVars().PlannerSelectBlockAsName.Load()
758758
if processor == nil {
759-
sctx.GetSessionVars().PlannerSelectBlockAsName.Store(nil)
759+
sctx.GetSessionVars().PlannerSelectBlockAsName.Store(&[]ast.HintTable{})
760760
} else {
761761
newPlannerSelectBlockAsName := make([]ast.HintTable, processor.MaxSelectStmtOffset()+1)
762762
sctx.GetSessionVars().PlannerSelectBlockAsName.Store(&newPlannerSelectBlockAsName)

0 commit comments

Comments
 (0)