/** Creates a literal (constant expression). */ public RexNode literal(Object value) { final RexBuilder rexBuilder = cluster.getRexBuilder(); if (value == null) { return rexBuilder.constantNull(); } else if (value instanceof Boolean) { return rexBuilder.makeLiteral((Boolean) value); } else if (value instanceof BigDecimal) { return rexBuilder.makeExactLiteral((BigDecimal) value); } else if (value instanceof Float || value instanceof Double) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(((Number) value).doubleValue())); } else if (value instanceof Number) { return rexBuilder.makeExactLiteral( BigDecimal.valueOf(((Number) value).longValue())); } else if (value instanceof String) { return rexBuilder.makeLiteral((String) value); } else { throw new IllegalArgumentException("cannot convert " + value + " (" + value.getClass() + ") to a constant"); } }
/** Creates a literal (constant expression). */ public RexNode literal(Object value) { final RexBuilder rexBuilder = cluster.getRexBuilder(); if (value == null) { return rexBuilder.constantNull(); } else if (value instanceof Boolean) { return rexBuilder.makeLiteral((Boolean) value); } else if (value instanceof BigDecimal) { return rexBuilder.makeExactLiteral((BigDecimal) value); } else if (value instanceof Float || value instanceof Double) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(((Number) value).doubleValue())); } else if (value instanceof Number) { return rexBuilder.makeExactLiteral( BigDecimal.valueOf(((Number) value).longValue())); } else if (value instanceof String) { return rexBuilder.makeLiteral((String) value); } else { throw new IllegalArgumentException("cannot convert " + value + " (" + value.getClass() + ") to a constant"); } }
calciteLiteral = rexBuilder.makeApproxLiteral( new BigDecimal(Float.toString((Float)value)), calciteDataType); break; throw new CalciteSemanticException("NaN", UnsupportedFeature.Invalid_decimal); calciteLiteral = rexBuilder.makeApproxLiteral( new BigDecimal(Double.toString((Double)value)), calciteDataType); break;
break; case FLOAT: calciteLiteral = rexBuilder.makeApproxLiteral( new BigDecimal(Float.toString((Float)value)), calciteDataType); break; throw new CalciteSemanticException("NaN", UnsupportedFeature.Invalid_decimal); calciteLiteral = rexBuilder.makeApproxLiteral( new BigDecimal(Double.toString((Double)value)), calciteDataType); break;
/** * Makes an approximate literal of double precision */ protected RexNode makeApproxLiteral(BigDecimal bd) { return builder.makeApproxLiteral(bd); }
/** * Makes an approximate literal of double precision */ protected RexNode makeApproxLiteral(BigDecimal bd) { return builder.makeApproxLiteral(bd); }
/** * Creates a double-precision literal. */ public RexLiteral makeApproxLiteral(BigDecimal bd) { // Validator should catch if underflow is allowed // If underflow is allowed, let underflow become zero if (bd.doubleValue() == 0) { bd = BigDecimal.ZERO; } return makeApproxLiteral(bd, typeFactory.createSqlType(SqlTypeName.DOUBLE)); }
/** * Creates a double-precision literal. */ public RexLiteral makeApproxLiteral(BigDecimal bd) { // Validator should catch if underflow is allowed // If underflow is allowed, let underflow become zero if (bd.doubleValue() == 0) { bd = BigDecimal.ZERO; } return makeApproxLiteral(bd, typeFactory.createSqlType(SqlTypeName.DOUBLE)); }
public RexLiteral floatLiteral(double value) { return rexBuilder.makeApproxLiteral(new BigDecimal(value)); }
public RexLiteral floatLiteral(double value) { return rexBuilder.makeApproxLiteral(new BigDecimal(value)); }
/** Creates a literal (constant expression). */ public RexNode literal(Object value) { final RexBuilder rexBuilder = cluster.getRexBuilder(); if (value == null) { return rexBuilder.constantNull(); } else if (value instanceof Boolean) { return rexBuilder.makeLiteral((Boolean) value); } else if (value instanceof BigDecimal) { return rexBuilder.makeExactLiteral((BigDecimal) value); } else if (value instanceof Float || value instanceof Double) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(((Number) value).doubleValue())); } else if (value instanceof Number) { return rexBuilder.makeExactLiteral( BigDecimal.valueOf(((Number) value).longValue())); } else if (value instanceof String) { return rexBuilder.makeLiteral((String) value); } else { throw new IllegalArgumentException("cannot convert " + value + " (" + value.getClass() + ") to a constant"); } }
/** Creates a literal (constant expression). */ public RexNode literal(Object value) { final RexBuilder rexBuilder = cluster.getRexBuilder(); if (value == null) { return rexBuilder.constantNull(); } else if (value instanceof Boolean) { return rexBuilder.makeLiteral((Boolean) value); } else if (value instanceof BigDecimal) { return rexBuilder.makeExactLiteral((BigDecimal) value); } else if (value instanceof Float || value instanceof Double) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(((Number) value).doubleValue())); } else if (value instanceof Number) { return rexBuilder.makeExactLiteral( BigDecimal.valueOf(((Number) value).longValue())); } else if (value instanceof String) { return rexBuilder.makeLiteral((String) value); } else { throw new IllegalArgumentException("cannot convert " + value + " (" + value.getClass() + ") to a constant"); } }
/** * Creates a RexNode that stores a selectivity value corresponding to the * selectivity of a semijoin. This can be added to a filter to simulate the * effect of the semijoin during costing, but should never appear in a real * plan since it has no physical implementation. * * @param rel the semijoin of interest * @return constructed rexnode */ public static RexNode makeSemiJoinSelectivityRexNode(RelMetadataQuery mq, SemiJoin rel) { RexBuilder rexBuilder = rel.getCluster().getRexBuilder(); double selectivity = computeSemiJoinSelectivity(mq, rel.getLeft(), rel.getRight(), rel); return rexBuilder.makeCall(ARTIFICIAL_SELECTIVITY_FUNC, rexBuilder.makeApproxLiteral(new BigDecimal(selectivity))); }
/** * Creates a RexNode that stores a selectivity value corresponding to the * selectivity of a semijoin. This can be added to a filter to simulate the * effect of the semijoin during costing, but should never appear in a real * plan since it has no physical implementation. * * @param rel the semijoin of interest * @return constructed rexnode */ public static RexNode makeSemiJoinSelectivityRexNode(RelMetadataQuery mq, SemiJoin rel) { RexBuilder rexBuilder = rel.getCluster().getRexBuilder(); double selectivity = computeSemiJoinSelectivity(mq, rel.getLeft(), rel.getRight(), rel); return rexBuilder.makeCall(ARTIFICIAL_SELECTIVITY_FUNC, rexBuilder.makeApproxLiteral(new BigDecimal(selectivity))); }
final Number number = (Number) o; if (number instanceof Double || number instanceof Float) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(number.doubleValue())); } else {
Number number = (Number) value; if (value instanceof Double || value instanceof Float) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(number.doubleValue())); } else if (value instanceof BigDecimal) {
Number number = (Number) value; if (value instanceof Double || value instanceof Float) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(number.doubleValue())); } else if (value instanceof BigDecimal) {
Number number = (Number) value; if (value instanceof Double || value instanceof Float) { return rexBuilder.makeApproxLiteral( BigDecimal.valueOf(number.doubleValue())); } else if (value instanceof BigDecimal) {
@Test public void noOnOr(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.OR, builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.BIGINT), 0), builder.makeBigintLiteral(BigDecimal.ONE) ), builder.makeApproxLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(0, conditions.size()); assertTrue(holder.hasRemainingExpression()); }
@Test public void halfTree(){ final RexNode node = builder.makeCall(SqlStdOperatorTable.AND, builder.makeCall(SqlStdOperatorTable.EQUALS, builder.makeInputRef(factory.createSqlType(SqlTypeName.BIGINT), 0), builder.makeBigintLiteral(BigDecimal.ONE) ), builder.makeApproxLiteral(BigDecimal.ONE) ); FindSimpleFilters finder = new FindSimpleFilters(builder); StateHolder holder = node.accept(finder); ImmutableList<RexCall> conditions = holder.getConditions(); assertEquals(1, conditions.size()); assertEquals(SqlKind.EQUALS, conditions.get(0).getKind()); assertEquals(SqlKind.LITERAL, holder.getNode().getKind()); assertTrue(holder.hasRemainingExpression()); }