@@ -472,20 +472,22 @@ func (b *planBuilder) buildSelection(p LogicalPlan, where ast.ExprNode, AggMappe
472
472
}
473
473
474
474
// buildProjectionFieldNameFromColumns builds the field name, table name and database name when field expression is a column reference.
475
- func (b * planBuilder ) buildProjectionFieldNameFromColumns (field * ast.SelectField , c * expression.Column ) (colName , tblName , origTblName , dbName model.CIStr ) {
475
+ func (b * planBuilder ) buildProjectionFieldNameFromColumns (field * ast.SelectField , c * expression.Column ) (colName , origColName , tblName , origTblName , dbName model.CIStr ) {
476
476
if astCol , ok := getInnerFromParentheses (field .Expr ).(* ast.ColumnNameExpr ); ok {
477
- colName , tblName , dbName = astCol .Name .Name , astCol .Name .Table , astCol .Name .Schema
477
+ origColName , tblName , dbName = astCol .Name .Name , astCol .Name .Table , astCol .Name .Schema
478
478
}
479
479
if field .AsName .L != "" {
480
480
colName = field .AsName
481
+ } else {
482
+ colName = origColName
481
483
}
482
484
if tblName .L == "" {
483
485
tblName = c .TblName
484
486
}
485
487
if dbName .L == "" {
486
488
dbName = c .DBName
487
489
}
488
- return colName , tblName , c .OrigTblName , c .DBName
490
+ return colName , origColName , tblName , c .OrigTblName , c .DBName
489
491
}
490
492
491
493
// buildProjectionFieldNameFromExpressions builds the field name when field expression is a normal expression.
@@ -531,10 +533,10 @@ func (b *planBuilder) buildProjectionFieldNameFromExpressions(field *ast.SelectF
531
533
532
534
// buildProjectionField builds the field object according to SelectField in projection.
533
535
func (b * planBuilder ) buildProjectionField (id , position int , field * ast.SelectField , expr expression.Expression ) * expression.Column {
534
- var origTblName , tblName , colName , dbName model.CIStr
536
+ var origTblName , tblName , origColName , colName , dbName model.CIStr
535
537
if c , ok := expr .(* expression.Column ); ok && ! c .IsAggOrSubq {
536
538
// Field is a column reference.
537
- colName , tblName , origTblName , dbName = b .buildProjectionFieldNameFromColumns (field , c )
539
+ colName , origColName , tblName , origTblName , dbName = b .buildProjectionFieldNameFromColumns (field , c )
538
540
} else if field .AsName .L != "" {
539
541
// Field has alias.
540
542
colName = field .AsName
@@ -547,6 +549,7 @@ func (b *planBuilder) buildProjectionField(id, position int, field *ast.SelectFi
547
549
TblName : tblName ,
548
550
OrigTblName : origTblName ,
549
551
ColName : colName ,
552
+ OrigColName : origColName ,
550
553
DBName : dbName ,
551
554
RetType : expr .GetType (),
552
555
}
0 commit comments