private List filterColumns()

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;
    }