aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java')
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java119
1 files changed, 78 insertions, 41 deletions
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java b/exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
index 1b9c06f45..eaae0a50e 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java
@@ -23,8 +23,10 @@ import org.apache.drill.exec.record.metadata.SchemaBuilder;
import org.apache.drill.exec.record.metadata.TupleMetadata;
import org.junit.Test;
+import java.time.LocalDate;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -35,18 +37,21 @@ import static org.junit.Assert.assertTrue;
public class TestSchemaParser {
@Test
- public void checkQuotedId() {
+ public void checkQuotedIdWithEscapes() {
String schemaWithEscapes = "`a\\\\b\\`c` INT";
- assertEquals(schemaWithEscapes, SchemaExprParser.parseSchema(schemaWithEscapes).schemaString());
+ assertEquals(schemaWithEscapes, SchemaExprParser.parseSchema(schemaWithEscapes).metadata(0).columnString());
String schemaWithKeywords = "`INTEGER` INT";
- assertEquals(schemaWithKeywords, SchemaExprParser.parseSchema(schemaWithKeywords).schemaString());
+ assertEquals(schemaWithKeywords, SchemaExprParser.parseSchema(schemaWithKeywords).metadata(0).columnString());
}
@Test
public void testSchemaWithParen() {
- String schema = "`a` INT NOT NULL, `b` VARCHAR(10)";
- assertEquals(schema, SchemaExprParser.parseSchema(String.format("(%s)", schema)).schemaString());
+ String schemaWithParen = "(`a` INT NOT NULL, `b` VARCHAR(10))";
+ TupleMetadata schema = SchemaExprParser.parseSchema(schemaWithParen);
+ assertEquals(2, schema.size());
+ assertEquals("`a` INT NOT NULL", schema.metadata("a").columnString());
+ assertEquals("`b` VARCHAR(10)", schema.metadata("b").columnString());
}
@Test
@@ -54,13 +59,14 @@ public class TestSchemaParser {
String schemaString = "id\n/*comment*/int\r,//comment\r\nname\nvarchar\t\t\t";
TupleMetadata schema = SchemaExprParser.parseSchema(schemaString);
assertEquals(2, schema.size());
- assertEquals("`id` INT, `name` VARCHAR", schema.schemaString());
+ assertEquals("`id` INT", schema.metadata("id").columnString());
+ assertEquals("`name` VARCHAR", schema.metadata("name").columnString());
}
@Test
public void testCaseInsensitivity() {
String schema = "`Id` InTeGeR NoT NuLl";
- assertEquals("`Id` INT NOT NULL", SchemaExprParser.parseSchema(schema).schemaString());
+ assertEquals("`Id` INT NOT NULL", SchemaExprParser.parseSchema(schema).metadata(0).columnString());
}
@Test
@@ -80,10 +86,7 @@ public class TestSchemaParser {
.buildSchema();
checkSchema("int_col int, integer_col integer not null, bigint_col bigint, " +
- "float_col float not null, double_col double",
- schema,
- "`int_col` INT, `integer_col` INT NOT NULL, `bigint_col` BIGINT, " +
- "`float_col` FLOAT NOT NULL, `double_col` DOUBLE");
+ "float_col float not null, double_col double", schema);
}
@Test
@@ -100,10 +103,8 @@ public class TestSchemaParser {
"col numeric, col_p numeric(5) not null, col_ps numeric(10, 2)"
);
- String expectedSchema = "`col` DECIMAL, `col_p` DECIMAL(5) NOT NULL, `col_ps` DECIMAL(10, 2)";
-
schemas.forEach(
- s -> checkSchema(s, schema, expectedSchema)
+ s -> checkSchema(s, schema)
);
}
@@ -113,13 +114,12 @@ public class TestSchemaParser {
.addNullable("col", TypeProtos.MinorType.BIT)
.buildSchema();
- checkSchema("col boolean", schema, "`col` BOOLEAN");
+ checkSchema("col boolean", schema);
}
@Test
public void testCharacterTypes() {
String schemaPattern = "col %1$s, col_p %1$s(50) not null";
- String expectedSchema = "`col` %1$s, `col_p` %1$s(50) NOT NULL";
Map<String, TypeProtos.MinorType> properties = new HashMap<>();
properties.put("char", TypeProtos.MinorType.VARCHAR);
@@ -136,7 +136,7 @@ public class TestSchemaParser {
.add("col_p", value, 50)
.buildSchema();
- checkSchema(String.format(schemaPattern, key), schema, String.format(expectedSchema, value.name()));
+ checkSchema(String.format(schemaPattern, key), schema);
});
}
@@ -151,10 +151,7 @@ public class TestSchemaParser {
.buildSchema();
checkSchema("time_col time, time_prec_col time(3), date_col date not null, " +
- "timestamp_col timestamp, timestamp_prec_col timestamp(3)",
- schema,
- "`time_col` TIME, `time_prec_col` TIME(3), `date_col` DATE NOT NULL, " +
- "`timestamp_col` TIMESTAMP, `timestamp_prec_col` TIMESTAMP(3)");
+ "timestamp_col timestamp, timestamp_prec_col timestamp(3)", schema);
}
@Test
@@ -171,11 +168,7 @@ public class TestSchemaParser {
checkSchema("interval_year_col interval year, interval_month_col interval month, " +
"interval_day_col interval day, interval_hour_col interval hour, interval_minute_col interval minute, " +
- "interval_second_col interval second, interval_col interval",
- schema,
- "`interval_year_col` INTERVAL YEAR, `interval_month_col` INTERVAL YEAR, " +
- "`interval_day_col` INTERVAL DAY, `interval_hour_col` INTERVAL DAY, `interval_minute_col` INTERVAL DAY, " +
- "`interval_second_col` INTERVAL DAY, `interval_col` INTERVAL");
+ "interval_second_col interval second, interval_col interval", schema);
}
@Test
@@ -201,12 +194,7 @@ public class TestSchemaParser {
+ ", nested_array array<array<int>>"
+ ", map_array array<map<m1 int, m2 varchar>>"
+ ", nested_array_map array<array<map<nm1 int, nm2 varchar>>>",
- schema,
- "`simple_array` ARRAY<INT>"
- + ", `nested_array` ARRAY<ARRAY<INT>>"
- + ", `map_array` ARRAY<MAP<`m1` INT, `m2` VARCHAR>>"
- + ", `nested_array_map` ARRAY<ARRAY<MAP<`nm1` INT, `nm2` VARCHAR>>>"
- );
+ schema);
}
@@ -223,9 +211,7 @@ public class TestSchemaParser {
.resumeSchema()
.buildSchema();
- checkSchema("map_col map<int_col int, array_col array<int>, nested_map map<m1 int, m2 varchar>>",
- schema,
- "`map_col` MAP<`int_col` INT, `array_col` ARRAY<INT>, `nested_map` MAP<`m1` INT, `m2` VARCHAR>>");
+ checkSchema("map_col map<int_col int, array_col array<int>, nested_map map<m1 int, m2 varchar>>", schema);
}
@Test
@@ -266,14 +252,65 @@ public class TestSchemaParser {
assertTrue(mapSchema.metadata("m2").isNullable());
}
- private void checkSchema(String schemaString, TupleMetadata expectedSchema, String expectedSchemaString) {
+ @Test
+ public void testFormat() {
+ String value = "`a` DATE NOT NULL FORMAT 'yyyy-MM-dd'";
+ TupleMetadata schema = SchemaExprParser.parseSchema(value);
+ ColumnMetadata columnMetadata = schema.metadata("a");
+ assertEquals("yyyy-MM-dd", columnMetadata.formatValue());
+ assertEquals(value, columnMetadata.columnString());
+ }
+
+ @Test
+ public void testDefault() {
+ String value = "`a` INT NOT NULL DEFAULT '12'";
+ TupleMetadata schema = SchemaExprParser.parseSchema(value);
+ ColumnMetadata columnMetadata = schema.metadata("a");
+ assertTrue(columnMetadata.defaultValue() instanceof Integer);
+ assertEquals(12, columnMetadata.defaultValue());
+ assertEquals("12", columnMetadata.defaultStringValue());
+ assertEquals(value, columnMetadata.columnString());
+ }
+
+ @Test
+ public void testFormatAndDefault() {
+ String value = "`a` DATE NOT NULL FORMAT 'yyyy-MM-dd' DEFAULT '2018-12-31'";
+ TupleMetadata schema = SchemaExprParser.parseSchema(value);
+ ColumnMetadata columnMetadata = schema.metadata("a");
+ assertTrue(columnMetadata.defaultValue() instanceof LocalDate);
+ assertEquals(LocalDate.of(2018, 12, 31), columnMetadata.defaultValue());
+ assertEquals("2018-12-31", columnMetadata.defaultStringValue());
+ assertEquals(value, columnMetadata.columnString());
+ }
+
+ @Test
+ public void testColumnProperties() {
+ String value = "`a` INT NOT NULL PROPERTIES { 'k1' = 'v1', 'k2' = 'v2' }";
+ TupleMetadata schema = SchemaExprParser.parseSchema(value);
+
+ ColumnMetadata columnMetadata = schema.metadata("a");
+
+ Map<String, String> properties = new LinkedHashMap<>();
+ properties.put("k1", "v1");
+ properties.put("k2", "v2");
+
+ assertEquals(properties, columnMetadata.properties());
+ assertEquals(value, columnMetadata.columnString());
+ }
+
+ private void checkSchema(String schemaString, TupleMetadata expectedSchema) {
TupleMetadata actualSchema = SchemaExprParser.parseSchema(schemaString);
- assertEquals(expectedSchema.schemaString(), actualSchema.schemaString());
- assertEquals(expectedSchemaString, actualSchema.schemaString());
- TupleMetadata unparsedSchema = SchemaExprParser.parseSchema(actualSchema.schemaString());
- assertEquals(unparsedSchema.schemaString(), expectedSchema.schemaString());
- assertEquals(expectedSchemaString, unparsedSchema.schemaString());
+ assertEquals(expectedSchema.size(), actualSchema.size());
+ assertEquals(expectedSchema.properties(), actualSchema.properties());
+
+ expectedSchema.toMetadataList().forEach(
+ expectedMetadata -> {
+ ColumnMetadata actualMetadata = actualSchema.metadata(expectedMetadata.name());
+ assertEquals(expectedMetadata.columnString(), actualMetadata.columnString());
+ }
+ );
+
}
}