...
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
package smartbi.freequery.expression.function; import smartbi.SmartbiException; import smartbi.freequery.metadata.SQLPart; import smartbi.freequery.metadata.SQLPartList; import smartbi.freequery.util.SQLPartType; import smartbi.util.StringUtil; public class Process1000LimitOfIn extends Function { @Override public boolean checkParams() { if (params.length==2) return true; else return false; } protected void prepareParams() { try { super.prepareParams(); } catch (SmartbiException e) { result = new SQLPartList(); } } @Override public void execute() { try { String fieldName = params[0].getSqlStr().trim(); fieldName = trim(fieldName,"\""); fieldName = trim(fieldName,"'"); String fieldValue = params[1].getSqlStr().trim(); String sep = ","; String[] fieldValueArray = fieldValue.split(sep); int size = 1000; long count = Math.round(Math.ceil(((double)fieldValueArray.length)/size)); if(count ==1){ result.add(new SQLPart(SQLPartType.SQLSTR, fieldName + " in (" + fieldValue +")")); return; } //TODO StringBuilder sqlSb = new StringBuilder(); sqlSb.append("("); for(int i =0; i<count; i++){ int jLen = (i+1)*size ; jLen = (jLen>fieldValueArray.length)?fieldValueArray.length:jLen; StringBuilder sb = new StringBuilder(); for(int j = i*size; j<jLen; j++){ sb.append(fieldValueArray[j]).append(sep); } String sbStr = sb.toString(); if(i>0){ sqlSb.append(" or "); } sqlSb.append(fieldName + " in (" + sbStr.substring(0, sbStr.length()-sep.length())+")"); } sqlSb.append(" ) "); result.add(new SQLPart(SQLPartType.SQLSTR, sqlSb.toString())); } catch (Exception e) { result.add(new SQLPart(SQLPartType.SQLUnknown," 1=1 ")); } } private String trim(String srcStr, String toTrimStr){ if(StringUtil.isNullOrEmpty(srcStr)){ return srcStr; } srcStr = srcStr.trim(); while(srcStr.startsWith(toTrimStr)){ srcStr = srcStr.substring(toTrimStr.length()); srcStr = srcStr.trim(); } while(srcStr.endsWith(toTrimStr)){ srcStr = srcStr.substring(0, srcStr.length()-toTrimStr.length()); srcStr = srcStr.trim(); } return srcStr; } @Override public String getMDXValue() { return ""; } } |
2.2 编写升级类
该升级类的操作是向知识库t_restree(资源树)表中插入一条数据,父节点为catalog_string(字符串),资源类型为FUNCTION(函数)
该操作用于后面在资源树中新建同名的自定义函数
...
Process1000LimitOfIn.ext,源码:Process1000LimitOfIn_Src.rarProcess1000LimitOfIn_Src.rar。