public static SqlDecimal of(long unscaledValue, int precision, int scale) { return new SqlDecimal(BigInteger.valueOf(unscaledValue), precision, scale); }
public static SqlDecimal of(String unscaledValue, int precision, int scale) { return new SqlDecimal(new BigInteger(unscaledValue), precision, scale); }
public static SqlDecimal of(String decimalValue) { BigDecimal bigDecimal = new BigDecimal(decimalValue); return new SqlDecimal(bigDecimal.unscaledValue(), bigDecimal.precision(), bigDecimal.scale()); }
private static List<SqlDecimal> decimalSequence(String start, String step, int items, int precision, int scale) { BigInteger decimalStep = new BigInteger(step); List<SqlDecimal> values = new ArrayList<>(); BigInteger nextValue = new BigInteger(start); for (int i = 0; i < items; i++) { values.add(new SqlDecimal(nextValue, precision, scale)); nextValue = nextValue.add(decimalStep); } return values; }
private List<SqlDecimal> createDecimalValuesNoNull() { Random random = new Random(); List<SqlDecimal> values = new ArrayList<>(); for (int i = 0; i < ROWS; ++i) { values.add(new SqlDecimal(BigInteger.valueOf(random.nextLong() % 10000000000L), 10, 5)); } return values; } }
private List<SqlDecimal> createDecimalValues() { Random random = new Random(); List<SqlDecimal> values = new ArrayList<>(); for (int i = 0; i < 1000000; ++i) { values.add(new SqlDecimal(BigInteger.valueOf(random.nextLong() % 10000000000L), 10, 5)); } return values; } }
private static List<SqlDecimal> decimalSequence(String start, String step, int items, int precision, int scale) { BigInteger decimalStep = new BigInteger(step); List<SqlDecimal> values = new ArrayList<>(); BigInteger nextValue = new BigInteger(start); for (int i = 0; i < items; i++) { values.add(new SqlDecimal(nextValue, precision, scale)); nextValue = nextValue.add(decimalStep); } return values; } }
@Override public Object getObjectValue(ConnectorSession session, Block block, int position) { if (block.isNull(position)) { return null; } long unscaledValue = block.getLong(position, 0); return new SqlDecimal(BigInteger.valueOf(unscaledValue), getPrecision(), getScale()); }
private List<SqlDecimal> createDecimalValuesWithNull() { Random random = new Random(); List<SqlDecimal> values = new ArrayList<>(); for (int i = 0; i < ROWS; ++i) { if (random.nextBoolean()) { values.add(new SqlDecimal(BigInteger.valueOf(random.nextLong() % 10000000000L), 10, 5)); } else { values.add(null); } } return values; } }
@Override public SqlDecimal getExpectedValue(int start, int length) { if (length == 0) { return null; } BigDecimal sum = BigDecimal.ZERO; for (int i = start; i < start + length; i++) { sum = sum.add(getBigDecimalForCounter(i)); } return new SqlDecimal(sum.unscaledValue(), sum.precision(), sum.scale()); }
@Override public SqlDecimal getExpectedValue(int start, int length) { if (length == 0) { return null; } BigDecimal avg = BigDecimal.ZERO; for (int i = start; i < start + length; i++) { avg = avg.add(getBigDecimalForCounter(i)); } avg = avg.divide(BigDecimal.valueOf(length), ROUND_HALF_UP); return new SqlDecimal(avg.unscaledValue(), avg.precision(), avg.scale()); }
private void assertExecute(List<String> expressions, BigDecimal decimal) { Type type = getDecimalType(decimal); SqlDecimal value = decimal == null ? null : new SqlDecimal(decimal.unscaledValue(), decimal.precision(), decimal.scale()); for (String expression : expressions) { assertExecute(expression, type, value); } }
private SqlDecimal randomDecimal(DecimalType type) { int maxBits = (int) (Math.log(Math.pow(10, type.getPrecision())) / Math.log(2)); BigInteger bigInteger = new BigInteger(maxBits, random); if (bigInteger.equals(ZERO)) { bigInteger = ONE; } if (random.nextBoolean()) { bigInteger = bigInteger.negate(); } return new SqlDecimal(bigInteger, type.getPrecision(), type.getScale()); } }
@Test public void testToString() { assertEquals(new SqlDecimal(new BigInteger("0"), 2, 1).toString(), "0.0"); assertEquals(new SqlDecimal(new BigInteger("0"), 3, 2).toString(), "0.00"); assertEquals(new SqlDecimal(new BigInteger("0"), 6, 5).toString(), "0.00000"); assertEquals(new SqlDecimal(new BigInteger("0"), 10, 5).toString(), "0.00000"); assertEquals(new SqlDecimal(new BigInteger("1"), 2, 1).toString(), "0.1"); assertEquals(new SqlDecimal(new BigInteger("0"), 3, 3).toString(), "0.000"); assertEquals(new SqlDecimal(new BigInteger("1"), 1, 0).toString(), "1"); assertEquals(new SqlDecimal(new BigInteger("1000"), 4, 3).toString(), "1.000"); assertEquals(new SqlDecimal(new BigInteger("12345678901234567890123456789012345678"), 38, 20) .toString(), "123456789012345678.90123456789012345678"); assertEquals(new SqlDecimal(new BigInteger("-10"), 2, 1).toString(), "-1.0"); assertEquals(new SqlDecimal(new BigInteger("-100"), 3, 2).toString(), "-1.00"); assertEquals(new SqlDecimal(new BigInteger("-100000"), 6, 5).toString(), "-1.00000"); assertEquals(new SqlDecimal(new BigInteger("-100000"), 10, 5).toString(), "-1.00000"); assertEquals(new SqlDecimal(new BigInteger("-1"), 2, 1).toString(), "-0.1"); assertEquals(new SqlDecimal(new BigInteger("-1"), 3, 3).toString(), "-0.001"); assertEquals(new SqlDecimal(new BigInteger("-1"), 1, 0).toString(), "-1"); assertEquals(new SqlDecimal(new BigInteger("-1000"), 4, 3).toString(), "-1.000"); assertEquals(new SqlDecimal(new BigInteger("-12345678901234567890123456789012345678"), 38, 20) .toString(), "-123456789012345678.90123456789012345678"); } }
@Override public Object getObjectValue(ConnectorSession session, Block block, int position) { if (block.isNull(position)) { return null; } Slice slice = block.getSlice(position, 0, getFixedSize()); return new SqlDecimal(decodeUnscaledValue(slice), getPrecision(), getScale()); }
protected static SqlDecimal decimal(String decimalString) { DecimalParseResult parseResult = Decimals.parseIncludeLeadingZerosInPrecision(decimalString); BigInteger unscaledValue; if (parseResult.getType().isShort()) { unscaledValue = BigInteger.valueOf((Long) parseResult.getObject()); } else { unscaledValue = Decimals.decodeUnscaledValue((Slice) parseResult.getObject()); } return new SqlDecimal(unscaledValue, parseResult.getType().getPrecision(), parseResult.getType().getScale()); }
@Test public void smokedTest() throws Exception { assertExecute("cast(true as boolean)", BOOLEAN, true); assertExecute("true", BOOLEAN, true); assertExecute("false", BOOLEAN, false); assertExecute("42", INTEGER, 42); assertExecute("'foo'", createVarcharType(3), "foo"); assertExecute("4.2E0", DOUBLE, 4.2); assertExecute("10000000000 + 1", BIGINT, 10000000001L); assertExecute("4.2", createDecimalType(2, 1), new SqlDecimal(BigInteger.valueOf(42), 2, 1)); assertExecute("DECIMAL '4.2'", createDecimalType(2, 1), new SqlDecimal(BigInteger.valueOf(42), 2, 1)); assertExecute("X' 1 f'", VARBINARY, new SqlVarbinary(Slices.wrappedBuffer((byte) 0x1f).getBytes())); assertExecute("X' '", VARBINARY, new SqlVarbinary(new byte[0])); assertExecute("bound_integer", INTEGER, 1234); assertExecute("bound_long", BIGINT, 1234L); assertExecute("bound_string", VARCHAR, "hello"); assertExecute("bound_double", DOUBLE, 12.34); assertExecute("bound_boolean", BOOLEAN, true); assertExecute("bound_timestamp", BIGINT, new DateTime(2001, 8, 22, 3, 4, 5, 321, UTC).getMillis()); assertExecute("bound_pattern", VARCHAR, "%el%"); assertExecute("bound_null_string", VARCHAR, null); assertExecute("bound_timestamp_with_timezone", TIMESTAMP_WITH_TIME_ZONE, new SqlTimestampWithTimeZone(new DateTime(1970, 1, 1, 0, 1, 0, 999, DateTimeZone.UTC).getMillis(), TimeZoneKey.getTimeZoneKey("Z"))); assertExecute("bound_binary_literal", VARBINARY, new SqlVarbinary(new byte[] {(byte) 0xab})); // todo enable when null output type is supported // assertExecute("null", null); Futures.allAsList(futures).get(); }
actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());
return new SqlDecimal((BigInteger) fieldFromCursor, decimalType.getPrecision(), decimalType.getScale());
actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());