public Builder addArrayField(String name, FieldType collectionElementType) { fields.add(Field.of(name, FieldType.array(collectionElementType))); return this; }
@Test public void testParsesArrayOfArrays() throws Exception { Schema schema = Schema.builder() .addArrayField("f_arrayOfIntArrays", FieldType.array(FieldType.INT32)) .build(); String rowString = "{\n" + "\"f_arrayOfIntArrays\" : [ [1, 2], [3, 4], [5]]\n" + "}"; RowJsonDeserializer deserializer = RowJsonDeserializer.forSchema(schema); Row parsedRow = newObjectMapperWith(deserializer).readValue(rowString, Row.class); Row expectedRow = Row.withSchema(schema) .addArray(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5)) .build(); assertEquals(expectedRow, parsedRow); }
@Test public void testThrowsForMismatchedArrayField() throws Exception { Schema schema = Schema.builder() .addArrayField("f_arrayOfIntArrays", FieldType.array(FieldType.INT32)) .build(); String rowString = "{\n" + "\"f_arrayOfIntArrays\" : { }\n" // expect array, get object + "}"; RowJsonDeserializer deserializer = RowJsonDeserializer.forSchema(schema); thrown.expect(UnsupportedRowJsonException.class); thrown.expectMessage("Expected JSON array"); newObjectMapperWith(deserializer).readValue(rowString, Row.class); }
@Test public void testArrayOfArray() throws Exception { FieldType arrayType = FieldType.array(FieldType.array(FieldType.INT32)); Schema schema = Schema.builder().addField("f_array", arrayType).build(); Row row = Row.withSchema(schema) .addArray( Lists.newArrayList(1, 2, 3, 4), Lists.newArrayList(5, 6, 7, 8), Lists.newArrayList(9, 10, 11, 12)) .build(); CoderProperties.coderDecodeEncodeEqual(RowCoder.of(schema), row); }
@Test public void testMapTypeToFieldType() { assertEquals( FieldType.map(FieldType.STRING, FieldType.INT64), FieldTypeDescriptors.fieldTypeForJavaType( TypeDescriptors.maps(TypeDescriptors.strings(), TypeDescriptors.longs()))); assertEquals( FieldType.map(FieldType.STRING, FieldType.array(FieldType.INT64)), FieldTypeDescriptors.fieldTypeForJavaType( TypeDescriptors.maps( TypeDescriptors.strings(), TypeDescriptors.lists(TypeDescriptors.longs())))); } }
@Test public void testCreatesArrayOfMap() { List<Map<Integer, String>> data = ImmutableList.<Map<Integer, String>>builder() .add(ImmutableMap.of(1, "value1")) .add(ImmutableMap.of(2, "value2")) .build(); Schema type = Stream.of( Schema.Field.of( "array", FieldType.array(FieldType.map(FieldType.INT32, FieldType.STRING)))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
public static FieldType toFieldType(RelDataType calciteType) { switch (calciteType.getSqlTypeName()) { case ARRAY: case MULTISET: return FieldType.array(toFieldType(calciteType.getComponentType())); case MAP: return FieldType.map( toFieldType(calciteType.getKeyType()), toFieldType(calciteType.getValueType())); case ROW: return FieldType.row(toSchema(calciteType)); default: return toFieldType(calciteType.getSqlTypeName()); } }
@Override public FieldType generateFieldType(SourceOfRandomness random, GenerationStatus status) { return FieldType.array(ANY_TYPE.generate(random, status)); } }
@Test public void testCreatesArrayWithNullElement() { List<Integer> data = Lists.newArrayList(2, null, 5, null); Schema type = Stream.of(Schema.Field.of("array", Schema.FieldType.array(Schema.FieldType.INT32, true))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testCreatesArray() { List<Integer> data = Lists.newArrayList(2, 3, 5, 7); Schema type = Stream.of(Schema.Field.of("array", Schema.FieldType.array(Schema.FieldType.INT32))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testArrayTypeToJavaType() { assertEquals( TypeDescriptors.lists(TypeDescriptors.longs()), FieldTypeDescriptors.javaTypeForFieldType(FieldType.array(FieldType.INT64))); assertEquals( TypeDescriptors.lists(TypeDescriptors.lists(TypeDescriptors.longs())), FieldTypeDescriptors.javaTypeForFieldType( FieldType.array(FieldType.array(FieldType.INT64)))); }
@Test public void testRowTypeToJavaType() { assertEquals( TypeDescriptors.lists(TypeDescriptors.rows()), FieldTypeDescriptors.javaTypeForFieldType( FieldType.array(FieldType.row(Schema.builder().build())))); }
@Test public void testConsistentWithEqualsArrayOfBytes() throws Exception { FieldType fieldType = FieldType.array(FieldType.BYTES); Schema schema = Schema.of(Schema.Field.of("f1", fieldType)); RowCoder coder = RowCoder.of(schema); List<byte[]> list1 = Collections.singletonList(new byte[] {1, 2, 3, 4}); Row row1 = Row.withSchema(schema).addValue(list1).build(); List<byte[]> list2 = Collections.singletonList(new byte[] {1, 2, 3, 4}); Row row2 = Row.withSchema(schema).addValue(list2).build(); Assume.assumeTrue(coder.consistentWithEquals()); CoderProperties.coderConsistentWithEquals(coder, row1, row2); }
@Test public void testCreatesArrayArray() { List<List<Integer>> data = Lists.<List<Integer>>newArrayList(Lists.newArrayList(1, 2, 3, 4)); Schema type = Stream.of(Schema.Field.of("array", FieldType.array(FieldType.array(FieldType.INT32)))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testArrayOfRowSchema() { Schema nestedSchema = Schema.of(Field.of("f1_str", FieldType.STRING)); FieldType arrayType = FieldType.array(FieldType.row(nestedSchema)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testCreatesArrayArrayWithNullElement() { List<List<Integer>> data = Lists.<List<Integer>>newArrayList(Lists.newArrayList(1, null, 3, null), null); Schema type = Stream.of( Schema.Field.of( "array", FieldType.array(FieldType.array(FieldType.INT32, true), true))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testMapTypeToJavaType() { assertEquals( TypeDescriptors.maps(TypeDescriptors.strings(), TypeDescriptors.longs()), FieldTypeDescriptors.javaTypeForFieldType( FieldType.map(FieldType.STRING, FieldType.INT64))); assertEquals( TypeDescriptors.maps( TypeDescriptors.strings(), TypeDescriptors.lists(TypeDescriptors.longs())), FieldTypeDescriptors.javaTypeForFieldType( FieldType.map(FieldType.STRING, FieldType.array(FieldType.INT64)))); }
@Test public void testNestedArraySchema() { FieldType arrayType = FieldType.array(FieldType.array(FieldType.STRING)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testArraySchema() { FieldType arrayType = FieldType.array(FieldType.STRING); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }