@Override public Object toObject(Object object, PDataType actualType) { Float v = (Float) PFloat.INSTANCE.toObject(object, actualType); throwIfNonNegativeNumber(v); return v; }
@Override public int compareTo(Object lhs, Object rhs, PDataType rhsType) { return PFloat.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().encodeFloat(((Number) object).floatValue(), bytes, offset); }
if (equalsAny(actualType, PFloat.INSTANCE, PUnsignedFloat.INSTANCE)) { return object; } else if (equalsAny(actualType, PDouble.INSTANCE, PUnsignedDouble.INSTANCE)) { double d = (Double) object; if (Double.isNaN(d) return (float) d; } else { throw newIllegalDataException( actualType + " value " + d + " cannot be cast to Float without changing its value"); } else if (equalsAny(actualType, PLong.INSTANCE, PUnsignedLong.INSTANCE)) { f = (Long) object; return f; } else if (equalsAny(actualType, PInteger.INSTANCE, PUnsignedInt.INSTANCE)) { f = (Integer) object; return f; } else if (equalsAny(actualType, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { f = (Byte) object; return f; } else if (equalsAny(actualType, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE)) { f = (Short) object; return f; return dl.floatValue(); return throwConstraintViolationException(actualType, this);
@Override public Float toObject(byte[] b, int o, int l, PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) { if (l <= 0) { return null; } if (equalsAny(actualType, PFloat.INSTANCE, PUnsignedFloat.INSTANCE, PDouble.INSTANCE, PUnsignedDouble.INSTANCE, PLong.INSTANCE, PUnsignedLong.INSTANCE, PInteger.INSTANCE, PUnsignedInt.INSTANCE, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { return actualType.getCodec().decodeFloat(b, o, sortOrder); } else if (actualType == PDecimal.INSTANCE) { BigDecimal bd = (BigDecimal) actualType.toObject(b, o, l, actualType, sortOrder); return bd.floatValue(); } throwConstraintViolationException(actualType, this); return null; }
@Test public void testFloat() { Float na = 0.005f; byte[] b = PFloat.INSTANCE.toBytes(na); Float nb = (Float) PFloat.INSTANCE.toObject(b); assertEquals(na,nb); b = PFloat.INSTANCE.toBytes(na, SortOrder.DESC); ImmutableBytesWritable ptr = new ImmutableBytesWritable(); ptr.set(b); nb = PFloat.INSTANCE.getCodec().decodeFloat(ptr, SortOrder.DESC); assertEquals(na,nb); byte[] ba = PFloat.INSTANCE.toBytes(na); byte[] bb = PFloat.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) > 0); ba = PFloat.INSTANCE.toBytes(na); bb = PFloat.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) > 0); ba = PFloat.INSTANCE.toBytes(na); bb = PFloat.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) < 0); ba = PFloat.INSTANCE.toBytes(na); bb = PFloat.INSTANCE.toBytes(nb); assertTrue(Bytes.compareTo(ba, bb) < 0); ba = PFloat.INSTANCE.toBytes(na);
assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(1e100), 0, PFloat.INSTANCE.getByteSize(), SortOrder .getDefault(), PLong.INSTANCE.toBytes(1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(0.001), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MAX_VALUE), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MAX_VALUE - 1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MIN_VALUE), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MIN_VALUE + 1), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MIN_VALUE), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) == 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MAX_VALUE + 1.0F), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MAX_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); // Passes due to rounding assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MAX_VALUE + 129.0F), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MAX_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) > 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MIN_VALUE - 128.0F), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) == 0); assertTrue(PFloat.INSTANCE.compareTo(PFloat.INSTANCE.toBytes(Integer.MIN_VALUE - 129.0F), 0, PFloat.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE.toBytes(Integer.MIN_VALUE), 0, PLong.INSTANCE.getByteSize(), SortOrder.getDefault(), PLong.INSTANCE) < 0); assertTrue(la == f1);
@Override public boolean isCoercibleTo(PDataType targetType, Object value) { return super.isCoercibleTo(targetType) || PFloat.INSTANCE.isCoercibleTo(targetType, value); }
@Override public byte[] toBytes(Object object) { byte[] b = new byte[Bytes.SIZEOF_FLOAT]; toBytes(object, b, 0); return b; }
@Override public int getResultSetSqlType() { return PFloat.INSTANCE.getResultSetSqlType(); }
@Override public Object getSampleValue(Integer maxLength, Integer arrayLength) { return Math.abs((Float) PFloat.INSTANCE.getSampleValue(maxLength, arrayLength)); }
@Override public Integer getMaxLength(Object o) { return PFloat.INSTANCE.getMaxLength(o); }
@Override public boolean isCoercibleTo(PDataType targetType) { return this.equals(targetType) || PDouble.INSTANCE.isCoercibleTo(targetType); }
if (equalsAny(actualType, PFloat.INSTANCE, PUnsignedFloat.INSTANCE)) { return object; } else if (equalsAny(actualType, PDouble.INSTANCE, PUnsignedDouble.INSTANCE)) { double d = (Double) object; if (Double.isNaN(d) return (float) d; } else { throw newIllegalDataException( actualType + " value " + d + " cannot be cast to Float without changing its value"); } else if (equalsAny(actualType, PLong.INSTANCE, PUnsignedLong.INSTANCE)) { f = (Long) object; return f; } else if (equalsAny(actualType, PInteger.INSTANCE, PUnsignedInt.INSTANCE)) { f = (Integer) object; return f; } else if (equalsAny(actualType, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { f = (Byte) object; return f; } else if (equalsAny(actualType, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE)) { f = (Short) object; return f; return dl.floatValue(); return throwConstraintViolationException(actualType, this);
@Override public boolean isCoercibleTo(PDataType targetType) { return this.equals(targetType) || PUnsignedDouble.INSTANCE.isCoercibleTo(targetType) || PFloat.INSTANCE .isCoercibleTo(targetType); }
@Override public Float toObject(byte[] b, int o, int l, PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) { if (l <= 0) { return null; } if (equalsAny(actualType, PFloat.INSTANCE, PUnsignedFloat.INSTANCE, PDouble.INSTANCE, PUnsignedDouble.INSTANCE, PLong.INSTANCE, PUnsignedLong.INSTANCE, PInteger.INSTANCE, PUnsignedInt.INSTANCE, PSmallint.INSTANCE, PUnsignedSmallint.INSTANCE, PTinyint.INSTANCE, PUnsignedTinyint.INSTANCE)) { return actualType.getCodec().decodeFloat(b, o, sortOrder); } else if (actualType == PDecimal.INSTANCE) { BigDecimal bd = (BigDecimal) actualType.toObject(b, o, l, actualType, sortOrder); return bd.floatValue(); } throwConstraintViolationException(actualType, this); return null; }
@Override public byte[] toBytes(Object object) { byte[] b = new byte[Bytes.SIZEOF_FLOAT]; toBytes(object, b, 0); return b; }
@Override public int getResultSetSqlType() { return PFloat.INSTANCE.getResultSetSqlType(); }
@Override public Object getSampleValue(Integer maxLength, Integer arrayLength) { return Math.abs((Float) PFloat.INSTANCE.getSampleValue(maxLength, arrayLength)); }