@@ -513,7 +513,7 @@ func (b *PlanBuilder) buildSelection(p LogicalPlan, where ast.ExprNode, AggMappe
513
513
514
514
// buildProjectionFieldNameFromColumns builds the field name, table name and database name when field expression is a column reference.
515
515
func (b * PlanBuilder ) buildProjectionFieldNameFromColumns (field * ast.SelectField , c * expression.Column ) (colName , origColName , tblName , origTblName , dbName model.CIStr ) {
516
- if astCol , ok := getInnerFromParentheses (field .Expr ).(* ast.ColumnNameExpr ); ok {
516
+ if astCol , ok := getInnerFromParenthesesAndUnaryPlus (field .Expr ).(* ast.ColumnNameExpr ); ok {
517
517
origColName , tblName , dbName = astCol .Name .Name , astCol .Name .Table , astCol .Name .Schema
518
518
}
519
519
if field .AsName .L != "" {
@@ -537,7 +537,7 @@ func (b *PlanBuilder) buildProjectionFieldNameFromExpressions(field *ast.SelectF
537
537
return agg .Args [0 ].(* ast.ColumnNameExpr ).Name .Name
538
538
}
539
539
540
- innerExpr := getInnerFromParentheses (field .Expr )
540
+ innerExpr := getInnerFromParenthesesAndUnaryPlus (field .Expr )
541
541
valueExpr , isValueExpr := innerExpr .(* driver.ValueExpr )
542
542
543
543
// Non-literal: Output as inputed, except that comments need to be removed.
@@ -2468,9 +2468,12 @@ func appendVisitInfo(vi []visitInfo, priv mysql.PrivilegeType, db, tbl, col stri
2468
2468
})
2469
2469
}
2470
2470
2471
- func getInnerFromParentheses (expr ast.ExprNode ) ast.ExprNode {
2471
+ func getInnerFromParenthesesAndUnaryPlus (expr ast.ExprNode ) ast.ExprNode {
2472
2472
if pexpr , ok := expr .(* ast.ParenthesesExpr ); ok {
2473
- return getInnerFromParentheses (pexpr .Expr )
2473
+ return getInnerFromParenthesesAndUnaryPlus (pexpr .Expr )
2474
+ }
2475
+ if uexpr , ok := expr .(* ast.UnaryOperationExpr ); ok && uexpr .Op == opcode .Plus {
2476
+ return getInnerFromParenthesesAndUnaryPlus (uexpr .V )
2474
2477
}
2475
2478
return expr
2476
2479
}
0 commit comments