docs: public static InternalType createInternalTypeFromTypeInfo(TypeInformation typeInfo) {
  		InternalType type = TYPE_INFO_TO_INTERNAL_TYPE.get(typeInfo);
  		if (type != null) {
  			return type;
  		}
  
  		if (typeInfo instanceof CompositeType) {
  			CompositeType compositeType = (CompositeType) typeInfo;
  			return InternalTypes.createRowType(
  					Stream.iterate(0, x -> x + 1).limit(compositeType.getArity())
  							.map((Function<Integer, TypeInformation>) compositeType::getTypeAt)
  							.map(TypeConverters::createInternalTypeFromTypeInfo)
  							.toArray(InternalType[]::new),
  					compositeType.getFieldNames()
  			);
  		} else if (typeInfo instanceof DecimalTypeInfo) {
  			DecimalTypeInfo decimalType = (DecimalTypeInfo) typeInfo;
  			return InternalTypes.createDecimalType(decimalType.precision(), decimalType.scale());
  		} else if (typeInfo instanceof PrimitiveArrayTypeInfo) {
  			PrimitiveArrayTypeInfo arrayType = (PrimitiveArrayTypeInfo) typeInfo;
  			return InternalTypes.createArrayType(
  					createInternalTypeFromTypeInfo(arrayType.getComponentType()));
  		} else if (typeInfo instanceof BasicArrayTypeInfo) {
  			BasicArrayTypeInfo arrayType = (BasicArrayTypeInfo) typeInfo;
  			return InternalTypes.createArrayType(
  					createInternalTypeFromTypeInfo(arrayType.getComponentInfo()));
  		} else if (typeInfo instanceof ObjectArrayTypeInfo) {
  			ObjectArrayTypeInfo arrayType = (ObjectArrayTypeInfo) typeInfo;
  			return InternalTypes.createArrayType(
  					createInternalTypeFromTypeInfo(arrayType.getComponentInfo()));
  		} else if (typeInfo instanceof MapTypeInfo) {
  			MapTypeInfo mapType = (MapTypeInfo) typeInfo;
  			return InternalTypes.createMapType(
  					createInternalTypeFromTypeInfo(mapType.getKeyTypeInfo()),
  					createInternalTypeFromTypeInfo(mapType.getValueTypeInfo()));
  		} else if (typeInfo instanceof BinaryMapTypeInfo) {
  			BinaryMapTypeInfo mapType = (BinaryMapTypeInfo) typeInfo;
  			return InternalTypes.createMapType(
  					mapType.getKeyType(), mapType.getValueType());
  		} else if (typeInfo instanceof BinaryArrayTypeInfo) {
  			BinaryArrayTypeInfo arrayType = (BinaryArrayTypeInfo) typeInfo;
  			return InternalTypes.createArrayType(arrayType.getElementType());
  		} else if (typeInfo instanceof BigDecimalTypeInfo) {
  			BigDecimalTypeInfo decimalType = (BigDecimalTypeInfo) typeInfo;
  			return new DecimalType(decimalType.precision(), decimalType.scale());
  		} else {
  			return InternalTypes.createGenericType(typeInfo);
  		}
  	}