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