private List getColumnDeclarations()

in java/clickhouse-connector/src/main/java/com/epam/deltix/timebase/connector/clickhouse/algos/SchemaProcessor.java [119:166]


    private List<ColumnDeclarationEx> getColumnDeclarations(RecordClassDescriptor...rcds) {

        Map<String, ColumnDeclarationEx> allColumnNames = new HashMap<>();
        List<ColumnDeclarationEx> columnDeclarations = new ArrayList<>();

        if (schemaOptions.isIncludePartitionColumn()) {
            ColumnDeclarationEx partition = new ColumnDeclarationEx(PARTITION_COLUMN_NAME,
                    new DateDataType(), true, false);
            columnDeclarations.add(partition);
        }

        ColumnDeclarationEx timestamp = new ColumnDeclarationEx(TIMESTAMP_COLUMN_NAME,
                new DateTime64DataType(9), false, false);
        columnDeclarations.add(timestamp);

        ColumnDeclarationEx instrument = new ColumnDeclarationEx(INSTRUMENT_COLUMN_NAME,
                new StringDataType(), false, true);
        columnDeclarations.add(instrument);
        columnDeclarations.add(new ColumnDeclarationEx(TYPE_COLUMN_NAME, new StringDataType(), false, true));

        for (RecordClassDescriptor descriptor : rcds) {
            RecordLayout recordLayout = new RecordLayout(descriptor);

            List<ColumnDeclarationEx> dataColumns = new ArrayList<>();
            final NonStaticFieldLayout[] nonStaticFields = recordLayout.getNonStaticFields();
            if (nonStaticFields == null)
                continue;

            for (NonStaticFieldLayout dataField : nonStaticFields) {
                ColumnDeclarationEx columnDeclarationStream = getColumnDeclaration(descriptor, dataField);
                dataColumns.add(columnDeclarationStream);
            }
            for (int i = 0; i < dataColumns.size(); i++) {
                ColumnDeclarationEx column = dataColumns.get(i);
                ColumnDeclarationEx columnProcessed = allColumnNames.get(column.getDbColumnName());
                if (columnProcessed != null) {
                    if (!columnProcessed.getDbDataType().getSqlDefinition().equals(column.getDbDataType().getSqlDefinition())) {
                        throw new DuplicateKeyException(String.format("Type: %s generates multiple columns with the same name (%s) but different types. " +
                                "Try using splitByTypes or change columnNamingScheme", descriptor.getName(), column.getDbColumnName()));
                    }
                } else {
                    columnDeclarations.add(column);
                    allColumnNames.put(column.getDbColumnName(), column);
                }
            }
        }
        return columnDeclarations;
    }