package jef.database.query.function;
import java.util.List;
import jef.database.jsqlparser.expression.Function;
import jef.database.jsqlparser.expression.NullValue;
import jef.database.jsqlparser.visitor.Expression;
import org.apache.commons.lang.ArrayUtils;
/**
* 在函数的名称和参数顺序上稍作变化实现兼容的数据库函数渲染器
* @author jiyi
*
*/
public class TransformFunction implements SQLFunction {
private String name;
private String functionName;
private String between; //
private int[] paramIndex;
private boolean escape;
public TransformFunction(String name,String funname,int[] paramIndex,boolean escape){
this.name=name;
this.functionName=funname;
this.paramIndex=paramIndex;
this.escape=escape;
}
public TransformFunction(String name,String funname,int[] paramIndex){
this(name,funname,paramIndex,false);
}
public TransformFunction setBetween(String between) {
this.between = between;
return this;
}
public boolean hasArguments() {
return paramIndex.length>0;
}
public boolean hasParenthesesIfNoArguments() {
return true;
}
public String getName() {
return name;
}
public Expression renderExpression(List<Expression> arguments) {
Expression[] newarg=new Expression[paramIndex.length];
for(int i=0;i<paramIndex.length;i++){
int index=paramIndex[i];
if(index<arguments.size()){
newarg[i]=arguments.get(index);
}else{
newarg[i]=NullValue.getInstance();
}
}
Function func=new Function(functionName,newarg);
if(between!=null)func.getParameters().setBetween(between);
if(escape)func.setEscaped(escape);
return func;
}
public boolean needEscape() {
return false;
}
public String[] requiresUserFunction() {
return ArrayUtils.EMPTY_STRING_ARRAY;
}
}