private static FieldType getMapFieldType(TypeDescriptor typeDescriptor) { TypeDescriptor<Collection<?>> map = typeDescriptor.getSupertype(Map.class); if (map.getType() instanceof ParameterizedType) { ParameterizedType ptype = (ParameterizedType) map.getType(); java.lang.reflect.Type[] params = ptype.getActualTypeArguments(); return FieldType.map( fieldTypeForJavaType(TypeDescriptor.of(params[0])), fieldTypeForJavaType(TypeDescriptor.of(params[1]))); } throw new RuntimeException("Cound not determine array parameter type for field."); } }
/** Aggregate all values of a set of fields into an output field. */ <CombineInputT, AccumT, CombineOutputT> Inner<T> aggregateFields( FieldAccessDescriptor fieldsToAggregate, CombineFn<CombineInputT, AccumT, CombineOutputT> fn, String outputFieldName) { return aggregateFields( fieldsToAggregate, fn, Field.of(outputFieldName, FieldTypeDescriptors.fieldTypeForJavaType(fn.getOutputType()))); }
private static FieldType getArrayFieldType(TypeDescriptor typeDescriptor) { if (typeDescriptor.isArray()) { if (typeDescriptor.getComponentType().getType().equals(byte.class)) { return FieldType.BYTES; } else { return FieldType.array(fieldTypeForJavaType(typeDescriptor.getComponentType())); } } if (typeDescriptor.isSubtypeOf(TypeDescriptor.of(Collection.class))) { TypeDescriptor<Collection<?>> collection = typeDescriptor.getSupertype(Collection.class); if (collection.getType() instanceof ParameterizedType) { ParameterizedType ptype = (ParameterizedType) collection.getType(); java.lang.reflect.Type[] params = ptype.getActualTypeArguments(); checkArgument(params.length == 1); return FieldType.array(fieldTypeForJavaType(TypeDescriptor.of(params[0]))); } } throw new RuntimeException("Could not determine array parameter type for field."); }
@Test public void testRowTypeToFieldType() { thrown.expect(IllegalArgumentException.class); FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.rows()); }
@Test public void testPrimitiveTypeToFieldType() { assertEquals( FieldType.BYTE, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.bytes())); assertEquals( FieldType.INT16, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.shorts())); assertEquals( FieldType.INT32, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.integers())); assertEquals( FieldType.INT64, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.longs())); assertEquals( FieldType.DECIMAL, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.bigdecimals())); assertEquals( FieldType.FLOAT, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.floats())); assertEquals( FieldType.DOUBLE, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.doubles())); assertEquals( FieldType.STRING, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.strings())); assertEquals( FieldType.DATETIME, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptor.of(Instant.class))); assertEquals( FieldType.BOOLEAN, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptors.booleans())); assertEquals( FieldType.BYTES, FieldTypeDescriptors.fieldTypeForJavaType(TypeDescriptor.of(byte[].class))); }
@Test public void testArrayTypeToFieldType() { assertEquals( FieldType.array(FieldType.STRING), FieldTypeDescriptors.fieldTypeForJavaType( TypeDescriptors.lists(TypeDescriptors.strings()))); assertEquals( FieldType.array(FieldType.array(FieldType.STRING)), FieldTypeDescriptors.fieldTypeForJavaType( TypeDescriptors.lists(TypeDescriptors.lists(TypeDescriptors.strings())))); assertEquals( FieldType.array(FieldType.STRING), FieldTypeDescriptors.fieldTypeForJavaType( TypeDescriptor.of(new ArrayList<String>() {}.getClass()))); }
@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())))); } }