@Override public float getFloat() { // No Assert for null handling as ExprEval already have it. return (float) getObject().asDouble(); }
@Override public float getFloat() { return (float) getObject().asDouble(); }
@Override public double getDouble() { return getObject().asDouble(); }
@Override public double getDouble() { // No Assert for null handling as ExprEval already have it. return getObject().asDouble(); }
@Override public float getFloat() { // No Assert for null handling as ExprEval already have it. return (float) eval().asDouble(); }
@Override public double getDouble() { // No Assert for null handling as ExprEval already have it. return eval().asDouble(); }
public ConstantExprEvalSelector(final ExprEval eval) { this.eval = Preconditions.checkNotNull(eval, "eval"); if (NullHandling.sqlCompatible() && eval.isNumericNull()) { longValue = 0L; floatValue = 0f; doubleValue = 0d; isNull = true; } else { longValue = eval.asLong(); doubleValue = eval.asDouble(); floatValue = (float) doubleValue; isNull = false; } }
@Override protected ExprEval eval(ExprEval x, ExprEval y) { return ExprEval.of(Math.scalb(x.asDouble(), y.asInt())); } }
@Override protected final ExprEval eval(ExprEval x, ExprEval y) { if (x.type() == ExprType.STRING || y.type() == ExprType.STRING) { return ExprEval.of(null); } if (x.type() == ExprType.LONG && y.type() == ExprType.LONG) { return eval(x.asLong(), y.asLong()); } else { return eval(x.asDouble(), y.asDouble()); } }
private double evalDouble(String x, Expr.ObjectBinding bindings) { ExprEval ret = eval(x, bindings); Assert.assertEquals(ExprType.DOUBLE, ret.type()); return ret.asDouble(); }
@Nonnull @Override public ExprEval eval(ObjectBinding bindings) { ExprEval ret = expr.eval(bindings); if (NullHandling.sqlCompatible() && (ret.value() == null)) { return ExprEval.of(null); } if (ret.type() == ExprType.LONG) { return ExprEval.of(-ret.asLong()); } if (ret.type() == ExprType.DOUBLE) { return ExprEval.of(-ret.asDouble()); } throw new IAE("unsupported type " + ret.type()); }
@Override protected final ExprEval eval(ExprEval param) { if (NullHandling.sqlCompatible() && param.isNumericNull()) { return ExprEval.of(null); } if (param.type() == ExprType.LONG) { return eval(param.asLong()); } else if (param.type() == ExprType.DOUBLE) { return eval(param.asDouble()); } return ExprEval.of(null); }
@Nonnull @Override public ExprEval eval(ObjectBinding bindings) { ExprEval leftVal = left.eval(bindings); ExprEval rightVal = right.eval(bindings); // Result of any Binary expressions is null if any of the argument is null. // e.g "select null * 2 as c;" or "select null + 1 as c;" will return null as per Standard SQL spec. if (NullHandling.sqlCompatible() && (leftVal.value() == null || rightVal.value() == null)) { return ExprEval.of(null); } if (leftVal.type() == ExprType.STRING && rightVal.type() == ExprType.STRING) { return evalString(leftVal.asString(), rightVal.asString()); } else if (leftVal.type() == ExprType.LONG && rightVal.type() == ExprType.LONG) { if (NullHandling.sqlCompatible() && (leftVal.isNumericNull() || rightVal.isNumericNull())) { return ExprEval.of(null); } return ExprEval.of(evalLong(leftVal.asLong(), rightVal.asLong())); } else { if (NullHandling.sqlCompatible() && (leftVal.isNumericNull() || rightVal.isNumericNull())) { return ExprEval.of(null); } return ExprEval.of(evalDouble(leftVal.asDouble(), rightVal.asDouble())); } }
bigDecimal = BigDecimal.valueOf(exprResult.asLong()); } else { bigDecimal = BigDecimal.valueOf(exprResult.asDouble());
@Test public void testExprEvalSelectorWithConstantNullArithmetic() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( COLUMN_SELECTOR_FACTORY, Parser.parse(CONSTANT_NULL_ARITHMETIC.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(2.1f, selector.getFloat(), 0.0f); Assert.assertFalse(selector.isNull()); Assert.assertEquals(2.1d, selector.getObject().asDouble(), 0.0d); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }
@Override public double getDouble() { // No Assert for null handling as ExprEval already have it. return eval().asDouble(); }
@Override public float getFloat() { // No Assert for null handling as ExprEval already have it. return (float) getObject().asDouble(); }
@Override public double getDouble() { // No Assert for null handling as ExprEval already have it. return getObject().asDouble(); }
@Override protected ExprEval eval(ExprEval x, ExprEval y) { return ExprEval.of(Math.scalb(x.asDouble(), y.asInt())); } }
@Override protected final ExprEval eval(ExprEval x, ExprEval y) { if (x.type() == ExprType.STRING || y.type() == ExprType.STRING) { return ExprEval.of(null); } if (x.type() == ExprType.LONG && y.type() == ExprType.LONG) { return eval(x.asLong(), y.asLong()); } else { return eval(x.asDouble(), y.asDouble()); } }