package com.meidusa.amoeba.sqljep.function; import com.meidusa.amoeba.sqljep.ASTFunNode; import com.meidusa.amoeba.sqljep.JepRuntime; import com.meidusa.amoeba.sqljep.ParseException; /** * id in range(12,16,0,1) 表示 id>12 and id<=16 * id in range(12,16,0,0) 表示 id>12 and id<16 * id in range(12,16,1,0) 表示 id>=12 and id<16 * id in range(12,16,1,1) 表示 id>=12 and id<=16 * @author struct * */ public class Range extends PostfixCommand{ public Comparable<?>[] evaluate(ASTFunNode node, JepRuntime runtime) throws ParseException { node.jjtGetChild(0).jjtAccept(runtime.ev, null); Comparable<?> param0 = runtime.stack.pop(); node.jjtGetChild(1).jjtAccept(runtime.ev, null); Comparable<?> param1 = runtime.stack.pop(); node.jjtGetChild(2).jjtAccept(runtime.ev, null); Comparable<?> param2 = runtime.stack.pop(); int leftEquals = Integer.valueOf(param2.toString()); node.jjtGetChild(3).jjtAccept(runtime.ev, null); Comparable<?> param3 = runtime.stack.pop(); int rightEquals = Integer.valueOf(param3.toString()); ComparativeRange range = new ComparativeRange(); range.addComparative(new Comparative(leftEquals==0?Comparative.GreaterThan:Comparative.GreaterThanOrEqual,param0)); range.addComparative(new Comparative(rightEquals ==0?Comparative.LessThan:Comparative.LessThanOrEqual,param1)); /*ComparativeAND and = new ComparativeAND(leftEquals==0?Comparative.GreaterThan:Comparative.GreaterThanOrEqual,param0); and.addComparative(new Comparative(rightEquals ==0?Comparative.LessThan:Comparative.LessThanOrEqual,param1)); */ return new Comparable[]{range}; } public int getNumberOfParameters() { return 4; } public Comparable<?> getResult(Comparable<?>... comparables) throws ParseException { return comparables[0]; } }