package liquibase.ext.ora.createSynonym; import liquibase.database.Database; import liquibase.database.core.OracleDatabase; import liquibase.exception.ValidationErrors; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.sqlgenerator.core.AbstractSqlGenerator; public class CreateSynonymGenerator extends AbstractSqlGenerator<CreateSynonymStatement> { public boolean supports(CreateSynonymStatement statement, Database database) { return database instanceof OracleDatabase; } public ValidationErrors validate(CreateSynonymStatement statement, Database database, SqlGeneratorChain chain) { ValidationErrors validationErrors = new ValidationErrors(); validationErrors.checkRequiredField("objectName", statement.getObjectName()); validationErrors.checkRequiredField("synonymName", statement.getSynonymName()); return validationErrors; } /** * CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]synonym FOR * [schema.]object[@dblink] ; * */ public Sql[] generateSql(CreateSynonymStatement statement, Database database, SqlGeneratorChain chain) { StringBuilder sql = new StringBuilder("CREATE "); if (statement.isReplace() != null && statement.isReplace()) { sql.append("OR REPLACE "); } if (statement.isPublic() != null && statement.isPublic()) { sql.append("PUBLIC "); } sql.append("SYNONYM "); if (statement.getSynonymSchemaName() != null) { sql.append(statement.getSynonymSchemaName()).append("."); } sql.append(statement.getSynonymName()); sql.append(" FOR "); if (statement.getObjectSchemaName() != null) { sql.append(statement.getObjectSchemaName()).append("."); } sql.append(statement.getObjectName()); return new Sql[] { new UnparsedSql(sql.toString()) }; } }