From 3d3f8273cc3611afe4328af8895e0afbd922aca3 Mon Sep 17 00:00:00 2001 From: Ayo K Date: Wed, 20 Jul 2022 15:40:17 +0100 Subject: [PATCH] CORE-3276 Update to RenameColumnGenerator.generateSql (#783) Update to RenameColumnGenerator.generateSql Mssql fix to follow syntax as per msdn: sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql?view=sql-server-2017 Co-authored-by: Nathan Voxland --- .../java/liquibase/sqlgenerator/core/RenameColumnGenerator.java | 2 +- .../renameColumn/mssql.sql | 2 +- .../liquibase/statementexecute/RenameColumnExecuteTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/liquibase-core/src/main/java/liquibase/sqlgenerator/core/RenameColumnGenerator.java b/liquibase-core/src/main/java/liquibase/sqlgenerator/core/RenameColumnGenerator.java index dd0f7ccc8fa..17ff78f505e 100644 --- a/liquibase-core/src/main/java/liquibase/sqlgenerator/core/RenameColumnGenerator.java +++ b/liquibase-core/src/main/java/liquibase/sqlgenerator/core/RenameColumnGenerator.java @@ -38,7 +38,7 @@ public Sql[] generateSql(RenameColumnStatement statement, Database database, Sql String sql; if (database instanceof MSSQLDatabase) { // do no escape the new column name. Otherwise it produce "exec sp_rename '[dbo].[person].[usernae]', '[username]'" - sql = "exec sp_rename '" + database.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName()) + "." + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getOldColumnName()) + "', '" + statement.getNewColumnName() + "'"; + sql = "exec sp_rename '" + database.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName()) + "." + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getOldColumnName()) + "', '" + statement.getNewColumnName() + "', 'COLUMN'"; } else if (database instanceof MySQLDatabase) { sql ="ALTER TABLE " + database.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName()) + " CHANGE " + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getOldColumnName()) + " " + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getNewColumnName()) + " " + DataTypeFactory.getInstance().fromDescription(statement.getColumnDataType(), database).toDatabaseDataType(database); } else if (database instanceof SybaseDatabase) { diff --git a/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/renameColumn/mssql.sql b/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/renameColumn/mssql.sql index 61ae5adcd6d..eabeb645430 100644 --- a/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/renameColumn/mssql.sql +++ b/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/renameColumn/mssql.sql @@ -2,4 +2,4 @@ -- Change Parameter: newColumnName=full_name -- Change Parameter: oldColumnName=name -- Change Parameter: tableName=person -exec sp_rename 'person.name', 'full_name'; +exec sp_rename 'person.name', 'full_name', 'COLUMN'; diff --git a/liquibase-integration-tests/src/test/java/liquibase/statementexecute/RenameColumnExecuteTest.java b/liquibase-integration-tests/src/test/java/liquibase/statementexecute/RenameColumnExecuteTest.java index 115de3401f8..aebc561f43c 100644 --- a/liquibase-integration-tests/src/test/java/liquibase/statementexecute/RenameColumnExecuteTest.java +++ b/liquibase-integration-tests/src/test/java/liquibase/statementexecute/RenameColumnExecuteTest.java @@ -50,7 +50,7 @@ public void noSchema() throws Exception { assertCorrect("alter table table_name alter column column_name rename to new_name", H2Database.class, HsqlDatabase.class); assertCorrect("alter table table_name alter column column_name to new_name", FirebirdDatabase.class); assertCorrect("alter table table_name change column_name new_name int", MySQLDatabase.class, MariaDBDatabase.class); - assertCorrect("exec sp_rename '[table_name].[column_name]', 'new_name'", MSSQLDatabase.class); + assertCorrect("exec sp_rename '[table_name].[column_name]', 'new_name', 'COLUMN'", MSSQLDatabase.class); assertCorrect("exec sp_rename 'table_name.column_name', 'new_name'", SybaseDatabase.class); assertCorrect("alter table [table_name] rename column_name to new_name",SybaseASADatabase.class); assertCorrectOnRest("alter table [table_name] rename column [column_name] to [new_name]");