package com.taobao.tddl.optimizer.core.expression;
import java.util.List;
/**
* 代表一个函数列,比如max(id)
*
* @author jianghang 2013-11-8 下午1:29:03
* @since 5.0.0
*/
public interface IFunction<RT extends IFunction> extends ISelectable<RT> {
public static interface BuiltInFunction {
final static String ADD = "+";
final static String SUB = "-";
final static String MULTIPLY = "*";
final static String DIVISION = "/";
final static String MOD = "%";
final static String BITAND = "&";
final static String BITOR = "|";
final static String BITXOR = "^";
final static String BITLSHIFT = "<<";
final static String BITRSHIFT = ">>";
final static String MINUS = "MINUS";
final static String ROW = "ROW";
final static String AVG = "AVG";
final static String SUM = "SUM";
final static String COUNT = "COUNT";
final static String MAX = "MAX";
final static String MIN = "MIN";
final static String INTERVAL = "INTERVAL_PRIMARY";
final static String GET_FORMAT = "GET_FORMAT";
final static String TIMESTAMPADD = "TIMESTAMPADD";
final static String TIMESTAMPDIFF = "TIMESTAMPDIFF";
final static String CAST = "CAST";
}
public enum FunctionType {
/** 函数的操作面向一系列的值,并返回一个单一的值,可以理解为聚合函数 */
Aggregate,
/** 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值,可以理解为转换函数 */
Scalar;
}
public String getFunctionName();
public FunctionType getFunctionType();
public IFunction setFunctionName(String funcName);
public List getArgs();
public RT setArgs(List objs);
public boolean isNeedDistinctArg();
public RT setNeedDistinctArg(boolean b);
/**
* 获取执行函数实现
*/
public IExtraFunction getExtraFunction();
/**
* 设置执行函数
*/
public RT setExtraFunction(IExtraFunction function);
}