Skip to content

Commit a683f6a

Browse files
committed
Add parsing logical type for GroupType
1 parent f88fd3f commit a683f6a

2 files changed

Lines changed: 26 additions & 16 deletions

File tree

parquet-column/src/main/java/org/apache/parquet/schema/MessageTypeParser.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,23 @@ private static void addGroupType(Tokenizer st, Repetition r, GroupBuilder<?> bui
118118
String name = st.nextToken();
119119

120120
// Read annotation, if any.
121+
String annotation = null;
121122
t = st.nextToken();
122-
OriginalType originalType = null;
123123
if (t.equalsIgnoreCase("(")) {
124-
originalType = OriginalType.valueOf(st.nextToken());
125-
childBuilder.as(originalType);
126-
check(st.nextToken(), ")", "original type ended by )", st);
124+
t = st.nextToken();
125+
if (isLogicalType(t)) {
126+
LogicalTypeAnnotation.LogicalTypeToken logicalType = LogicalTypeAnnotation.LogicalTypeToken.valueOf(t);
127+
LogicalTypeAnnotation logicalTypeAnnotation = logicalType.fromString(new ArrayList<>());
128+
childBuilder.as(logicalTypeAnnotation);
129+
annotation = logicalTypeAnnotation.toString();
130+
} else {
131+
// Try to parse as OriginalType
132+
OriginalType originalType = OriginalType.valueOf(t);
133+
childBuilder.as(originalType);
134+
annotation = originalType.toString();
135+
}
136+
137+
check(st.nextToken(), ")", "logical type ended by )", st);
127138
t = st.nextToken();
128139
}
129140
if (t.equals("=")) {
@@ -134,7 +145,7 @@ private static void addGroupType(Tokenizer st, Repetition r, GroupBuilder<?> bui
134145
addGroupTypeFields(t, st, childBuilder);
135146
} catch (IllegalArgumentException e) {
136147
throw new IllegalArgumentException(
137-
"problem reading type: type = group, name = " + name + ", original type = " + originalType, e);
148+
"problem reading type: type = group, name = " + name + ", annotation = " + annotation, e);
138149
}
139150

140151
childBuilder.named(name);

parquet-column/src/test/java/org/apache/parquet/parser/TestParquetParser.java

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

21-
import static org.apache.parquet.format.LogicalTypes.VARIANT;
2221
import static org.apache.parquet.schema.LogicalTypeAnnotation.TimeUnit.MILLIS;
2322
import static org.apache.parquet.schema.LogicalTypeAnnotation.TimeUnit.NANOS;
2423
import static org.apache.parquet.schema.LogicalTypeAnnotation.intType;
@@ -452,12 +451,12 @@ public void testEmbeddedAnnotations() {
452451

453452
@Test
454453
public void testVARIANTAnnotation() {
455-
String message = "message Message {\n"
456-
+ " required group aVariant (VARIANT) {\n"
457-
+ " required binary metadata;\n"
458-
+ " required binary value;\n"
459-
+ " }\n"
460-
+ "}\n";
454+
String message = "message Message {\n"
455+
+ " required group aVariant (VARIANT) {\n"
456+
+ " required binary metadata;\n"
457+
+ " required binary value;\n"
458+
+ " }\n"
459+
+ "}\n";
461460

462461
MessageType expected = buildMessage()
463462
.requiredGroup()
@@ -469,10 +468,10 @@ public void testVARIANTAnnotation() {
469468
.named("aVariant")
470469
.named("Message");
471470

472-
MessageType parsed = parseMessageType(message);
471+
MessageType parsed = parseMessageType(message);
473472

474-
assertEquals(expected, parsed);
475-
MessageType reparsed = parseMessageType(parsed.toString());
476-
assertEquals(expected, reparsed);
473+
assertEquals(expected, parsed);
474+
MessageType reparsed = parseMessageType(parsed.toString());
475+
assertEquals(expected, reparsed);
477476
}
478477
}

0 commit comments

Comments
 (0)