@Override public List<StdData> fields() { return IntStream.range(0, _struct.getFields().size()).mapToObj(this::getField).collect(Collectors.toList()); } }
/** * Creates a row from the provided elements to pass to the test framework */ protected static Row row(Object... args) { return new Row(Arrays.asList(args)); }
private Pair<TestType, Object> resolveStruct(Row struct, List<TestType> fieldTypes) { List<TestType> resolvedFieldTypes = new ArrayList<>(); List<Object> resolvedFields = new ArrayList<>(); IntStream.range(0, fieldTypes.size()).forEach(idx -> { Pair<TestType, Object> resolvedField = resolveParameter(struct.getFields().get(idx), fieldTypes.get(idx)); resolvedFieldTypes.add(resolvedField.getLeft()); resolvedFields.add(resolvedField.getRight()); }); return Pair.of(TestTypeFactory.struct(resolvedFieldTypes), new Row(resolvedFields)); } }
/** * Returns a {@link List} for the given struct while also converting nested elements */ @Override public Object getStructData(Row struct, List<TestType> fieldTypes, List<String> fieldNames) { return IntStream.range(0, struct.getFields().size()) .mapToObj(idx -> convertToTestOutput(struct.getFields().get(idx), fieldTypes.get(idx))) .collect(Collectors.toList()); } }
/** * Creates a row from the provided elements to pass to the test framework */ protected static Row row(Object... args) { return new Row(Arrays.asList(args)); }
/** * Returns string of the format {"fieldName1":value2,"fieldName2":value2} for the given struct */ @Override public Object getStructData(Row struct, List<TestType> fieldTypes, List<String> fieldNames) { return IntStream.range(0, struct.getFields().size()) .mapToObj(idx -> "\"" + ((fieldNames != null) ? fieldNames.get(idx) : "field" + idx) + "\":" + getHiveTestOutputInComplexTypes(struct.getFields().get(idx), fieldTypes.get(idx))) .collect(Collectors.joining(",", "{", "}")); }
public GenericStruct(TestType type) { this(new Row(new ArrayList<>(Collections.nCopies(((StructTestType) type).getFieldTypes().size(), null))), type); }
/** * Returns a SQL string of the format {@code STRUCT(f1, f2, f3, ...)} representing a struct literal */ default String getStructArgumentString(Row struct, List<TestType> structFieldTypes) { List<Object> structFields = struct.getFields(); return "STRUCT" + "(" + IntStream.range(0, structFields.size()) .mapToObj(idx -> getFunctionCallArgumentString(structFields.get(idx), structFieldTypes.get(idx))) .collect(Collectors.joining(", ")) + ")"; } }
@Override public String getStructArgumentString(Row struct, List<TestType> structFieldTypes) { List<Object> structFields = struct.getFields(); return "(" + IntStream.range(0, structFields.size()) .mapToObj(idx -> getFunctionCallArgumentString(structFields.get(idx), structFieldTypes.get(idx))) .collect(Collectors.joining(", ")) + ")"; } }
/** * Returns a SQL string of the format {@code STRUCT(f1, f2, f3, ...)} representing a struct literal */ default String getStructArgumentString(Row struct, List<TestType> structFieldTypes) { List<Object> structFields = struct.getFields(); return "STRUCT" + "(" + IntStream.range(0, structFields.size()) .mapToObj(idx -> getFunctionCallArgumentString(structFields.get(idx), structFieldTypes.get(idx))) .collect(Collectors.joining(", ")) + ")"; } }
@Override public void setField(int index, StdData value) { _struct.getFields().set(index, ((PlatformData) value).getUnderlyingData()); }
@Override public StdData getField(int index) { return GenericWrapper.createStdData(_struct.getFields().get(index), _fieldTypes.get(index)); }
public static TestType inferTypeFromData(Object data) { if (data == null) { return TestTypeFactory.UNKNOWN_TEST_TYPE; } else if (data instanceof Integer) { return TestTypeFactory.INTEGER_TEST_TYPE; } else if (data instanceof Long) { return TestTypeFactory.LONG_TEST_TYPE; } else if (data instanceof Boolean) { return TestTypeFactory.BOOLEAN_TEST_TYPE; } else if (data instanceof String) { return TestTypeFactory.STRING_TEST_TYPE; } else if (data instanceof List) { return TestTypeFactory.array(inferCollectionTypeFromData((List) data, "array elements")); } else if (data instanceof Map) { Map map = (Map) data; return TestTypeFactory.map(inferCollectionTypeFromData(map.keySet(), "map keys"), inferCollectionTypeFromData(map.values(), "map values")); } else if (data instanceof Row) { return TestTypeFactory.struct( ((Row) data).getFields().stream().map(TestTypeUtils::inferTypeFromData).collect(Collectors.toList())); } else if (data instanceof FunctionCall) { return TestTypeFactory.UNKNOWN_TEST_TYPE; } else { throw new IllegalArgumentException("Input parameter of type " + data.getClass() + " not supported."); } }
public static TestType inferTypeFromData(Object data) { if (data == null) { return TestTypeFactory.UNKNOWN_TEST_TYPE; } else if (data instanceof Integer) { return TestTypeFactory.INTEGER_TEST_TYPE; } else if (data instanceof Long) { return TestTypeFactory.LONG_TEST_TYPE; } else if (data instanceof Boolean) { return TestTypeFactory.BOOLEAN_TEST_TYPE; } else if (data instanceof String) { return TestTypeFactory.STRING_TEST_TYPE; } else if (data instanceof List) { return TestTypeFactory.array(inferCollectionTypeFromData((List) data, "array elements")); } else if (data instanceof Map) { Map map = (Map) data; return TestTypeFactory.map(inferCollectionTypeFromData(map.keySet(), "map keys"), inferCollectionTypeFromData(map.values(), "map values")); } else if (data instanceof Row) { return TestTypeFactory.struct( ((Row) data).getFields().stream().map(TestTypeUtils::inferTypeFromData).collect(Collectors.toList())); } else if (data instanceof FunctionCall) { return TestTypeFactory.UNKNOWN_TEST_TYPE; } else { throw new IllegalArgumentException("Input parameter of type " + data.getClass() + " not supported."); } }