Skip to content

Commit 00ff5d4

Browse files
author
Andrew Pikler
committed
deduplicate OriginalType conversion code
1 parent dacc16f commit 00ff5d4

File tree

3 files changed

+25
-56
lines changed

3 files changed

+25
-56
lines changed

parquet-column/src/main/java/org/apache/parquet/schema/converters/ParquetEnumConverter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
*/
1919
package org.apache.parquet.schema.converters;
2020

21+
import org.apache.parquet.format.ConvertedType;
2122
import org.apache.parquet.format.EdgeInterpolationAlgorithm;
2223
import org.apache.parquet.format.FieldRepetitionType;
2324
import org.apache.parquet.format.TimeUnit;
2425
import org.apache.parquet.format.Type;
2526
import org.apache.parquet.schema.LogicalTypeAnnotation;
27+
import org.apache.parquet.schema.OriginalType;
2628
import org.apache.parquet.schema.PrimitiveType;
2729

2830
/**
@@ -119,4 +121,8 @@ static LogicalTypeAnnotation.TimeUnit convertTimeUnit(TimeUnit unit) {
119121
throw new RuntimeException("Unknown time unit " + unit);
120122
}
121123
}
124+
125+
static OriginalType toParquetOriginalType(ConvertedType convertedType) {
126+
return OriginalType.valueOf(convertedType.name());
127+
}
122128
}

parquet-column/src/main/java/org/apache/parquet/schema/converters/ParquetSchemaConverter.java

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static org.apache.parquet.schema.converters.ParquetEnumConverter.fromParquetEdgeInterpolationAlgorithm;
2424
import static org.apache.parquet.schema.converters.ParquetEnumConverter.getPrimitive;
2525
import static org.apache.parquet.schema.converters.ParquetEnumConverter.getType;
26+
import static org.apache.parquet.schema.converters.ParquetEnumConverter.toParquetOriginalType;
2627
import static org.apache.parquet.schema.converters.ParquetEnumConverter.toParquetRepetition;
2728

2829
import java.util.ArrayList;
@@ -47,6 +48,7 @@
4748
import org.apache.parquet.format.Type;
4849
import org.apache.parquet.format.TypeDefinedOrder;
4950
import org.apache.parquet.format.VariantType;
51+
import org.apache.parquet.schema.DecimalMetadata;
5052
import org.apache.parquet.schema.GroupType;
5153
import org.apache.parquet.schema.LogicalTypeAnnotation;
5254
import org.apache.parquet.schema.MessageType;
@@ -176,57 +178,10 @@ private static org.apache.parquet.schema.ColumnOrder fromParquetColumnOrder(Colu
176178

177179
// Visible for testing
178180
LogicalTypeAnnotation getLogicalTypeAnnotation(ConvertedType type, SchemaElement schemaElement) {
179-
switch (type) {
180-
case UTF8:
181-
return LogicalTypeAnnotation.stringType();
182-
case MAP:
183-
return LogicalTypeAnnotation.mapType();
184-
case MAP_KEY_VALUE:
185-
return LogicalTypeAnnotation.MapKeyValueTypeAnnotation.getInstance();
186-
case LIST:
187-
return LogicalTypeAnnotation.listType();
188-
case ENUM:
189-
return LogicalTypeAnnotation.enumType();
190-
case DECIMAL:
191-
int scale = (schemaElement == null ? 0 : schemaElement.scale);
192-
int precision = (schemaElement == null ? 0 : schemaElement.precision);
193-
return LogicalTypeAnnotation.decimalType(scale, precision);
194-
case DATE:
195-
return LogicalTypeAnnotation.dateType();
196-
case TIME_MILLIS:
197-
return LogicalTypeAnnotation.timeType(true, LogicalTypeAnnotation.TimeUnit.MILLIS);
198-
case TIME_MICROS:
199-
return LogicalTypeAnnotation.timeType(true, LogicalTypeAnnotation.TimeUnit.MICROS);
200-
case TIMESTAMP_MILLIS:
201-
return LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.MILLIS);
202-
case TIMESTAMP_MICROS:
203-
return LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.MICROS);
204-
case INTERVAL:
205-
return LogicalTypeAnnotation.IntervalLogicalTypeAnnotation.getInstance();
206-
case INT_8:
207-
return LogicalTypeAnnotation.intType(8, true);
208-
case INT_16:
209-
return LogicalTypeAnnotation.intType(16, true);
210-
case INT_32:
211-
return LogicalTypeAnnotation.intType(32, true);
212-
case INT_64:
213-
return LogicalTypeAnnotation.intType(64, true);
214-
case UINT_8:
215-
return LogicalTypeAnnotation.intType(8, false);
216-
case UINT_16:
217-
return LogicalTypeAnnotation.intType(16, false);
218-
case UINT_32:
219-
return LogicalTypeAnnotation.intType(32, false);
220-
case UINT_64:
221-
return LogicalTypeAnnotation.intType(64, false);
222-
case JSON:
223-
return LogicalTypeAnnotation.jsonType();
224-
case BSON:
225-
return LogicalTypeAnnotation.bsonType();
226-
default:
227-
throw new RuntimeException(
228-
"Can't convert converted type to logical type, unknown converted type " + type);
229-
}
181+
int scale = (schemaElement == null ? 0 : schemaElement.scale);
182+
int precision = (schemaElement == null ? 0 : schemaElement.precision);
183+
return LogicalTypeAnnotation.fromOriginalType(
184+
toParquetOriginalType(type), new DecimalMetadata(scale, precision));
230185
}
231186

232187
LogicalTypeAnnotation getLogicalTypeAnnotation(LogicalType type) {

parquet-column/src/test/java/org/apache/parquet/schema/converters/TestParquetEnumConverter.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
*/
1919
package org.apache.parquet.schema.converters;
2020

21+
import static org.junit.Assert.assertEquals;
22+
import static org.junit.Assert.assertNull;
23+
2124
import org.apache.parquet.column.schema.EdgeInterpolationAlgorithm;
2225
import org.apache.parquet.format.ConvertedType;
2326
import org.apache.parquet.format.FieldRepetitionType;
@@ -27,11 +30,7 @@
2730
import org.apache.parquet.schema.PrimitiveType;
2831
import org.junit.Test;
2932

30-
import static org.junit.Assert.assertEquals;
31-
import static org.junit.Assert.assertNull;
32-
33-
public class TestParquetEnumConverter
34-
{
33+
public class TestParquetEnumConverter {
3534
@Test
3635
public void testEnumEquivalence() {
3736
ParquetSchemaConverter parquetMetadataConverter = new ParquetSchemaConverter();
@@ -90,4 +89,13 @@ public void testEdgeInterpolationAlgorithmConversion() {
9089
assertNull(ParquetEnumConverter.fromParquetEdgeInterpolationAlgorithm(null));
9190
assertNull(ParquetEnumConverter.toParquetEdgeInterpolationAlgorithm(null));
9291
}
92+
93+
@Test
94+
public void testConvertedTypeToOriginalType() {
95+
for (ConvertedType convertedType : ConvertedType.values()) {
96+
assertEquals(
97+
convertedType.name(),
98+
ParquetEnumConverter.toParquetOriginalType(convertedType).name());
99+
}
100+
}
93101
}

0 commit comments

Comments
 (0)