Coverage Report - liquibase.sqlgenerator.core.CreateIndexGenerator
 
Classes in this File Line Coverage Branch Coverage Complexity
CreateIndexGenerator
13%
5/38
0%
0/38
11.5
 
 1  
 package liquibase.sqlgenerator.core;
 2  
 
 3  
 import java.util.Arrays;
 4  
 import java.util.Iterator;
 5  
 import java.util.List;
 6  
 
 7  
 import liquibase.database.Database;
 8  
 import liquibase.database.core.DB2Database;
 9  
 import liquibase.database.core.InformixDatabase;
 10  
 import liquibase.database.core.MSSQLDatabase;
 11  
 import liquibase.database.core.OracleDatabase;
 12  
 import liquibase.database.core.SybaseASADatabase;
 13  
 import liquibase.database.structure.Index;
 14  
 import liquibase.exception.ValidationErrors;
 15  
 import liquibase.sql.Sql;
 16  
 import liquibase.sql.UnparsedSql;
 17  
 import liquibase.sqlgenerator.SqlGeneratorChain;
 18  
 import liquibase.statement.core.CreateIndexStatement;
 19  
 import liquibase.util.StringUtils;
 20  
 
 21  25
 public class CreateIndexGenerator extends AbstractSqlGenerator<CreateIndexStatement> {
 22  
 
 23  
     @Override
 24  
     public ValidationErrors validate(CreateIndexStatement createIndexStatement, Database database,
 25  
             SqlGeneratorChain sqlGeneratorChain) {
 26  15
         ValidationErrors validationErrors = new ValidationErrors();
 27  15
         validationErrors.checkRequiredField("tableName", createIndexStatement.getTableName());
 28  15
         validationErrors.checkRequiredField("columns", createIndexStatement.getColumns());
 29  15
         return validationErrors;
 30  
     }
 31  
 
 32  
     @Override
 33  
     public Sql[] generateSql(CreateIndexStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
 34  
 
 35  0
         if (database instanceof OracleDatabase) {
 36  
             // Oracle don't create index when creates foreignKey
 37  
             // It means that all indexes associated with foreignKey should be created manualy
 38  0
             List<String> associatedWith = StringUtils.splitAndTrim(statement.getAssociatedWith(), ",");
 39  0
             if (associatedWith != null
 40  
                     && (associatedWith.contains(Index.MARK_PRIMARY_KEY) || associatedWith
 41  
                             .contains(Index.MARK_UNIQUE_CONSTRAINT))) {
 42  0
                 return new Sql[0];
 43  
             }
 44  0
         } else {
 45  
             // Default filter of index creation:
 46  
             // creation of all indexes with associations are switched off.
 47  0
             List<String> associatedWith = StringUtils.splitAndTrim(statement.getAssociatedWith(), ",");
 48  0
             if (associatedWith != null
 49  
                     && (associatedWith.contains(Index.MARK_PRIMARY_KEY)
 50  
                             || associatedWith.contains(Index.MARK_UNIQUE_CONSTRAINT) || associatedWith
 51  
                                 .contains(Index.MARK_FOREIGN_KEY))) {
 52  0
                 return new Sql[0];
 53  
             }
 54  
         }
 55  
 
 56  0
         StringBuffer buffer = new StringBuffer();
 57  
 
 58  0
         buffer.append("CREATE ");
 59  0
         if (statement.isUnique() != null && statement.isUnique()) {
 60  0
             buffer.append("UNIQUE ");
 61  
         }
 62  0
         buffer.append("INDEX ");
 63  
 
 64  0
         if (statement.getIndexName() != null) {
 65  0
             String indexSchema = statement.getTableSchemaName();
 66  0
             buffer.append(database.escapeIndexName(indexSchema, statement.getIndexName())).append(" ");
 67  
         }
 68  0
         buffer.append("ON ");
 69  0
         buffer.append(database.escapeTableName(statement.getTableSchemaName(), statement.getTableName())).append("(");
 70  0
         Iterator<String> iterator = Arrays.asList(statement.getColumns()).iterator();
 71  0
         while (iterator.hasNext()) {
 72  0
             String column = iterator.next();
 73  0
             buffer.append(database.escapeColumnName(statement.getTableSchemaName(), statement.getTableName(), column));
 74  0
             if (iterator.hasNext()) {
 75  0
                 buffer.append(", ");
 76  
             }
 77  0
         }
 78  0
         buffer.append(")");
 79  
 
 80  0
         if (StringUtils.trimToNull(statement.getTablespace()) != null && database.supportsTablespaces()) {
 81  0
             if (database instanceof MSSQLDatabase || database instanceof SybaseASADatabase) {
 82  0
                 buffer.append(" ON ").append(statement.getTablespace());
 83  0
             } else if (database instanceof DB2Database || database instanceof InformixDatabase) {
 84  0
                 buffer.append(" IN ").append(statement.getTablespace());
 85  
             } else {
 86  0
                 buffer.append(" TABLESPACE ").append(statement.getTablespace());
 87  
             }
 88  
         }
 89  
 
 90  0
         return new Sql[] { new UnparsedSql(buffer.toString()) };
 91  
     }
 92  
 }