private StringBuilder generateIndexSql()

in src/main/java/com/epam/digital/data/platform/liquibase/extension/sqlgenerator/core/DdmCreateAbstractViewGenerator.java [119:173]


    private StringBuilder generateIndexSql(DdmCreateAbstractViewStatement statement) {
        StringBuilder buffer = new StringBuilder();

        for (DdmTableConfig table : statement.getTables()) {
            for (DdmColumnConfig column : table.getColumns()) {
                if (column.getSearchType() != null) {
                    DdmPair pair = getTableColumnPairForCteColumn(statement, table.getName(), column.getName());

                    String tableName = pair.getKey();
                    String columnName = pair.getValue();

                    buffer.append("\n\n");
                    buffer.append("CREATE INDEX IF NOT EXISTS ");
                    buffer.append(DdmConstants.PREFIX_INDEX);
                    buffer.append(tableName);
                    buffer.append("__");
                    buffer.append(columnName);

                    buffer.append(" ON ");
                    buffer.append(tableName);

                    if (column.getSearchType().equalsIgnoreCase(DdmConstants.ATTRIBUTE_CONTAINS)) {
                        buffer.append(" USING GIN ");
                    }

                    buffer.append("(");

                    boolean isColumnCastable = DdmUtils.isColumnAvailableForCasting(column);
                    if (column.getSearchType().equalsIgnoreCase(DdmConstants.ATTRIBUTE_CONTAINS)) {
                        columnName += " gin_trgm_ops";
                    } else if (column.getSearchType().equalsIgnoreCase(DdmConstants.ATTRIBUTE_STARTS_WITH) ||
                            column.getSearchType().equalsIgnoreCase(DdmConstants.ATTRIBUTE_STARTS_WITH_ARRAY)) {
                        columnName += " ";

                        if (column.getType().equalsIgnoreCase(DdmConstants.TYPE_CHAR)) {
                            columnName += "bp";
                        }

                        columnName += column.getType().toLowerCase();
                        columnName += "_pattern_ops";
                    } else if (isColumnCastable) {
                        buffer.append("lower(cast(");
                    }

                    buffer.append(columnName);
                    if (isColumnCastable) {
                        buffer.append(" as varchar))");
                    }
                    buffer.append(");");
                }
            }
        }

        return buffer;
    }