content: /*
   * Copyright (C) 2016-2023 ActionTech.
   * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher.
   */
  
  /**
   *
   */
  package com.actiontech.dble.plan.common.item.function.unknown;
  
  import com.actiontech.dble.config.ErrorCode;
  import com.actiontech.dble.plan.common.exception.MySQLOutPutException;
  import com.actiontech.dble.plan.common.field.Field;
  import com.actiontech.dble.plan.common.item.Item;
  import com.actiontech.dble.plan.common.item.function.ItemFunc;
  import com.actiontech.dble.plan.common.time.MySQLTime;
  import com.alibaba.druid.sql.ast.SQLExpr;
  import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
  
  import java.math.BigDecimal;
  import java.math.BigInteger;
  import java.util.List;
  
  
  /**
   * @author ActionTech
   * @CreateTime 2016/5/9
   */
  public class ItemFuncUnknown extends ItemFunc {
      private final String funcName;
  
      /**
       * @param args
       */
      public ItemFuncUnknown(String funcName, List<Item> args, int charsetIndex) {
          super(args, charsetIndex);
          this.funcName = funcName;
          this.withUnValAble = true;
      }
  
      @Override
      public void fixLengthAndDec() {
      }
  
      @Override
      public String funcName() {
          return this.funcName;
      }
  
      @Override
      public BigDecimal valReal() {
          throw new MySQLOutPutException(ErrorCode.ER_OPTIMIZER, "", " udf func not support val()");
      }
  
      @Override
      public BigInteger valInt() {
          throw new MySQLOutPutException(ErrorCode.ER_OPTIMIZER, "", " udf func not support val()");
      }
  
      @Override
      public String valStr() {
          throw new MySQLOutPutException(ErrorCode.ER_OPTIMIZER, "", " udf func not support val()");
      }
  
      @Override
      public boolean getDate(MySQLTime ltime, long fuzzydate) {
          throw new MySQLOutPutException(ErrorCode.ER_OPTIMIZER, "", " udf func not support val()");
      }
  
      @Override
      public boolean getTime(MySQLTime ltime) {
          throw new MySQLOutPutException(ErrorCode.ER_OPTIMIZER, "", " udf func not support val()");
      }
  
      @Override
      public SQLExpr toExpression() {
          SQLMethodInvokeExpr method = new SQLMethodInvokeExpr(funcName);
          for (Item arg : args) {
              method.addArgument(arg.toExpression());
          }
          return method;
      }
  
      @Override
      protected Item cloneStruct(boolean forCalculate, List<Item> calArgs, boolean isPushDown, List<Field> fields) {
          List<Item> newArgs = null;
          if (!forCalculate)
              newArgs = cloneStructList(args);
          else
              newArgs = calArgs;
          return new ItemFuncUnknown(funcName, newArgs, charsetIndex);
      }
  
  }
  