Skip to content

Commit

Permalink
CORE-3276 Update to RenameColumnGenerator.generateSql (#783)
Browse files Browse the repository at this point in the history
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 <nathan@voxland.net>
  • Loading branch information
mide25 and nvoxland committed Jul 20, 2022
1 parent 9b4f534 commit 3d3f827
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
Expand Up @@ -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) {
Expand Down
Expand Up @@ -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';
Expand Up @@ -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]");
Expand Down

0 comments on commit 3d3f827

Please sign in to comment.