package jef.database.query.function;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import jef.database.jsqlparser.expression.CaseExpression;
import jef.database.jsqlparser.expression.WhenClause;
import jef.database.jsqlparser.visitor.Expression;
/**
* 用 case expr1
* when expr2 then expr3
* when ... then.
* else ...
* end 来模拟oracle的decode函数
* @author jiyi
*
*/
public class EmuDecodeWithCase extends BaseArgumentSqlFunction{
public String getName() {
return "decode";
}
public Expression renderExpression(List<Expression> arguments) {
LinkedList<Expression> copy=new LinkedList<Expression>(arguments);
CaseExpression result=new CaseExpression();
result.setSwitchExpression(copy.removeFirst());
List<WhenClause> whens=new ArrayList<WhenClause>();
while(copy.size()>1){
WhenClause when=new WhenClause();
when.setWhenExpression(copy.removeFirst());
when.setThenExpression(copy.removeFirst());
whens.add(when);
}
result.setWhenClauses(whens);
if(!copy.isEmpty()){
result.setElseExpression(copy.removeFirst());
}
return result;
}
// public static void main(String[] args) throws ParseException {
// Function func=(Function)DbUtils.parseExpression("decode('abc','a',1,'b',2,'abc1',3)");
// EmuDecodeWithCase tt=new EmuDecodeWithCase();
// Expression result=tt.renderExpression(func.getParameters().getExpressions());
// System.out.println(result);
// }
}