in java/clickhouse-connector/src/main/java/com/epam/deltix/timebase/connector/clickhouse/algos/TableSchemaMerger.java [60:90]
private List<ColumnDeclaration> filterColumns(List<ColumnDeclaration> expectedTableColumns, String parentName) {
List<ColumnDeclaration> filterColumns = new ArrayList<>();
for (ColumnDeclaration column : expectedTableColumns) {
SqlDataType dbDataType = column.getDbDataType();
if (dbDataType instanceof ObjectDataType) {
ObjectDataType objectDataType = (ObjectDataType) dbDataType;
List<ColumnDeclaration> innerFilterColumns = filterColumns(objectDataType.getColumns(), parentName == null ? column.getDbColumnName() : parentName + SchemaProcessor.COLUMN_NAME_PART_SEPARATOR + column.getDbColumnName());
filterColumns.add(new ColumnDeclarationEx(column.getDbColumnName(),
new ObjectDataType(objectDataType.getColumnName(), innerFilterColumns)));
} else {
String columnName = parentName == null ? column.getDbColumnName() : parentName + SchemaProcessor.COLUMN_NAME_PART_SEPARATOR + column.getDbColumnName();
ColumnDeclaration actualColumn = actualTableColumns.get(columnName);
if (actualColumn != null) {
if (actualColumn.getDbDataType().getSqlDefinition().equals(column.getDbDataType().getSqlDefinition())) {
filterColumns.add(column);
} else {
String message = String.format("Existing table: '%s' does not match the types for column: '%s'. Expected type: %s",
tableName, columnName, column.getDbDataType().getSqlDefinition());
LOG.error(message);
throw new IllegalArgumentException(message);
}
} else {
hasChanges = true;
if (enableSchemaValidation) {
LOG.warn("Cannot find column '%s' in table '%s'. Column data will NOT be replicated.").with(columnName).with(tableName);
}
}
}
}
return filterColumns;
}