protected CreateTableStatement createStatement()

in src/main/java/com/epam/digital/data/platform/liquibase/extension/change/core/DdmCreateTableChange.java [221:285]


    protected CreateTableStatement createStatement(Database database) {
        SqlStatement[] statements = super.generateStatements(database);
        CreateTableStatement statement = (CreateTableStatement) statements[0];

        UniqueConstraint uc = new UniqueConstraint(DdmConstants.PREFIX_UNIQUE_INDEX + getTableName());
        if (statement.getPrimaryKeyConstraint() != null) {
            statement.getPrimaryKeyConstraint().getColumns().forEach(uc::addColumns);
        }

        for (DdmHistoryTableColumn column : parameters.getHistoryTableColumns()) {
            if (StringUtil.isEmpty(column.getScope())
                || DdmParameters.isAll(column.getScope())
                || (DdmParameters.isPrimary(column.getScope()) && (!historyTable.get()))
                || (DdmParameters.isHistory(column.getScope()) && (historyTable.get()))) {
                statement.addColumn(
                    column.getName(),
                    DataTypeFactory.getInstance().fromDescription(column.getType(), database),
                    !StringUtil.isEmpty(column.getDefaultValueComputed()) ? new DatabaseFunction(column.getDefaultValueComputed()) : null);
            }

            if (!column.getNullable()) {
                statement.addColumnConstraint(new NotNullConstraint(column.getName()));
            }

            if (column.getUniqueWithPrimaryKey()) {
                uc.addColumns(column.getName());
            }
        }

        if (hasClassify()) {
            parameters.getDcmColumns().forEach(column -> statement.addColumn(
                column.getName(),
                DataTypeFactory.getInstance().fromDescription(column.getType(), database),
                null));

            setIsObject(true);
        }

        if (Boolean.TRUE.equals(getIsObject())) {
            if (!fieldExists(statement, parameters.getSubjectColumn())) {
                statement.addColumn(
                    parameters.getSubjectColumn(),
                    DataTypeFactory.getInstance().fromDescription(parameters.getSubjectColumnType(), database),
                    new ColumnConstraint[]{new NotNullConstraint(parameters.getSubjectColumn())});
            }

            if (!historyTable.get()) {
                ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint(
                    "fk_" + getTableName() + "_" + parameters.getSubjectTable(),
                    null,
                    parameters.getSubjectTable(),
                    parameters.getSubjectColumn());
                fkConstraint.setColumn(parameters.getSubjectColumn());

                statement.addColumnConstraint(fkConstraint);
            }
        }

        if (historyTable.get()) {
            statement.getUniqueConstraints().clear();
            statement.addColumnConstraint(uc);
        }

        return statement;
    }