@Override public int compareTo(Object lhs, Object rhs, PDataType rhsType) { return PDouble.INSTANCE.compareTo(lhs, rhs, rhsType); }
@Override public int toBytes(Object object, byte[] bytes, int offset) { if (object == null) { throw newIllegalDataException(this + " may not be null"); } return this.getCodec().encodeDouble(((Number) object).doubleValue(), bytes, offset); }
@Override public int getResultSetSqlType() { return PDouble.INSTANCE.getResultSetSqlType(); }
@Override public Object toObject(Object object, PDataType actualType) { if (object == null) { return null; } double de; if (equalsAny(actualType, PDouble.INSTANCE, PUnsignedDouble.INSTANCE)) { return object; } else if (equalsAny(actualType, PFloat.INSTANCE, PUnsignedFloat.INSTANCE)) { de = (Float) object; return de; } else if (equalsAny(actualType, PLong.INSTANCE, PUnsignedLong.INSTANCE)) { de = (Long) object; return de; } else if (equalsAny(actualType, PInteger.INSTANCE, PUnsignedInt.INSTANCE)) { de = (Integer) object; return de; } else if (equalsAny(actualType, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { de = (Byte) object; return de; } else if (equalsAny(actualType, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE)) { de = (Short) object; return de; } else if (actualType == PDecimal.INSTANCE) { BigDecimal d = (BigDecimal) object; return d.doubleValue(); } return throwConstraintViolationException(actualType, this); }
@Test public void testDouble() { Double na = 0.005; byte[] b = PDouble.INSTANCE.toBytes(na); Double nb = (Double) PDouble.INSTANCE.toObject(b); assertEquals(na,nb); b = PDouble.INSTANCE.toBytes(na, SortOrder.DESC); ImmutableBytesWritable ptr = new ImmutableBytesWritable(); ptr.set(b); nb = PDouble.INSTANCE.getCodec().decodeDouble(ptr, SortOrder.DESC); assertEquals(na,nb); byte[] ba = PDouble.INSTANCE.toBytes(na); byte[] bb = PDouble.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) > 0); ba = PDouble.INSTANCE.toBytes(na); bb = PDouble.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) > 0); ba = PDouble.INSTANCE.toBytes(na); bb = PDouble.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) < 0); ba = PDouble.INSTANCE.toBytes(na); bb = PDouble.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) < 0); ba = PDouble.INSTANCE.toBytes(na);
private double mean() { double sum = 0.0; for (Entry<ImmutableBytesPtr, Integer> entry : valueVsCount.entrySet()) { double colValue = (Double) PDouble.INSTANCE.toObject(entry.getKey(), this.stdDevColExp.getDataType()); sum += colValue * entry.getValue(); } return sum / totalCount; }
@Test public void testDoubleToDecimalComparison() { // Basic tests assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(1.23), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PDecimal.INSTANCE.toBytes(BigDecimal.valueOf(1.24)), 0, PDecimal.INSTANCE.getByteSize(), SortOrder.getDefault(), PDecimal.INSTANCE) < 0); }
@Override public byte[] toBytes(Object object) { byte[] b = new byte[Bytes.SIZEOF_DOUBLE]; toBytes(object, b, 0); return b; }
@Override public boolean isCoercibleTo(PDataType targetType, Object value) { return super.isCoercibleTo(targetType, value) || PDouble.INSTANCE .isCoercibleTo(targetType, value); }
public DoubleSumAggregator(SortOrder sortOrder, ImmutableBytesWritable ptr) { super(sortOrder); if (ptr != null) { initBuffer(); sum = PDouble.INSTANCE.getCodec().decodeDouble(ptr, sortOrder); } }
@Override public Integer getScale(Object o) { return PDouble.INSTANCE.getScale(o); }
@Override public Integer getMaxLength(Object o) { return PDouble.INSTANCE.getMaxLength(o); }
@Override public Object getSampleValue(Integer maxLength, Integer arrayLength) { return Math.abs((Double) PDouble.INSTANCE.getSampleValue(maxLength, arrayLength)); }
@Override public boolean isCoercibleTo(PDataType targetType) { return equalsAny(targetType, this, PDecimal.INSTANCE, PVarbinary.INSTANCE, PBinary.INSTANCE); }
@Override public Object toObject(Object object, PDataType actualType) { Double v = (Double) PDouble.INSTANCE.toObject(object, actualType); throwIfNonNegativeNumber(v); return v; }
assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(-1e100), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(0.001), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MAX_VALUE), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MAX_VALUE - 1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MIN_VALUE), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MIN_VALUE + 1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MIN_VALUE), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) == 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MAX_VALUE + 1024.0), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MAX_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) == 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MAX_VALUE + 1025.0), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MAX_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MIN_VALUE - 1024.0), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) == 0); assertTrue(PDouble.INSTANCE.compareTo(PDouble.INSTANCE.toBytes(Long.MIN_VALUE - 1025.0), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Long.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); PDouble.INSTANCE.toBytes(-1e100), 0, PDouble.INSTANCE.getByteSize(), SortOrder.getDefault(), PDouble.INSTANCE) > 0); assertTrue(PLong.INSTANCE.compareTo(PLong.INSTANCE.toBytes(1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(),
@Override public Double toObject(byte[] b, int o, int l, PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) { if (l <= 0) { return null; } if (equalsAny(actualType, PDouble.INSTANCE, PUnsignedDouble.INSTANCE, PFloat.INSTANCE, PUnsignedFloat.INSTANCE, PLong.INSTANCE, PUnsignedLong.INSTANCE, PInteger.INSTANCE, PUnsignedInt.INSTANCE, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { return actualType.getCodec().decodeDouble(b, o, sortOrder); } else if (actualType == PDecimal.INSTANCE) { BigDecimal bd = (BigDecimal) actualType.toObject(b, o, l, actualType, sortOrder); return bd.doubleValue(); } throwConstraintViolationException(actualType, this); return null; }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { if (current == null) { current = random.nextDouble(); } ptr.set(PDouble.INSTANCE.toBytes(current)); return true; }
@Override public boolean isCoercibleTo(PDataType targetType) { return this.equals(targetType) || PDouble.INSTANCE.isCoercibleTo(targetType); }