/**
  * It returns an original column name if it is aliased column reference. Otherwise, it will return
  * NULL.
  */
 public String checkAndGetIfAliasedColumn(String name) {
   Expr expr = getExpr(name);
   if (expr != null && expr.getType() == OpType.Column) {
     ColumnReferenceExpr column = (ColumnReferenceExpr) expr;
     if (!column.getCanonicalName().equals(name)) {
       return column.getCanonicalName();
     }
   }
   return null;
 }
 @Override
 public Expr visitColumnReference(
     ExprNormalizedResult ctx, Stack<Expr> stack, ColumnReferenceExpr expr)
     throws PlanningException {
   // normalize column references.
   if (!expr.hasQualifier()) {
     if (ctx.block.namedExprsMgr.contains(expr.getCanonicalName())) {
       NamedExpr namedExpr = ctx.block.namedExprsMgr.getNamedExpr(expr.getCanonicalName());
       return new ColumnReferenceExpr(namedExpr.getAlias());
     } else {
       String normalized = ctx.plan.getNormalizedColumnName(ctx.block, expr);
       expr.setName(normalized);
     }
   }
   return expr;
 }