diff --git a/presto-kafka/src/test/java/com/facebook/presto/kafka/TestKafkaIntegrationSmokeTest.java b/presto-kafka/src/test/java/com/facebook/presto/kafka/TestKafkaIntegrationSmokeTest.java index fb74b7d9bd362..7bfd53c9bc3c3 100644 --- a/presto-kafka/src/test/java/com/facebook/presto/kafka/TestKafkaIntegrationSmokeTest.java +++ b/presto-kafka/src/test/java/com/facebook/presto/kafka/TestKafkaIntegrationSmokeTest.java @@ -69,10 +69,10 @@ private List roundTripAllFormatsData() return ImmutableList.builder() .add(new RoundTripTestCase( "all_datatypes_avro", - ImmutableList.of("f_bigint", "f_double", "f_boolean", "f_varchar"), + ImmutableList.of("f_bigint", "f_float", "f_double", "f_boolean", "f_varchar"), ImmutableList.of( - ImmutableList.of(100000, 1000.001, true, "'test'"), - ImmutableList.of(123456, 1234.123, false, "'abcd'")))) + ImmutableList.of(100000, 999.999f, 1000.001, true, "'test'"), + ImmutableList.of(123456, -123.456f, 1234.123, false, "'abcd'")))) .add(new RoundTripTestCase( "all_datatypes_csv", ImmutableList.of("f_bigint", "f_int", "f_double", "f_boolean", "f_varchar"), diff --git a/presto-kafka/src/test/resources/write_test/all_datatypes_avro.json b/presto-kafka/src/test/resources/write_test/all_datatypes_avro.json index d440c46eca0bb..a9c6b4db09209 100644 --- a/presto-kafka/src/test/resources/write_test/all_datatypes_avro.json +++ b/presto-kafka/src/test/resources/write_test/all_datatypes_avro.json @@ -22,6 +22,11 @@ "type": "BIGINT", "mapping": "f_bigint" }, + { + "name": "f_float", + "type": "REAL", + "mapping": "f_float" + }, { "name": "f_double", "type": "DOUBLE", diff --git a/presto-kafka/src/test/resources/write_test/all_datatypes_avro_message_schema.avsc b/presto-kafka/src/test/resources/write_test/all_datatypes_avro_message_schema.avsc index d682a2159adda..5b909e965d403 100644 --- a/presto-kafka/src/test/resources/write_test/all_datatypes_avro_message_schema.avsc +++ b/presto-kafka/src/test/resources/write_test/all_datatypes_avro_message_schema.avsc @@ -9,6 +9,11 @@ "type":["null", "long"], "default": null }, + { + "name": "f_float", + "type":["null", "float"], + "default": null + }, { "name": "f_double", "type":["null", "double"], diff --git a/presto-record-decoder/src/main/java/com/facebook/presto/decoder/avro/AvroColumnDecoder.java b/presto-record-decoder/src/main/java/com/facebook/presto/decoder/avro/AvroColumnDecoder.java index d6679e3b18e2f..7bdfd0aa59e86 100644 --- a/presto-record-decoder/src/main/java/com/facebook/presto/decoder/avro/AvroColumnDecoder.java +++ b/presto-record-decoder/src/main/java/com/facebook/presto/decoder/avro/AvroColumnDecoder.java @@ -183,6 +183,9 @@ public long getLong() if (value instanceof Long || value instanceof Integer) { return ((Number) value).longValue(); } + if (value instanceof Float && columnType == RealType.REAL) { + return floatToIntBits((float) value); + } throw new PrestoException(DECODER_CONVERSION_NOT_SUPPORTED, format("cannot decode object of '%s' as '%s' for column '%s'", value.getClass(), columnType, columnName)); }