public static BooleanExpression createBetween(Expression value, Expression left, Expression right) { // check if (left instanceof ConstantExpression && right instanceof ConstantExpression) { Object lv = ((ConstantExpression) left).getValue(); Object rv = ((ConstantExpression) right).getValue(); if (lv == null || rv == null) { throw new RuntimeException("Illegal values of between, values can not be null!"); } if (lv instanceof Comparable && rv instanceof Comparable) { int ret = __compare((Comparable) rv, (Comparable) lv, true); if (ret < 0) throw new RuntimeException( String.format("Illegal values of between, left value(%s) must less than or equal to right value(%s)", lv, rv) ); } } return LogicExpression.createAND(createGreaterThanEqual(value, left), createLessThanEqual(value, right)); }
public static BooleanExpression createEqual(Expression left, Expression right) { checkEqualOperand(left); checkEqualOperand(right); checkEqualOperandCompatability(left, right); return doCreateEqual(left, right); }
public static BooleanExpression createNotBetween(Expression value, Expression left, Expression right) { return LogicExpression.createOR(createLessThan(value, left), createGreaterThan(value, right)); }
jj_consume_token(24); right = unaryExpr(); left = ComparisonExpression.createGreaterThan(left, right); break; case 25: jj_consume_token(25); right = unaryExpr(); left = ComparisonExpression.createGreaterThanEqual(left, right); break; case 26: jj_consume_token(26); right = unaryExpr(); left = ComparisonExpression.createLessThan(left, right); break; case 27: jj_consume_token(27); right = unaryExpr(); left = ComparisonExpression.createLessThanEqual(left, right); break; case BETWEEN: jj_consume_token(AND); high = unaryExpr(); left = ComparisonExpression.createBetween(left, low, high); break; default: jj_consume_token(AND); high = unaryExpr();
jj_consume_token(22); right = comparisonExpression(); left = ComparisonExpression.createEqual(left, right); break; case 23: jj_consume_token(23); right = comparisonExpression(); left = ComparisonExpression.createNotEqual(left, right); break; default: jj_consume_token(IS); jj_consume_token(NULL); left = ComparisonExpression.createIsNull(left); } else { switch ((jjNtk == -1) ? jj_ntk() : jjNtk) { jj_consume_token(NOT); jj_consume_token(NULL); left = ComparisonExpression.createIsNotNull(left); break; default:
public static BooleanExpression createGreaterThanEqual(final Expression left, final Expression right) { checkLessThanOperand(left); checkLessThanOperand(right); return new ComparisonExpression(left, right) { protected boolean asBoolean(int answer) { return answer >= 0; } public String getExpressionSymbol() { return ">="; } }; }
@SuppressWarnings({"rawtypes", "unchecked"}) public Object evaluate(EvaluationContext context) throws Exception { Comparable<Comparable> lv = (Comparable) left.evaluate(context); if (lv == null) { return null; } Comparable rv = (Comparable) right.evaluate(context); if (rv == null) { return null; } if (getExpressionSymbol().equals(">=") || getExpressionSymbol().equals(">") || getExpressionSymbol().equals("<") || getExpressionSymbol().equals("<=")) { Class<? extends Comparable> lc = lv.getClass(); Class<? extends Comparable> rc = rv.getClass(); if (lc == rc && lc == String.class) { // Compare String is illegal // first try to convert to double try { Comparable lvC = Double.valueOf((String) (Comparable) lv); Comparable rvC = Double.valueOf((String) rv); return compare(lvC, rvC); } catch (Exception e) { throw new RuntimeException("It's illegal to compare string by '>=', '>', '<', '<='. lv=" + lv + ", rv=" + rv, e); } } } return compare(lv, rv); }
public static BooleanExpression createNotEqual(Expression left, Expression right) { return UnaryExpression.createNOT(createEqual(left, right)); }
jj_consume_token(24); right = unaryExpr(); left = ComparisonExpression.createGreaterThan(left, right); break; case 25: jj_consume_token(25); right = unaryExpr(); left = ComparisonExpression.createGreaterThanEqual(left, right); break; case 26: jj_consume_token(26); right = unaryExpr(); left = ComparisonExpression.createLessThan(left, right); break; case 27: jj_consume_token(27); right = unaryExpr(); left = ComparisonExpression.createLessThanEqual(left, right); break; case BETWEEN: jj_consume_token(AND); high = unaryExpr(); left = ComparisonExpression.createBetween(left, low, high); break; default: jj_consume_token(AND); high = unaryExpr();
jj_consume_token(22); right = comparisonExpression(); left = ComparisonExpression.createEqual(left, right); break; case 23: jj_consume_token(23); right = comparisonExpression(); left = ComparisonExpression.createNotEqual(left, right); break; default: jj_consume_token(IS); jj_consume_token(NULL); left = ComparisonExpression.createIsNull(left); } else { switch ((jjNtk == -1) ? jj_ntk() : jjNtk) { jj_consume_token(NOT); jj_consume_token(NULL); left = ComparisonExpression.createIsNotNull(left); break; default:
public static BooleanExpression createLessThan(final Expression left, final Expression right) { checkLessThanOperand(left); checkLessThanOperand(right); return new ComparisonExpression(left, right) { protected boolean asBoolean(int answer) { return answer < 0; } public String getExpressionSymbol() { return "<"; } }; }
public static BooleanExpression createNotBetween(Expression value, Expression left, Expression right) { return LogicExpression.createOR(createLessThan(value, left), createGreaterThan(value, right)); }
@SuppressWarnings({"rawtypes", "unchecked"}) public Object evaluate(EvaluationContext context) throws Exception { Comparable<Comparable> lv = (Comparable) left.evaluate(context); if (lv == null) { return null; } Comparable rv = (Comparable) right.evaluate(context); if (rv == null) { return null; } if (getExpressionSymbol().equals(">=") || getExpressionSymbol().equals(">") || getExpressionSymbol().equals("<") || getExpressionSymbol().equals("<=")) { Class<? extends Comparable> lc = lv.getClass(); Class<? extends Comparable> rc = rv.getClass(); if (lc == rc && lc == String.class) { // Compare String is illegal // first try to convert to double try { Comparable lvC = Double.valueOf((String) (Comparable) lv); Comparable rvC = Double.valueOf((String) rv); return compare(lvC, rvC); } catch (Exception e) { throw new RuntimeException("It's illegal to compare string by '>=', '>', '<', '<='. lv=" + lv + ", rv=" + rv, e); } } } return compare(lv, rv); }
public static BooleanExpression createNotEqual(Expression left, Expression right) { return UnaryExpression.createNOT(createEqual(left, right)); }
jj_consume_token(24); right = unaryExpr(); left = ComparisonExpression.createGreaterThan(left, right); break; case 25: jj_consume_token(25); right = unaryExpr(); left = ComparisonExpression.createGreaterThanEqual(left, right); break; case 26: jj_consume_token(26); right = unaryExpr(); left = ComparisonExpression.createLessThan(left, right); break; case 27: jj_consume_token(27); right = unaryExpr(); left = ComparisonExpression.createLessThanEqual(left, right); break; case BETWEEN: jj_consume_token(AND); high = unaryExpr(); left = ComparisonExpression.createBetween(left, low, high); break; default: jj_consume_token(AND); high = unaryExpr();
jj_consume_token(22); right = comparisonExpression(); left = ComparisonExpression.createEqual(left, right); break; case 23: jj_consume_token(23); right = comparisonExpression(); left = ComparisonExpression.createNotEqual(left, right); break; default: jj_consume_token(IS); jj_consume_token(NULL); left = ComparisonExpression.createIsNull(left); } else { switch ((jjNtk == -1) ? jj_ntk() : jjNtk) { jj_consume_token(NOT); jj_consume_token(NULL); left = ComparisonExpression.createIsNotNull(left); break; default:
public static BooleanExpression createEqual(Expression left, Expression right) { checkEqualOperand(left); checkEqualOperand(right); checkEqualOperandCompatability(left, right); return doCreateEqual(left, right); }
public static BooleanExpression createBetween(Expression value, Expression left, Expression right) { // check if (left instanceof ConstantExpression && right instanceof ConstantExpression) { Object lv = ((ConstantExpression) left).getValue(); Object rv = ((ConstantExpression) right).getValue(); if (lv == null || rv == null) { throw new RuntimeException("Illegal values of between, values can not be null!"); } if (lv instanceof Comparable && rv instanceof Comparable) { int ret = __compare((Comparable) rv, (Comparable) lv, true); if (ret < 0) throw new RuntimeException( String.format("Illegal values of between, left value(%s) must less than or equal to right value(%s)", lv, rv) ); } } return LogicExpression.createAND(createGreaterThanEqual(value, left), createLessThanEqual(value, right)); }
public static BooleanExpression createLessThanEqual(final Expression left, final Expression right) { checkLessThanOperand(left); checkLessThanOperand(right); return new ComparisonExpression(left, right) { protected boolean asBoolean(int answer) { return answer <= 0; } public String getExpressionSymbol() { return "<="; } }; }