Skip to content

Commit b67c034

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

2 files changed

Lines changed: 21 additions & 13 deletions

File tree

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,17 @@ private static void addGroupType(Tokenizer st, Repetition r, GroupBuilder<?> bui
121121
t = st.nextToken();
122122
OriginalType originalType = null;
123123
if (t.equalsIgnoreCase("(")) {
124-
originalType = OriginalType.valueOf(st.nextToken());
125-
childBuilder.as(originalType);
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+
} else {
130+
// Try to parse as OriginalType
131+
originalType = OriginalType.valueOf(t);
132+
childBuilder.as(originalType);
133+
}
134+
126135
check(st.nextToken(), ")", "original type ended by )", st);
127136
t = st.nextToken();
128137
}

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)