Coverage Report - liquibase.sqlgenerator.core.MarkChangeSetRanGenerator
 
Classes in this File Line Coverage Branch Coverage Complexity
MarkChangeSetRanGenerator
14%
4/28
0%
0/16
5
 
 1  
 package liquibase.sqlgenerator.core;
 2  
 
 3  
 import java.util.List;
 4  
 
 5  
 import liquibase.change.Change;
 6  
 import liquibase.change.core.TagDatabaseChange;
 7  
 import liquibase.changelog.ChangeSet;
 8  
 import liquibase.database.Database;
 9  
 import liquibase.exception.LiquibaseException;
 10  
 import liquibase.exception.UnexpectedLiquibaseException;
 11  
 import liquibase.exception.ValidationErrors;
 12  
 import liquibase.sql.Sql;
 13  
 import liquibase.sqlgenerator.SqlGeneratorChain;
 14  
 import liquibase.sqlgenerator.SqlGeneratorFactory;
 15  
 import liquibase.statement.DatabaseFunction;
 16  
 import liquibase.statement.SqlStatement;
 17  
 import liquibase.statement.core.InsertStatement;
 18  
 import liquibase.statement.core.MarkChangeSetRanStatement;
 19  
 import liquibase.statement.core.UpdateStatement;
 20  
 import liquibase.util.LiquibaseUtil;
 21  
 import liquibase.util.StringUtils;
 22  
 
 23  28
 public class MarkChangeSetRanGenerator extends AbstractSqlGenerator<MarkChangeSetRanStatement> {
 24  
 
 25  
     public ValidationErrors validate(MarkChangeSetRanStatement statement, Database database,
 26  
             SqlGeneratorChain sqlGeneratorChain) {
 27  15
         ValidationErrors validationErrors = new ValidationErrors();
 28  15
         validationErrors.checkRequiredField("changeSet", statement.getChangeSet());
 29  
 
 30  15
         return validationErrors;
 31  
     }
 32  
 
 33  
     public Sql[] generateSql(MarkChangeSetRanStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
 34  0
         String dateValue = database.getCurrentDateTimeFunction();
 35  
 
 36  0
         ChangeSet changeSet = statement.getChangeSet();
 37  
 
 38  
         SqlStatement runStatement;
 39  
         try {
 40  0
             if (statement.getExecType().equals(ChangeSet.ExecType.FAILED)
 41  
                     || statement.getExecType().equals(ChangeSet.ExecType.SKIPPED)) {
 42  0
                 return new Sql[0]; // don't mark
 43  0
             } else if (statement.getExecType().ranBefore) {
 44  0
                 runStatement = new UpdateStatement(database.getLiquibaseSchemaName(),
 45  
                         database.getDatabaseChangeLogTableName())
 46  
                         .addNewColumnValue("DATEEXECUTED", new DatabaseFunction(dateValue))
 47  
                         .addNewColumnValue("MD5SUM", changeSet.generateCheckSum().toString())
 48  
                         .addNewColumnValue("EXECTYPE", statement.getExecType().value)
 49  
                         .setWhereClause("ID=? AND AUTHOR=? AND FILENAME=?")
 50  
                         .addWhereParameters(changeSet.getId(), changeSet.getAuthor(), changeSet.getFilePath());
 51  
             } else {
 52  0
                 runStatement = new InsertStatement(database.getLiquibaseSchemaName(),
 53  
                         database.getDatabaseChangeLogTableName()).addColumnValue("ID", changeSet.getId())
 54  
                         .addColumnValue("AUTHOR", changeSet.getAuthor())
 55  
                         .addColumnValue("FILENAME", changeSet.getFilePath())
 56  
                         .addColumnValue("DATEEXECUTED", new DatabaseFunction(dateValue))
 57  
                         .addColumnValue("ORDEREXECUTED", database.getNextChangeSetSequenceValue())
 58  
                         .addColumnValue("MD5SUM", changeSet.generateCheckSum().toString())
 59  
                         .addColumnValue("DESCRIPTION", limitSize(changeSet.getDescription()))
 60  
                         .addColumnValue("COMMENTS", limitSize(StringUtils.trimToEmpty(changeSet.getComments())))
 61  
                         .addColumnValue("EXECTYPE", statement.getExecType().value)
 62  
                         .addColumnValue("LIQUIBASE", LiquibaseUtil.getBuildVersion().replaceAll("SNAPSHOT", "SNP"));
 63  
 
 64  0
                 String tag = null;
 65  0
                 List<Change> changes = changeSet.getChanges();
 66  0
                 if (changes != null && changes.size() == 1) {
 67  0
                     Change change = changes.get(0);
 68  0
                     if (change instanceof TagDatabaseChange) {
 69  0
                         TagDatabaseChange tagChange = (TagDatabaseChange) change;
 70  0
                         tag = tagChange.getTag();
 71  
                     }
 72  
                 }
 73  0
                 if (tag != null) {
 74  0
                     ((InsertStatement) runStatement).addColumnValue("TAG", tag);
 75  
                 }
 76  
             }
 77  0
         } catch (LiquibaseException e) {
 78  0
             throw new UnexpectedLiquibaseException(e);
 79  0
         }
 80  
 
 81  0
         return SqlGeneratorFactory.getInstance().generateSql(runStatement, database);
 82  
     }
 83  
 
 84  
     private String limitSize(String string) {
 85  0
         int maxLength = 255;
 86  0
         if (string.length() > maxLength) {
 87  0
             return string.substring(0, maxLength - 3) + "...";
 88  
         }
 89  0
         return string;
 90  
     }
 91  
 }