@Override
  public void reduce(RexBuilder rexBuilder, List<RexNode> constExps, List<RexNode> reducedValues) {
    RexNodeConverter rexNodeConverter = new RexNodeConverter(rexBuilder);
    for (RexNode rexNode : constExps) {
      // initialize the converter
      ExprNodeConverter converter = new ExprNodeConverter("", null, null, null,
          new HashSet<>(), rexBuilder.getTypeFactory());
      // convert RexNode to ExprNodeGenericFuncDesc
      ExprNodeDesc expr = rexNode.accept(converter);
      if (expr instanceof ExprNodeGenericFuncDesc) {
        // folding the constant
        ExprNodeDesc constant = ConstantPropagateProcFactory
            .foldExpr((ExprNodeGenericFuncDesc) expr);
        if (constant != null) {
          addExpressionToList(constant, rexNode, rexNodeConverter, reducedValues);
        } else {
          reducedValues.add(rexNode);
        }
      } else if (expr instanceof ExprNodeConstantDesc) {
        addExpressionToList(expr, rexNode, rexNodeConverter, reducedValues);
      } else {
        reducedValues.add(rexNode);
      }
    }
  }
Executor for {@link RexNode} based on Hive semantics.
ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexExecutorImpl.java