diff --git a/pkg/sql/plan2/build_expr.go b/pkg/sql/plan2/build_expr.go index 24a2fa8fe57ddae9f0a60e1d4ff4df9f1c1fdab8..b84a3c587a5523e8f0995adcce0814a8b8f6a516 100644 --- a/pkg/sql/plan2/build_expr.go +++ b/pkg/sql/plan2/build_expr.go @@ -304,7 +304,7 @@ func buildColRefExpr(astExpr *tree.UnresolvedName, ctx CompilerContext, query *Q name := astExpr.Parts[0] if binderCtx != nil { if val, ok := binderCtx.columnAlias[name]; ok { - return val, nil + return DeepCopyExpr(val), nil } } diff --git a/pkg/sql/plan2/build_select.go b/pkg/sql/plan2/build_select.go index b8e7117d7ef106178d81df78f771e8028a188800..e8d58530a2aeebea3827c7d707f7ebf8b6bef0d3 100644 --- a/pkg/sql/plan2/build_select.go +++ b/pkg/sql/plan2/build_select.go @@ -106,7 +106,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx break } - node.ProjectList = append(node.ProjectList, expr) + node.ProjectList = append(node.ProjectList, DeepCopyExpr(expr)) } switch listExpr := expr.Expr.(type) { case *plan.Expr_List: @@ -129,7 +129,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx } expr.TableName = "" expr.ColName = alias - node.ProjectList = append(node.ProjectList, expr) + node.ProjectList = append(node.ProjectList, DeepCopyExpr(expr)) } selectList = append(selectList, expr) } @@ -199,7 +199,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx for _, selectExpr := range selectExprs { alias := string(selectExpr.As) if len(alias) != 0 { - sortNode.ProjectList = append(sortNode.ProjectList, binderCtx.columnAlias[alias]) + sortNode.ProjectList = append(sortNode.ProjectList, DeepCopyExpr(binderCtx.columnAlias[alias])) continue } expr, _, err := buildExpr(selectExpr.Expr, ctx, query, sortNode, binderCtx, false) diff --git a/pkg/sql/plan2/build_util.go b/pkg/sql/plan2/build_util.go index e7bf9c8699d578665a12abac78dbfaee1ea63c7a..950f3efb72f9f3ee4191cf0c8e996133cb98516b 100644 --- a/pkg/sql/plan2/build_util.go +++ b/pkg/sql/plan2/build_util.go @@ -227,11 +227,11 @@ func fillJoinProjectList(binderCtx *BinderContext, usingCols map[string]int, nod // select * from R join S using(a, b) // we get projectList as : [a, b, r1, r2, r3, s1, s2] if ok { - node.ProjectList[colIdx] = colExpr - projectNode.ProjectList[colIdx] = colExpr + node.ProjectList[colIdx] = DeepCopyExpr(colExpr) + projectNode.ProjectList[colIdx] = DeepCopyExpr(colExpr) } else { - node.ProjectList[projNodeIdx] = colExpr - projectNode.ProjectList[projNodeIdx] = colExpr + node.ProjectList[projNodeIdx] = DeepCopyExpr(colExpr) + projectNode.ProjectList[projNodeIdx] = DeepCopyExpr(colExpr) projNodeIdx++ } joinNodeIdx++