in java/clickhouse-connector/src/integration-test/java/com/epam/deltix/timebase/connector/clickhouse/DeepObjectFieldTests.java [100:137]
void readFourLevelObject() {
L1 message = new L1(
new L2(new L3(new L4("l41", TestEnum.FIRST), "l3", List.of(TestEnum.FIRST.name())), "l2",
List.of(new L3(new L4("l42", TestEnum.SECOND), "l3ar1", List.of(TestEnum.FIRST.name(), TestEnum.SECOND.name())),
new L3(new L4("l42", TestEnum.DEFAULT), "l3arr2", List.of(TestEnum.FIRST.name(), TestEnum.DEFAULT.name()))
)
),
"l1");
initSystemRequiredFields(message);
Pair<DXTickStream, TableDeclaration> chSchemaByStream = loadAndReplicateData(message, L1.class, L2.class, L3.class, L4.class);
TableDeclaration tableDeclaration = chSchemaByStream.getRight();
Map<String, Object> values = selectAllValues(tableDeclaration).get(0);
Map<String, Object> expectedValues = new HashMap<>() {{
put("type", "deltix.clickhouse.timebase.L1");
put("L1_l1simple", "l1");
put("L1_l1obj_type", "deltix.clickhouse.timebase.L2");
put("L1_l1obj_L2_l2obj_type", "deltix.clickhouse.timebase.L3");
put("L1_l1obj_L2_l2simple", "l2");
put("L1_l1obj_L2_l2obj_L3_l3simple", "l3");
put("L1_l1obj_L2_l2obj_L3_l3obj_L4_l4simple", "l41");
put("L1_l1obj_L2_l2obj_L3_l3obj_L4_enumField", TestEnum.FIRST.name());
put("L1_l1obj_L2_l2obj_L3_enumArray", new String[]{TestEnum.FIRST.name()});
put("L1_l1obj_L2_l2obj_L3_l3obj_type", "deltix.clickhouse.timebase.L4");
put("L1_l1obj_L2_l2ArrObj.type", new String[]{"deltix.clickhouse.timebase.L3", "deltix.clickhouse.timebase.L3"});
put("L1_l1obj_L2_l2ArrObj.L3_l3obj_type", new String[]{"deltix.clickhouse.timebase.L4", "deltix.clickhouse.timebase.L4"});
put("L1_l1obj_L2_l2ArrObj.L3_l3obj_L4_l4simple", new String[]{"l42", "l42"});
put("L1_l1obj_L2_l2ArrObj.L3_l3obj_L4_enumField", new String[]{TestEnum.SECOND.name(), TestEnum.DEFAULT.name()});
put("L1_l1obj_L2_l2ArrObj.L3_enumArray", new String[][]{new String[]{TestEnum.FIRST.name(), TestEnum.SECOND.name()}, new String[]{TestEnum.FIRST.name(), TestEnum.DEFAULT.name()}});
put("L1_l1obj_L2_l2ArrObj.L3_l3simple", new String[]{"l3ar1", "l3arr2"});
}};
expectedValues.forEach((k, v) -> {
Object actualValue = values.get(k);
assertArrayEquals(new Object[]{v}, new Object[]{actualValue});
});
}