package jef.database.meta;
import jef.database.dialect.DatabaseDialect;
import jef.database.dialect.type.ColumnMapping;
import jef.database.query.SqlContext;
import jef.tools.StringUtils;
/**
* 别名供应器
* @author jiyi
*
*/
public interface AliasProvider {
/**
* 全对象引用模式下可以提供各个字段的别名 如果返回null,将不予拼装
*
* @param f 字段
* @param dialect 数据库方言
* @param schema 表的别名
* @param forSelect 当生成查询语句时true,当拼装结果时false
* @return
*/
String getSelectedAliasOf(ColumnMapping f, DatabaseDialect dialect, String schema);
/**
* 结果时获得列别名,要求返回大写
* @param f
* @param dialect
* @param schema
* @return
*/
String getResultAliasOf(ColumnMapping f,String schema);
public static final AliasProvider DEFAULT=new AliasProvider(){
public String getSelectedAliasOf(ColumnMapping f, DatabaseDialect profile, String alias) {
String fieldName = f.fieldName();
return profile.getObjectNameToUse(StringUtils.isEmpty(alias) ?fieldName: StringUtils.concat(alias, SqlContext.DIVEDER, fieldName));
}
@Override
public String getResultAliasOf(ColumnMapping f, String alias) {
String fieldName = f.fieldName();
return StringUtils.isEmpty(alias) ? fieldName.toUpperCase():StringUtils.concat(alias, SqlContext.DIVEDER, fieldName).toUpperCase() ;
}
};
}