| 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 |  |  } |