package jef.database.query.function; import java.util.ArrayList; import java.util.List; import jef.database.jsqlparser.expression.Function; import jef.database.jsqlparser.visitor.Expression; /** * 可以直接将apache commons-lang中的一个函数定义为replace存储过程 * CREATE FUNCTION REPLACE(STR VARCHAR(255), OLD VARCHAR(100), NEW VARCHAR(100)) RETURNS VARCHAR(255) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'org.apache.commons.lang.StringUtils.replace' * @author jiyi */ public class EmuDerbyUserFunction extends BaseArgumentSqlFunction{ private String name; private String localFuncName; private int mustParamCount; private Expression[] params; public void setPadParam(int count,Expression... param){ this.mustParamCount=count; this.params=param; } public EmuDerbyUserFunction(String name,String nativeFuncName){ this.name=name; this.localFuncName=nativeFuncName; } public String getName() { return name; } public Expression renderExpression(List<Expression> arguments) { if(mustParamCount>0 && arguments.size()<mustParamCount){ ArrayList<Expression> newArgs=new ArrayList<Expression>(arguments); int left=mustParamCount-arguments.size(); for(int i=0;i<left;i++){ newArgs.add(params[i]); } return new Function(localFuncName,newArgs); }else{ return new Function(localFuncName,arguments); } } @Override public String[] requiresUserFunction() { return new String[]{localFuncName.toUpperCase()}; } }