in timescaledb-connector/src/main/java/com/epam/deltix/timebase/connector/service/timebase/TimebaseDescriptorService.java [110:155]
private List<TimescaleColumn> getColumns(com.epam.deltix.timebase.messages.schema.RecordClassDescriptor descriptor, String parentFieldName,
Map<CharSequence, com.epam.deltix.timebase.messages.schema.ClassDescriptorInfo> descriptorsMap) {
List<TimescaleColumn> columns = new ArrayList<>();
if (!descriptor.isAbstract()) {
String descriptorColumnName;
if (parentFieldName != null) {
descriptorColumnName = parentFieldName + "_" + "descriptor_name";
} else {
descriptorColumnName = "descriptor_name";
}
columns.add(TimescaleColumn.builder()
.dataType(TimescaleColumn.TimescaleDataType.VARCHAR)
.relatedDescriptors(Collections.singletonList(descriptor.getName().toString()))
.name(descriptorColumnName)
.build());
}
com.epam.deltix.timebase.messages.schema.RecordClassDescriptorInfo parentDescriptor = descriptor.getParent();
ObjectArrayList<DataFieldInfo> fields = descriptor.getDataFields();
for (DataFieldInfo field : fields) {
DataTypeInfo dataType = field.getDataType();
if (dataType instanceof com.epam.deltix.timebase.messages.schema.ClassDataType) {
com.epam.deltix.timebase.messages.schema.ClassDataType classDataType = (com.epam.deltix.timebase.messages.schema.ClassDataType) dataType;
ObjectArrayList<ClassDescriptorRefInfo> classDescriptorsRef = classDataType.getTypeDescriptors();
for (ClassDescriptorRefInfo descriptorRef : classDescriptorsRef) {
columns.addAll(getColumns(
(com.epam.deltix.timebase.messages.schema.RecordClassDescriptor) descriptorsMap.get(descriptorRef.getName()),
parentFieldName == null ? field.getName().toString() : parentFieldName + "_" + field.getName(),
descriptorsMap)
);
}
} else {
columns.add(MigrationUtils.convert(field, parentFieldName, descriptor.getName().toString()));
}
}
if (parentDescriptor != null) {
columns.addAll(getColumns((com.epam.deltix.timebase.messages.schema.RecordClassDescriptor) parentDescriptor, parentFieldName, descriptorsMap));
}
return columns;
}