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