use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.
the class InternalDataUtils method toGenericMap.
static GenericMapData toGenericMap(MapData mapData, LogicalType logicalType) {
final LogicalType keyType = logicalType.is(LogicalTypeRoot.MULTISET) ? ((MultisetType) logicalType).getElementType() : ((MapType) logicalType).getKeyType();
final LogicalType valueType = logicalType.is(LogicalTypeRoot.MULTISET) ? new IntType(false) : ((MapType) logicalType).getValueType();
final ArrayData.ElementGetter keyGetter = ArrayData.createElementGetter(keyType);
final ArrayData.ElementGetter valueGetter = ArrayData.createElementGetter(valueType);
final ArrayData keys = mapData.keyArray();
final ArrayData values = mapData.valueArray();
final LinkedHashMap<Object, Object> newMap = new LinkedHashMap<>();
for (int i = 0; i < mapData.size(); i++) {
Object key = null;
Object value = null;
if (!keys.isNullAt(i)) {
key = toGenericInternalData(keyGetter.getElementOrNull(keys, i), keyType);
}
if (!values.isNullAt(i)) {
value = toGenericInternalData(valueGetter.getElementOrNull(values, i), valueType);
}
newMap.put(key, value);
}
return new GenericMapData(newMap);
}
use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.
the class LogicalTypesTest method testRowType.
@Test
public void testRowType() {
assertThat(new RowType(Arrays.asList(new RowType.RowField("a", new VarCharType(), "Someone's desc."), new RowType.RowField("b`", new TimestampType())))).satisfies(baseAssertions("ROW<`a` VARCHAR(1) 'Someone''s desc.', `b``` TIMESTAMP(6)>", "ROW<`a` VARCHAR(1) '...', `b``` TIMESTAMP(6)>", new Class[] { Row.class }, new Class[] { Row.class }, new LogicalType[] { new VarCharType(), new TimestampType() }, new RowType(Arrays.asList(new RowType.RowField("a", new VarCharType(), "Different desc."), new RowType.RowField("b`", new TimestampType())))));
assertThatThrownBy(() -> new RowType(Arrays.asList(new RowType.RowField("b", new VarCharType()), new RowType.RowField("b", new VarCharType()), new RowType.RowField("a", new VarCharType()), new RowType.RowField("a", new TimestampType())))).isInstanceOf(ValidationException.class);
assertThatThrownBy(() -> new RowType(Collections.singletonList(new RowType.RowField("", new VarCharType())))).isInstanceOf(ValidationException.class);
}
use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.
the class LogicalTypesTest method nullability.
private static void nullability(LogicalType nullableType) {
final LogicalType notNullInstance = nullableType.copy(false);
assertThat(notNullInstance).isNotNullable();
assertThat(nullableType).isNotEqualTo(notNullInstance);
}
use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.
the class LogicalTypesTest method testArrayType.
@Test
public void testArrayType() {
assertThat(new ArrayType(new TimestampType())).satisfies(baseAssertions("ARRAY<TIMESTAMP(6)>", "ARRAY<TIMESTAMP(6)>", new Class[] { java.sql.Timestamp[].class, java.time.LocalDateTime[].class, List.class, ArrayList.class }, new Class[] { java.sql.Timestamp[].class, java.time.LocalDateTime[].class, List.class }, new LogicalType[] { new TimestampType() }, new ArrayType(new SmallIntType())));
assertThat(new ArrayType(new ArrayType(new TimestampType()))).satisfies(baseAssertions("ARRAY<ARRAY<TIMESTAMP(6)>>", "ARRAY<ARRAY<TIMESTAMP(6)>>", new Class[] { java.sql.Timestamp[][].class, java.time.LocalDateTime[][].class }, new Class[] { java.sql.Timestamp[][].class, java.time.LocalDateTime[][].class }, new LogicalType[] { new ArrayType(new TimestampType()) }, new ArrayType(new ArrayType(new SmallIntType()))));
final LogicalType nestedArray = new ArrayType(new ArrayType(new TimestampType()));
assertThat(nestedArray).doesNotSupportInputConversion(java.sql.Timestamp[].class).doesNotSupportOutputConversion(java.sql.Timestamp[].class);
}
use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.
the class LogicalTypesTest method testMultisetType.
@Test
public void testMultisetType() {
assertThat(new MultisetType(new TimestampType())).satisfies(baseAssertions("MULTISET<TIMESTAMP(6)>", "MULTISET<TIMESTAMP(6)>", new Class[] { Map.class, HashMap.class, TreeMap.class }, new Class[] { Map.class }, new LogicalType[] { new TimestampType() }, new MultisetType(new SmallIntType())));
assertThat(new MultisetType(new MultisetType(new TimestampType()))).satisfies(baseAssertions("MULTISET<MULTISET<TIMESTAMP(6)>>", "MULTISET<MULTISET<TIMESTAMP(6)>>", new Class[] { Map.class, HashMap.class, TreeMap.class }, new Class[] { Map.class }, new LogicalType[] { new MultisetType(new TimestampType()) }, new MultisetType(new MultisetType(new SmallIntType()))));
}
Aggregations