Coverage Report - liquibase.sqlgenerator.core.InsertGenerator
 
Classes in this File Line Coverage Branch Coverage Complexity
InsertGenerator
71%
23/32
50%
11/22
6.5
 
 1  
 package liquibase.sqlgenerator.core;
 2  
 
 3  
 import liquibase.database.Database;
 4  
 import liquibase.database.typeconversion.TypeConverterFactory;
 5  
 import liquibase.exception.ValidationErrors;
 6  
 import liquibase.sql.Sql;
 7  
 import liquibase.sql.UnparsedSql;
 8  
 import liquibase.sqlgenerator.SqlGenerator;
 9  
 import liquibase.sqlgenerator.SqlGeneratorChain;
 10  
 import liquibase.statement.core.InsertStatement;
 11  
 
 12  
 import java.util.Date;
 13  
 
 14  27
 public class InsertGenerator extends AbstractSqlGenerator<InsertStatement> {
 15  
 
 16  
     public ValidationErrors validate(InsertStatement insertStatement, Database database,
 17  
             SqlGeneratorChain sqlGeneratorChain) {
 18  15
         ValidationErrors validationErrors = new ValidationErrors();
 19  15
         validationErrors.checkRequiredField("tableName", insertStatement.getTableName());
 20  15
         validationErrors.checkRequiredField("columns", insertStatement.getColumnValues());
 21  
 
 22  15
         if (insertStatement.getSchemaName() != null && !database.supportsSchemas()) {
 23  0
             validationErrors.addError("Database does not support schemas");
 24  
         }
 25  
 
 26  15
         return validationErrors;
 27  
     }
 28  
 
 29  
     public Sql[] generateSql(InsertStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
 30  2
         StringBuffer sql = new StringBuffer("INSERT INTO "
 31  
                 + database.escapeTableName(statement.getSchemaName(), statement.getTableName()) + " (");
 32  2
         for (String column : statement.getColumnValues().keySet()) {
 33  4
             sql.append(database.escapeColumnName(statement.getSchemaName(), statement.getTableName(), column)).append(
 34  
                     ", ");
 35  
         }
 36  2
         sql.deleteCharAt(sql.lastIndexOf(" "));
 37  2
         sql.deleteCharAt(sql.lastIndexOf(","));
 38  
 
 39  2
         sql.append(") VALUES (");
 40  
 
 41  2
         for (String column : statement.getColumnValues().keySet()) {
 42  4
             Object newValue = statement.getColumnValues().get(column);
 43  4
             if (newValue == null || newValue.toString().equalsIgnoreCase("NULL")) {
 44  0
                 sql.append("NULL");
 45  4
             } else if (newValue instanceof String && database.shouldQuoteValue(((String) newValue))) {
 46  4
                 sql.append("'").append(database.escapeStringForDatabase((String) newValue)).append("'");
 47  0
             } else if (newValue instanceof Date) {
 48  0
                 sql.append(database.getDateLiteral(((Date) newValue)));
 49  0
             } else if (newValue instanceof Boolean) {
 50  0
                 if (((Boolean) newValue)) {
 51  0
                     sql.append(TypeConverterFactory.getInstance().findTypeConverter(database).getBooleanType()
 52  
                             .getTrueBooleanValue());
 53  
                 } else {
 54  0
                     sql.append(TypeConverterFactory.getInstance().findTypeConverter(database).getBooleanType()
 55  
                             .getFalseBooleanValue());
 56  
                 }
 57  
             } else {
 58  0
                 sql.append(newValue);
 59  
             }
 60  4
             sql.append(", ");
 61  4
         }
 62  
 
 63  2
         sql.deleteCharAt(sql.lastIndexOf(" "));
 64  2
         sql.deleteCharAt(sql.lastIndexOf(","));
 65  
 
 66  2
         sql.append(")");
 67  
 
 68  2
         return new Sql[] { new UnparsedSql(sql.toString()) };
 69  
     }
 70  
 }