[PARQUET-1717] Convert i16 thrift to INT16 logical type instead (#706)
* [PARQUET-1717] Convert i16 thrift to INT16 logical type instead of INT32 primitive
* [Parquet-1717] Add unit test
Add unit test for i16 thrift type
diff --git a/parquet-thrift/src/main/java/org/apache/parquet/thrift/ThriftSchemaConvertVisitor.java b/parquet-thrift/src/main/java/org/apache/parquet/thrift/ThriftSchemaConvertVisitor.java
index 7bfcdb1..4cd3cf5 100644
--- a/parquet-thrift/src/main/java/org/apache/parquet/thrift/ThriftSchemaConvertVisitor.java
+++ b/parquet-thrift/src/main/java/org/apache/parquet/thrift/ThriftSchemaConvertVisitor.java
@@ -314,7 +314,7 @@
@Override
public ConvertedField visit(I16Type i16Type, State state) {
- return visitPrimitiveType(INT32, state);
+ return visitPrimitiveType(INT32, LogicalTypeAnnotation.intType(16, true),state);
}
@Override
diff --git a/parquet-thrift/src/test/java/org/apache/parquet/thrift/TestThriftSchemaConverter.java b/parquet-thrift/src/test/java/org/apache/parquet/thrift/TestThriftSchemaConverter.java
index 2cde15b..5a7b209 100644
--- a/parquet-thrift/src/test/java/org/apache/parquet/thrift/TestThriftSchemaConverter.java
+++ b/parquet-thrift/src/test/java/org/apache/parquet/thrift/TestThriftSchemaConverter.java
@@ -28,6 +28,7 @@
import org.apache.parquet.thrift.struct.ThriftType.StructType;
import org.apache.parquet.thrift.test.compat.MapStructV2;
import org.apache.parquet.thrift.test.compat.SetStructV2;
+import org.apache.parquet.thrift.test.TestLogicalType;
import org.apache.thrift.TBase;
import org.junit.Test;
@@ -337,4 +338,16 @@
final ThriftType fromJSON = StructType.fromJSON(json);
assertEquals(json, fromJSON.toJSON());
}
+
+ @Test
+ public void testLogicalTypeConvertion() throws Exception {
+ String expected =
+ "message ParquetSchema {\n" +
+ " required int32 test_i16 (INTEGER(16,true)) = 1;" +
+ "}";
+ ThriftSchemaConverter schemaConverter = new ThriftSchemaConverter();
+ final MessageType converted = schemaConverter.convert(TestLogicalType.class);
+ assertEquals(MessageTypeParser.parseMessageType(expected), converted);
+ }
+
}
diff --git a/parquet-thrift/src/test/thrift/test.thrift b/parquet-thrift/src/test/thrift/test.thrift
index e759144..9b3ac85 100644
--- a/parquet-thrift/src/test/thrift/test.thrift
+++ b/parquet-thrift/src/test/thrift/test.thrift
@@ -95,3 +95,7 @@
3: required Phone extraPhone,
6: required Phone phone
}
+
+struct TestLogicalType {
+ 1: required i16 test_i16
+}