package com.taobao.tddl.optimizer.core.expression; import java.util.Map; import com.taobao.tddl.common.jdbc.ParameterContext; import com.taobao.tddl.optimizer.core.CanVisit; import com.taobao.tddl.optimizer.core.datatype.DataType; /** * 描述一个列信息,可能会是字段列,函数列,常量列<br> * 使用RT泛型解决子类流式API需要的返回结果为子类 * * @since 5.0.0 */ public interface ISelectable<RT extends ISelectable> extends CanVisit, Comparable { /** * 参数赋值,计算过程获取parameter参数获取?对应的数据 * * <pre> * a. 比如原始sql中使用了?占位符,通过PrepareStatement.setXXX设置参数 * b. sql解析后构造了,将?解析为IBindVal对象 */ public RT assignment(Map<Integer, ParameterContext> parameterSettings); // public static enum DATA_TYPE { // BYTES_VAL, LONG_VAL, SHORT_VAL, BOOLEAN_VAL, CHAR_VAL, STRING_VAL, // FLOAT_VAL, DOUBLE_VAL, INT_VAL, BIND_VAL, // DATE_VAL, TIMESTAMP_VAL, TIME_VAL, BLOB_VAL, BIT_VAL // } public RT setDataType(DataType dataType); public DataType getDataType(); // --------------- name相关信息 ---------------------- /** * alias ,只在一个表(索引)对象结束的时候去处理 一般情况下,取值不需要使用这个东西。 直接使用columnName即可。 */ public String getAlias(); public String getTableName(); public String getColumnName(); public RT setAlias(String alias); public RT setTableName(String tableName); public RT setColumnName(String columnName); /** * 是否为相同的名字,如果目标的alias name存在则对比alias name,否则对比column name */ public boolean isSameName(ISelectable select); /** * @return tableName + name */ public String getFullName(); // -----------------特殊标记------------------ public boolean isDistinct(); public boolean isNot(); public RT setDistinct(boolean distinct); public RT setIsNot(boolean isNot); // -----------------对象复制 ----------------- public RT copy(); }