package jef.database.dialect;
import jef.database.meta.FunctionMapping;
import jef.database.query.Func;
import jef.tools.Assert;
import org.junit.Test;
/**
* 检查方言的设计
* @author jiyi
*
*/
public class DbDialectTest {
/**
* 检查每种方言是否都提供了基本函数的实现
*/
@Test
public void checkNormalFunctions(){
DatabaseDialect dialect=AbstractDialect.getProfile("oracle");
check(dialect);
dialect=AbstractDialect.getProfile("derby");
check(dialect);
dialect=AbstractDialect.getProfile("mysql");
check(dialect);
dialect=AbstractDialect.getProfile("postgresql");
check(dialect);
dialect=AbstractDialect.getProfile("hsqldb");
check(dialect);
dialect=AbstractDialect.getProfile("sqlite");
check(dialect);
dialect=new SQLServer2000Dialect();
check(dialect);
}
private void check(DatabaseDialect dialect) {
Class<Func> clz=Func.class;
for(Func func:clz.getEnumConstants()){
FunctionMapping mapping=dialect.getFunctionsByEnum().get(func);
Assert.notNull(mapping,func+" 在数据库"+ dialect.getName()+" 中难道无法提供吗?");
if(mapping.getMatch()==0){
if(!func.name().equals(mapping.getFunction().getName()))throw new IllegalArgumentException(func+" 在数据库"+ dialect.getName()+" 中的名称是不一致的."+mapping.getFunction().getName());
}
System.out.println(func +" \t"+ mapping.getFunction().getName());
}
}
@Test
public void testEmu(){
// NvlFunction n=new NvlFunction();
// System.out.println(n.renderExpression(ArrayUtils.asList((Expression)new StringValue("'11'"),new StringValue("'22'"),new StringValue("'33'"),new StringValue("'44'"))));
}
}