package jef.database.query.function; import java.util.List; import jef.database.jsqlparser.expression.Function; import jef.database.jsqlparser.expression.TemplateExpression; import jef.database.jsqlparser.visitor.Expression; public class EmuLRpadOnSqlite extends BaseArgumentSqlFunction { boolean isLeft; private final String lpad = "replace(substr(hex(zeroblob(%2$s-length(%1$s))),1,%2$s-length('a')),'0',%3$s)||%1$s"; private final String rpad = "%1$s||replace(substr(hex(zeroblob(%2$s-length(%1$s))),1,%2$s-length('a')),'0',%3$s)"; public EmuLRpadOnSqlite(boolean isLpad) { this.isLeft = isLpad; } public String getName() { return isLeft ? "lpad" : "rpad"; } public Expression renderExpression(List<Expression> arguments) { if (arguments.size() == 3) { /* * 三参数的pad功能不支持,要用复杂的手段进行。 */ return new TemplateExpression(isLeft ? lpad : rpad, arguments.toArray(new Expression[arguments.size()])); } else { /* * 双参数情况下,换一个函数名称即可. */ return new Function(isLeft ? "padl" : "padr", arguments); } } }