package liquibase.ext.spatial.sqlgenerator; import java.util.Arrays; import java.util.Iterator; import liquibase.database.Database; import liquibase.database.core.PostgresDatabase; import liquibase.ext.spatial.statement.CreateSpatialIndexStatement; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.structure.core.Index; /** * <code>CreateSpatialIndexGeneratorMySQL</code> generates the SQL for creating a spatial index in * MySQL. */ public class CreateSpatialIndexGeneratorPostgreSQL extends AbstractCreateSpatialIndexGenerator { @Override public boolean supports(final CreateSpatialIndexStatement statement, final Database database) { return database instanceof PostgresDatabase; } @Override public Sql[] generateSql(final CreateSpatialIndexStatement statement, final Database database, final SqlGeneratorChain sqlGeneratorChain) { final StringBuilder sql = new StringBuilder(); sql.append("CREATE INDEX "); sql.append(database.escapeObjectName(statement.getIndexName(), Index.class)); sql.append(" ON "); sql.append(database.escapeTableName(statement.getTableCatalogName(), statement.getTableSchemaName(), statement.getTableName())); sql.append(" USING GIST ").append("("); final Iterator<String> iterator = Arrays.asList(statement.getColumns()).iterator(); while (iterator.hasNext()) { final String column = iterator.next(); sql.append(database.escapeColumnName(statement.getTableCatalogName(), statement.getTableSchemaName(), statement.getTableName(), column)); if (iterator.hasNext()) { sql.append(", "); } } sql.append(")"); final Sql createIndex = new UnparsedSql(sql.toString(), getAffectedIndex(statement)); return new Sql[] { createIndex }; } }