DRILL-7630: Add additional types into SchemaParser for Parquet
closes #2019
diff --git a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaLexer.g4 b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaLexer.g4
index 62d9f10..c531356 100644
--- a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaLexer.g4
+++ b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaLexer.g4
@@ -58,6 +58,14 @@
STRUCT: 'STRUCT';
ARRAY: 'ARRAY';
+// additional data types, primary used for Parquet
+UINT1: 'UINT1';
+UINT2: 'UINT2';
+UINT4: 'UINT4';
+UINT8: 'UINT8';
+TINYINT: 'TINYINT';
+SMALLINT: 'SMALLINT';
+
// symbols
COMMA: ',';
REVERSE_QUOTE: '`';
diff --git a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4 b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4
index 5bd55a7..1ff90ec 100644
--- a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4
+++ b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4
@@ -63,6 +63,12 @@
| INTERVAL (YEAR | MONTH) # interval_year
| INTERVAL (DAY | HOUR | MINUTE | SECOND) # interval_day
| INTERVAL # interval
+| UINT1 # unit1
+| UINT2 # unit2
+| UINT4 # unit4
+| UINT8 # unit8
+| TINYINT # tinyint
+| SMALLINT # smallint
;
array_type: (simple_array_type | complex_array_type);
diff --git a/exec/vector/src/main/java/org/apache/drill/exec/record/metadata/schema/parser/SchemaVisitor.java b/exec/vector/src/main/java/org/apache/drill/exec/record/metadata/schema/parser/SchemaVisitor.java
index cd5da79..18ed651 100644
--- a/exec/vector/src/main/java/org/apache/drill/exec/record/metadata/schema/parser/SchemaVisitor.java
+++ b/exec/vector/src/main/java/org/apache/drill/exec/record/metadata/schema/parser/SchemaVisitor.java
@@ -279,6 +279,36 @@
}
@Override
+ public ColumnMetadata visitUnit1(SchemaParser.Unit1Context ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.UINT1, mode));
+ }
+
+ @Override
+ public ColumnMetadata visitUnit2(SchemaParser.Unit2Context ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.UINT2, mode));
+ }
+
+ @Override
+ public ColumnMetadata visitUnit4(SchemaParser.Unit4Context ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.UINT4, mode));
+ }
+
+ @Override
+ public ColumnMetadata visitUnit8(SchemaParser.Unit8Context ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.UINT8, mode));
+ }
+
+ @Override
+ public ColumnMetadata visitTinyint(SchemaParser.TinyintContext ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.TINYINT, mode));
+ }
+
+ @Override
+ public ColumnMetadata visitSmallint(SchemaParser.SmallintContext ctx) {
+ return constructColumn(Types.withMode(TypeProtos.MinorType.SMALLINT, mode));
+ }
+
+ @Override
public ColumnMetadata visitStruct_type(SchemaParser.Struct_typeContext ctx) {
// internally Drill refers to structs as maps
MapBuilder builder = new MapBuilder(null, name, mode);
diff --git a/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java b/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
index a0acf10..201a2dc 100644
--- a/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
+++ b/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
@@ -185,6 +185,21 @@
}
@Test
+ public void testAdditionalParquetTypes() throws Exception {
+ TupleMetadata schema = new SchemaBuilder()
+ .addNullable("uint1_col", TypeProtos.MinorType.UINT1)
+ .addNullable("uint2_col", TypeProtos.MinorType.UINT2)
+ .addNullable("uint4_col", TypeProtos.MinorType.UINT4)
+ .addNullable("uint8_col", TypeProtos.MinorType.UINT8)
+ .addNullable("tinyint_col", TypeProtos.MinorType.TINYINT)
+ .addNullable("smallint_col", TypeProtos.MinorType.SMALLINT)
+ .buildSchema();
+
+ checkSchema("uint1_col uint1, uint2_col uint2, uint4_col uint4, uint8_col uint8, " +
+ "tinyint_col tinyint, smallint_col smallint", schema);
+ }
+
+ @Test
public void testArray() throws Exception {
TupleMetadata schema = new SchemaBuilder()
.addArray("simple_array", TypeProtos.MinorType.INT)